Вопреки расхожему мнению, применение планировщиков/диспетчеров позволяет значительно ускорить разработку приложений, затратив при этом совсем немного памяти. А, как известно, время разработчика дороже последней. Средний диспетчер занимает около 1 кБ flash. Это совсем немного, учитывая те возможности, которые он предоставляет.

Сделать свои программы более организованными мне, простому любителю, хотелось достаточно давно. Я опробовал на реальных устройствах несколько готовых простых планировщиков, но они меня не устроили. Поэтому я взял один из них за основу и переделал под свои нужды В этой статье я расскажу о том, что и почему я изменил, а также продемонстрирую несколько примеров его использования.   

Планировщик

   Стандартный путь построения программ для микроконтроллеров основывается на применении так называемого суперлупа (superloop). Он представляет собой бесконечный цикл, в теле которого запускаются различные функции. Функции могут запускаться постоянно или в случае выполнения каких-то условий, например установки флагов. 
   Программы, построенные на таком принципе, обычно используются для простых приложений  с небольшим количеством задач, и в которых нет требований к таймингам. 
  Другой способ организации микроконтроллерных программ основан на применении планировщиков. Такие программы лучше структурированы, их проще модифицировать и они позволяют задавать время запуска задач. 
   В этой статье мы рассмотрим один из вариантов реализации простого планировщика. 
    Решил немного разобраться с операционными системами реального времени (ОСРВ, RTOS). Не то чтобы в этом была какая-то острая нужда, это скорее спортивный интерес. Опыта использования подобных систем не имею, а значит, буду учиться вместе с вами.  
   О том, что такое ОСРВ, зачем она нужна и где используется,  я писать не буду. Есть несколько переведенных статей на эту тему, одну я уже выложил, остальные ждут своего часа.
   Операционных систем для 8-ми разрядных микроконтроллеров существует довольно много, но, проведя маркетинговое исследование, я остановил свой выбор на scmRTOS. Это многозадачная вытесняющая ОСРВ, разработанная для микроконтроллеров с маленьким объемом ОЗУ. Она бесплатная, к ней есть документация на русском языке, а также порты под разные типы микроконтроллеров и компиляторов. Написана она на Си++ и частично на ассемблере, надеюсь, это вас не пугает.