Ксения (20.09.2019 15:15, просмотров: 1169) ответил Dingo на Навеяно топиком -> Собственно, что для вас значит [embedded OS] в контексте МК? Почему вы используете/не используете (вытесняющую, кооперативную, main loop)?
"В контексте МК" никаких задач не должно быть! :) Контроллер рассчитан на обслуживание периферии, а потому никаких других событий, помимо тех, что происходят на периферии, в его внутренней среде нет. А такие события, как правило, способны вызывать прерывания, не требуя пристального внимания со стороны процессора. Тем самым, сама собой реализуется идеальная система реального времени, т.к. прерывания в ответ на события происходят максимально быстро.
Процедуры обслуживания событий естественным образом выполняются в обработчике соответствущего им прерывания, если система прерываний многоприоритетная. В сложных случаях в обработчике прерывания можно делать лишь самые срочные дела, не требующие отлагательства, а несрочную часть кода вынести в main_loop, где такие несрочные дела будут выполняться в порядке живой очереди. Однако разнообразные реализации не меняют главного, когда обслуживание события является конечной по времени процедурой, а потому называть его задачей неправильно.
Тогда как задачи, в отличие от процедур обслуживания событий, имеют слишком долгое время жизни (чаще неограниченное во времени). Именно по причине своего долгожительства задачи не годятся на роль обработчиков событий, т.к. не успевают закончиться до момента наступления следущего события того же рода. Но самое гадкое в том, что сразу же возникает трудная проблема, когда задач-долгожителей становится больше одной. В последнем случае обслуживаться в порядке живой очереди они не могут, т.к. вторая по счету задача просто никогда не дождется своей очереди. Вот тут-то и появляется "вытесняющая многозадачность", которая проблему многозадачности решает, то слишком дорогой ценой.
В микроконтроллерах (до тех пор, пока они и в самом деле были микро) эту цену стараются не платить, обходясь без многозадачности, а то и без задач вообще - на одних только обработчиках событий. Причем примечательно, что ту же стратегию мы видим и во взрослых операционных системах, например, в Windows, где, несмотря на тотальную многозадачность, внутри каждого из приложений мы наблюдаем всё ту же "микроконтроллерную философию", когда программа пишется в духе множества обработчиков отдельных событий, только поступающих не от системы прерываний, а из очереди присылаемых ей сообщений. Но в целом сходство поразительное! Причем, внутри windows-приложения возникают точно такие же проблемы, когда хочется запустить задачу, которая бы работала долго-долго. Обычно программисты старой закалки :) на этом месте съеживались, когда от консольных приложений переходили на windows-программирование.