В чем разница между FreeRTOS и CMSIS-RTOS? Может ли кто-нибудь объяснить, чем две ОСРВ похожи или разные?
Разница между FreeRTOS и CMSIS-RTX
Ответы (3)
Я думаю, что источником путаницы здесь является то, что существует API CMSIS-RTOS (v1 и v2), и есть CMSIS-RTOS RTX, которая является автономной ОС для ARM (разработанная ARM ), который реализует именно этот API.
Идея заключалась в том, чтобы создать общий уровень абстракции для ОСРВ, поэтому, если кого-то не устраивают очереди FreeRTOS, он / она может выбрать другую реализацию того же API-интерфейса ОСРВ без значительного изменения источников прошивки.
Хотя я думаю, что производители RTOS будут нарушать CMSIS-RTOS так же, как поставщики MCU нарушают CMSIS Driver API, я лично предпочитаю CMSIS-RTOS API. Должен быть ряд оболочек, обеспечивающих уровень совместимых макросов, чтобы существующие ОСРВ были совместимы с API CMSIS-RTOS. Мне известны только попытки PolyMCU:
- FreeRTOS - https://github.com/labapart/polymcu/blob/master/RTOS/FreeRTOS/cmsis/cmsis_os.h
- ARM RTX - https://github.com/labapart/polymcu/blob/master/RTOS/RTX/INC/cmsis_os.h
- RiotOS - https://github.com/labapart/polymcu/blob/master/RTOS/RioTOS/include/cmsis_os.h
Я использовал RTX до CMSIS, включавшего спецификацию RTOS, и сравнил ее с FreeRTOS. В то время RTX был несколько примитивнее, особенно в части поддержки таймеров. Я не знаю, изменилось ли это в CMSIS-RTX.
Оба используют планирование на основе упреждающего приоритета и в этом смысле являются «традиционными», однако внутренняя структура FreeRTOS несколько необычна. В большинстве ОСРВ основным примитивом, из которого создаются все остальные службы API, является мьютекс, однако во FreeRTOS основным примитивом является очередь. Следовательно, «простые» примитивы, такие как семафоры и мьютексы, создаются из более сложной очереди - а не, возможно, более интуитивно сложные вещи, создаваемые из простых вещей. Я могу предположить, что этот дизайн оказывает некоторое влияние на производительность. Даже без этого я обнаружил, что даже переключение контекста в FreeRTOS занимает значительно больше времени, чем RTX (15us ve 5us на Cortex-M3 на 72 МГц).
FreeRTOS, конечно же, «бесплатный», а RTX включен в лицензированные коммерческие инструменты разработки от Keil. Если вы используете эти инструменты, существует определенная степень поддержки RTX для RTX в среде IDE и отладчике, которая может быть полезна при разработке, хотя, возможно, и не важна.
В основном FreeRTOS является RTOS, тогда как CMSIS-RTOS - это только оболочка для любой RTOS (например, FreeRTOS, CMSIS-RTOS RTX или чего угодно).