Ну если Вам не нужны вытесняемые задачи с приоритетами и разделяемый доступ к ресурсам нескольких таких задач, то почему не сделать просто на суперцикле? Общий алгоритм: Инициализация, запуск всей периферии с ISR, запус суперцикла. В фоновом цикле проверяем все флаги событий. Если есть какое-то событие - сброс флага и обработка события. Если при очередном проходе суперцикла не обнаружено ни одного флага - уход в сон. Если было хотя-бы одно событие - идём в начало цикла. В ISR-ах - установка флагов событий с выходом из сна (если флаг установлен, если нет - возврат в сон из прерывания). Делал подобный проект на MSP430. Там очень удобно - запрещаешь прерывания, проверяешь наличие хотя-бы одного флага события, если нету - уход в сон с одновременным разрешением прерываний (атомарно). И из прерываний там можно возвращаться либо со снятием флага сна либо без (с возвратом в сон). Там у меня есть просыпания от внешних сигналов и от таймера. Во время сна работает только один низкочастотный генератор, тактирующий пару таймеров. И никакой ОС не нужно.
|