Зачем мне использовать RTOS для моего встроенного проекта? - PullRequest
28 голосов
/ 31 августа 2010

Сначала предыстория, за подробностями моего вопроса последуют:

В компании, на которой я работаю на платформе, над которой мы работаем, в настоящее время работает семейство Microchip PIC32, использующее IDL MPLAB в качестве среды разработки. Ранее мы также написали прошивку для семейств Microchip dsPIC и TI MSP для этого же приложения. Прошивка довольно проста в том, что код разделен на три основных модуля: управление устройством, выборка данных и взаимодействие с пользователем (обычно это пользовательский ПК). Управление устройством достигается с помощью некоторой комбинации шин шины GPIO и, по крайней мере, одной части, требующей управления SPI или I2C. Выборка данных управляется прерыванием с использованием модуля таймера для поддержания частоты дискретизации и большего количества линий шины SPI / I2C и GPIO для управления оборудованием выборки (т. Е. АЦП). В настоящее время взаимодействие с пользователем осуществляется через USB с использованием Microchip App Framework.


Итак, теперь вопрос: учитывая то, что я описал выше, в какой момент я хотел бы рассмотреть возможность использования ОСРВ для моего проекта? В настоящее время я рассматриваю эти возможные триггерные точки как причины для использования ОСРВ:

  • Сложность кода? Базовая архитектура / организация кода все еще достаточно мала, чтобы я мог держать в голове все детали.
  • Многозадачность / Многопоточность? Для многозадачности на данный момент достаточно временного среза выполнения модуля с помощью прерываний.
  • Тестирование? В настоящее время мы не проводим много формальных испытаний или проверок после HW-теста на дым (что я надеюсь исправить в ближайшем будущем).
  • Связь? В настоящее время мы используем нестандартный формат пакета и протокол, который в значительной степени выполняет команды START, STOP, SEND DATA, а данные представляют собой двоичный двоичный объект.
  • Масштаб проекта? В ближайшем будущем существует вероятность, что мы получим проект по интеграции нашего устройства в более крупную систему с целью доведения этой системы до массовое производство. В настоящее время все наши проекты были экспериментальными прототипами с быстрым оборотом около месяца, производя один или два блока за один раз.

Какие еще моменты вы думаете, я должен рассмотреть? По вашему опыту, что убедило (или вынудило) рассмотреть возможность использования ОСРВ по сравнению с просто выполнением кода в базовой среде выполнения? Указатели на дополнительные ресурсы о разработке / программировании для ОСРВ также высоко ценятся.

Ответы [ 5 ]

33 голосов
/ 01 сентября 2010

Существует много причин, по которым вы можете захотеть использовать ОСРВ.Они различны, и степень, в которой они относятся к вашей ситуации, трудно сказать.(Примечание: я склонен думать так: ОСРВ подразумевает жесткое реальное время, которое подразумевает упреждающее ядро ​​...)

  • Оценить монотонный анализ (RMA) - если вы хотите использовать Оценить монотонный анализ , чтобы обеспечить соблюдение сроков, вы должны использовать упреждающий планировщик

  • Соблюдение сроков в реальном времени - даже без использования RMA с приоритетной ОСРВ на основе приоритетов ваш планировщик может помочь обеспечить соблюдение сроков.Как это ни парадоксально, ОСРВ обычно увеличивает задержку прерываний из-за критических секций в ядре, где прерывания обычно маскируются

  • Управление сложностью - определенно, RTOS (или большинство разновидностей ОС) может помочь с этим.Позволяя проекту быть разложенным на независимые потоки или процессы, и используя службы OS, такие как очереди сообщений, мьютексы, семафоры, флаги событий и т. Д., Для связи и синхронизации, ваш проект (по моему опыту и мнению) становится более управляемым.Я склонен работать над более крупными проектами, где большинство людей понимают концепцию защиты общих ресурсов, поэтому многие ошибки новичков не случаются.Но будьте осторожны, как только вы перейдете к многопоточному подходу, все может стать более сложным, пока вы не решите проблему.

  • Использование сторонних пакетов - многие ОСРВ предлагают другие программные компоненты, такие как стеки протоколов, файловые системы, драйверы устройств, пакеты графического интерфейса, загрузчики и другое промежуточное ПО, которые помогают вам быстрее создавать приложения, становясь почти более «интегратором», чем магазин «Сделай сам».

  • Тестирование - да, определенно, вы можете думать о каждом потоке управления как о тестируемом компоненте с четко определенным интерфейсом, особенно если используется согласованный подход (например, всегда блокировка в одном месте в очереди сообщений).Конечно, это не является заменой тестирования модулей, интеграции, системы и т. Д.

  • Надежность / отказоустойчивость - ОСРВ также может обеспечивать поддержкуMMU процессора (в вашем случае PIC, я не думаю, что это применимо).Это позволяет каждому потоку (или процессу) работать в своем собственном защищенном пространстве;потоки / процессы не могут «окунуться» в память друг друга и растоптать ее.Даже области устройства (MMIO) могут быть недоступны для некоторых (или всех) потоков.Строго говоря, вам не нужна ОСРВ, чтобы использовать MMU (или MPU) процессора, но эти два очень хорошо работают рука об руку.

