Разница между FreeRTOS и CMSIS-RTX

В чем разница между FreeRTOS и CMSIS-RTOS? Может ли кто-нибудь объяснить, чем две ОСРВ похожи или разные?


person Bilal Qamar    schedule 25.01.2017    source источник


Ответы (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:

person zserge    schedule 25.02.2017

Я использовал RTX до CMSIS, включавшего спецификацию RTOS, и сравнил ее с FreeRTOS. В то время RTX был несколько примитивнее, особенно в части поддержки таймеров. Я не знаю, изменилось ли это в CMSIS-RTX.

Оба используют планирование на основе упреждающего приоритета и в этом смысле являются «традиционными», однако внутренняя структура FreeRTOS несколько необычна. В большинстве ОСРВ основным примитивом, из которого создаются все остальные службы API, является мьютекс, однако во FreeRTOS основным примитивом является очередь. Следовательно, «простые» примитивы, такие как семафоры и мьютексы, создаются из более сложной очереди - а не, возможно, более интуитивно сложные вещи, создаваемые из простых вещей. Я могу предположить, что этот дизайн оказывает некоторое влияние на производительность. Даже без этого я обнаружил, что даже переключение контекста в FreeRTOS занимает значительно больше времени, чем RTX (15us ve 5us на Cortex-M3 на 72 МГц).

FreeRTOS, конечно же, «бесплатный», а RTX включен в лицензированные коммерческие инструменты разработки от Keil. Если вы используете эти инструменты, существует определенная степень поддержки RTX для RTX в среде IDE и отладчике, которая может быть полезна при разработке, хотя, возможно, и не важна.

person Clifford    schedule 26.01.2017
comment
Стоит отметить, что эта необычная идея того, что все является очередью, приводит к тому, что мьютекс или семафор обычно занимает в FreeRTOS в 3-4 раза больше оперативной памяти, чем в любой другой RTOS. - person Freddie Chopin; 26.01.2017
comment
Также стоит отметить, что время переключения контекста FreeRTOS зависит от многих вещей (как и для всех RTOS), таких как проверка стека, статистика времени выполнения и т. Д. Стоит посмотреть, какое время переключения контекста freertos.org/FAQMem.html. Это намного эффективнее, чем вы думаете! - person Realtime Rik; 27.01.2017
comment
@RealtimeRik: Из предложений по оптимизации переключения контекста я, возможно, не использовал configUSE_PORT_OPTIMISED_TASK_SELECTION = 1 - он, возможно, уже был установлен в используемом мной порте - можно так представить. Помимо этой возможности, это было сопоставимое сравнение. В FAQ не задокументировано, что было рассчитано для 84 циклов ЦП; мои тайминги были взяты от блокировки одной задачи до разблокировки другой на уровне кода C пользователя, то есть от вызова функции блокировки одной задачи до возврата из функции блокировки другой, поэтому включает любой IPC API накладные расходы. - person Clifford; 27.01.2017

В основном FreeRTOS является RTOS, тогда как CMSIS-RTOS - это только оболочка для любой RTOS (например, FreeRTOS, CMSIS-RTOS RTX или чего угодно).

person Freddie Chopin    schedule 26.01.2017
comment
Можете рассказать поподробнее? - person Bilal Qamar; 14.02.2017