Цитата(Arcanum @ Jan 20 2016, 04:26)

...
Я знаю что стоит. Скачал и посмотрел архив.
Потому что подобные недоRTOS и недодиспетчеры - это как сумасшедшая обезьяна с гранатой. Никогда не знаешь, рванет ли и когда. Объясню на примере световых эффектов. Задачи - режимы эффектов. При смене эффектов в таймерной очереди остаются задачи от предыдущего режима. И по истечении заданного времени они сработают. Потому что задачи не удалили.
1) "RTOS" таймерная служба работает в прерывании. Если таймеров много, то долго сидим в прерывании таймера.
2) "Дамоклов меч". Если смена режимов, аварийные ситуации, в очереди будут болтаться задачи, которые по истечении заданного времени сработают. Придумывать "убийц задач"? Но мы не знаем какие задачи удалять в определенные моменты.
3) По сути, эта РТОС и диспетчеры простенькие карусельки, задача которых проста до безобразия - прокручивать задачи процессы, что создает ложное впечатление легкости создания проектов. И таймерная служба в этой "РТОС", это не фича, а самая настоящая мина замедленного действия.
Решение - соблюдение правил написания проектов:
Модульность. Программа состоит из самостоятельных модулей. Определение "программных модулей": Мо́дуль — функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом или поименованной непрерывной её части, предназначенный для использования в других программах. Модули позволяют разбивать сложные задачи на более мелкие в соответствии с принципом модульности.
Никаких долгих циклов. Вход, выполнение кода, выход. Вход, проверка условий, в зависимости от условий соответствующее выполнение кода, выход.
Дробление сложных, долгих по выполнению процессов. Дробление процессов осуществляется условиями, флагами, состояниями конечных автоматов.
Цикл статей Татарчевского.
Статья. Но реализация автора мне не совсем нравится. Лучше взять за основу оригинал.
MicroMenu v2. Лично я считаю такую реализацию меню лучшей. Меню собирается как конструктор.
Видео одного моего проекта. Используется MicroMenu.
Моя реализация программных таймеров.
Теперь смотрим на целесообразность применения "RTOS", "диспетчеров". Так как роль этих лисапедов тупое переключение процессов, то какой от них смысл? Только такты на переключение зря терять.
У меня main выглядит так (просто список функций):
CODE
//========================================================================
__C_task main (void)
{
wdt_enable (WDTO_15_MS);
init_sys_timer ();
Init_Events ();
__enable_interrupt ();
while (1)
{
__watchdog_reset ();
service_timers ();
kbd_drv ();
drv_char_dsp ();
proc_nrf24l01 ();
tui_service ();
Process_Events ();
}
}
//========================================================================
Сообщение отредактировал IgorKossak - Jan 30 2016, 20:17
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!