Есть много огромных преимуществ, которые имеет многозадачность RTOS:
Очень хорошая производительность ввода-вывода: RTOS может установить ожидающий поток готовым, как только запрошенное действие ввода-вывода завершено,поэтому задержка при обработке операций чтения / записи / чего угодно может быть низкой.Циклический, опрашиваемый дизайн не может отвечать на завершение ввода / вывода, пока не дойдет до проверки состояния ввода / вывода (либо непосредственно, либо моего опроса некоторого изменчивого флага, установленного обработчиком прерываний).
Независимые функции:Простота внедрения изолированных подсистем для последовательной связи, исполнительных механизмов и т. Д. Вполне может быть для вас одной, как это предлагается в других ответах.Очень обнадеживающе знать, что любая дополнительная задержка в, скажем, некотором последовательном обмене, не будет отрицательно влиять на синхронизацию в другом месте.Вам нужно подождать секунду?Нет проблем: сон (1000), и все готово - не влияет на другие подсистемы :) Это разница между «нет, я не могу добавить сетевой сервер, это изменило бы все время и мне пришлось бы все заново протестировать» и«Конечно, есть много свободных процессоров, у меня уже есть код из другой работы, и мне просто нужен другой поток для его запуска».
Есть и другие преимущества, которые помогают компенсировать дополнительное раздражение от необходимости программировать упреждающиймногозадачность с ее критическими разделами, семафорами и condvars.Очевидно, что если ваше оборудование имеет несколько ядер, ОСРВ помогает - она предназначена для совместного использования доступных циклов выполнения ЦП, как и любой другой ресурс, а добавление ядер означает больше циклов.
В конце концов, этоПроизводительность ввода-вывода и функциональная изоляция - вот большой выигрыш.
Некоторые из советов в других ответах могут помочь вместо RTOS или вместе с RTOS.При управлении несколькими устройствами ввода / вывода, например.датчики и исполнительные механизмы, конечный автомат, управляемый событиями, действительно очень хорошая идея.Я часто реализую это, помещая все события в один поток (очередь производитель-потребитель), который имеет единственный доступ к данным состояния и реализует конечный автомат, поэтому сериализует действия.
Стоят ли преимуществасвеча между вами и вашими требованиями:)