Как сделать мой код независимым от "RTOS"? - PullRequest
0 голосов
/ 27 апреля 2019

Я хочу написать модуль, которому нужны некоторые RTOS API, такие как Mbox и API создания задач!

Я пытаюсь структурировать код и для этого я смотрю на некоторые библиотеки, такие как "lwip"В «lwip» есть файл с именем Sys-arch.c, который, насколько мне известно, является уровнем абстракции для API RTOS!но в моем порту он включал cmsis_os.h и использовал эти API.Почему они сделали это вместо непосредственного использования cmsis_os?

Нужно ли иметь новый уровень ОС для переносимого кода или достаточно CMSIS_OS?

Ответы [ 3 ]

2 голосов
/ 27 апреля 2019

Этот ответ основывается на мнениях.

По моему опыту, всегда полезно использовать функции / определения для доступа к вашей ОС. Если вы используете CMSIS_OS или ваш собственный уровень не имеет большого значения, у вас больше работы, если вы используете свой собственный и особенно перенос и тестирование становится очень громоздким с более чем одной ОС.

CMSIS_OS связывает вас с системами Cortex-M, но, поскольку они реализуют то, что вы реализовали бы и на своем уровне, и вполне обычным способом, портировать с CMSIS_OS на ваш собственный уровень довольно просто. Это не так просто, если вы используете прямые вызовы конкретной ОС в своем коде напрямую, но это также возможно, если вы полагаетесь только на стандартные функции (взгляните на CMSIS_OS, которые являются общими функциями RTOS) и не используете специальные особенности вашей ОС.

1 голос
/ 16 мая 2019

Почему они сделали это вместо непосредственного использования cmsis_os?

Потому что:

  • Идея состоит в том, чтобы абстрагировать API от любой ОСРВ. Если ваша цель не использовала ОСРВ CMSIS, вам в любом случае придется написать слой переноса.

  • API-интерфейс RTMS CMSIS специфичен для ARM Cortex-M, а lwip - нет.

Должен ли я иметь новый уровень ОС для переносимого кода или достаточно CMSIS_OS?

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

0 голосов
/ 09 мая 2019

lwIP хорошо структурирован, так что, пока ваш RTOS API поддерживает его семантические требования, все, что вам нужно сделать, это адаптировать sys_arch.c к вашему OS API, и все готово. Создание файла sys_arch.c с использованием абстракции API CMSIS_OS означает, что вы можете использовать любую ОС, совместимую с API CMSIS OS, без изменения этого порта sys_arch.c. Это дополнительный слой косвенности, который только вы можете решить, стоит ли это того или нет. Если вы не планируете использовать разные ОСРВ, то нет причин не иметь файл sys_arch.c, относящийся только к одной ОСРВ.

В любом случае, требования RTOS для lwIP довольно скромны. Всего около десятка функций, но в действительности задействованы только почтовый ящик и семафоры с определенными характеристиками.

...