Как правило, когда я могу разрабатыватьс ОСРВ (или некоторым типом упреждающего многозадачного режима) результат имеет тенденцию быть чище, более модульным, более корректным и более удобным в обслуживании.Когда у меня есть возможность, я использую ее.

Имейте в виду, что многопоточная разработка имеет некоторую кривую обучения.Если вы новичок в RTOS / многопоточной разработке, вас могут заинтересовать некоторые статьи Выбор RTOS , Опасности вытеснения и Введение в вытесняющую многозадачность .

Наконец, даже если вы не просили рекомендаций ... В дополнение ко многим многочисленным коммерческим ОСРВ, есть бесплатные предложения ( FreeRTOS является одним из самых популярных)и Quantum Platform является управляемой событиями средой, основанной на концепции активных объектов , которая включает вытесняющее ядро.Есть множество вариантов , но я обнаружил, что наличие исходного кода (даже если ОСРВ не бесплатна) является преимуществом, особенно.при отладке.

6 голосов
/ 02 сентября 2010

ОСРВ, прежде всего, позволяет вам организовать параллельные потоки в набор задач с четко определенной синхронизацией между ними.

IMO, дизайн без RTOS подходит только для однопотоковой архитектуры, где вся ваша программа представляет собой один большой бесконечный цикл. Если вам нужен многопотоковый режим - ряд задач, выполняющихся параллельно - вам лучше работать с RTOS. Без RTOS вы будете вынуждены реализовать эту функцию собственными силами, заново изобретая колесо.

3 голосов
/ 31 августа 2010

Повторное использование кода - если вы кодируете драйверы / обработчики протоколов, используя RTOS API, они могут легче подключиться к будущим проектам

Отладка - некоторыеВ средах разработки (таких как IAR Embedded Workbench) есть плагины, которые отображают полезные данные о выполняемом процессе, такие как загрузка ЦП задач и использование стека

2 голосов
/ 31 августа 2010

Обычно вы хотите использовать ОСРВ, если у вас есть ограничения в реальном времени. Если у вас нет ограничений в реальном времени, может подойти обычная ОС. ОС / ОС RTOS предоставляют инфраструктуру времени выполнения, такую ​​как очереди сообщений и задачи. Если вы просто ищете код, который может уменьшить сложность, обеспечить низкоуровневую поддержку и помощь в тестировании, могут подойти некоторые из следующих библиотек:

  • Стандартные библиотеки C / C ++
  • Повышение уровня библиотек
  • Библиотеки, доступные через производителя микросхемы, которые могут обеспечить аппаратную поддержку
  • Коммерческие библиотеки
  • Библиотеки с открытым исходным кодом
1 голос
/ 02 сентября 2010

В дополнение к пунктам, упомянутым выше, использование ОСРВ также может быть полезно, если вам требуется поддержка стандартных устройств хранения

  • (SD, Compact Flash, дисководы ...)
  • стандартное оборудование связи (Ethernet, USB, Firewire, RS232, I2C, SPI, ...)
  • стандартные протоколы связи (TCP-IP, ...)

БольшинствоОСРВ предоставляют эти функции или расширяются для их поддержки

...