Как портировать код с ChibiOS 2.x в ChibiOS 3.x

ChibiOS 3.0 содержит многочисленные изменения и улучшения, API очень похож на версию 2.6.х, но есть некоторые отличия, которые следует учитывать.

Соглашение об именовании объектов API:
Имена API остались в основном те же. Был введен новый класс Х. Функции или макросы Х-класса предназначены для того, чтобы быть вызваны в любом месте.
Некоторые из существующих функций были переименованы. Если вы видите ошибки компиляции функции или макроса, первой проверкой если функция была переименована будет добавление буквы X в конце названия функции.

Типы объектов ядра:
Все типы объектов ядра были переименованы, был добавлен суффикс _t, например:

Потоки (thread) переименованы в thread_t.
Семафоры (semaphore) переименован в semaphore_t.
Виртуальные таймеры (virtual timer) переименован в virtual_timer_t.

Тип bool_t был удален, что бы использовать стандартный тип “BOOL”, определенный в stdbool.h

Так же были переименованы некоторые имена функций API ядра:

chSysLockFromIsr() была переименована в chSysLockFromISR().
chSysUnlockFromIsr() была переименована в chSysUnlockFromISR().
chTimeNow() была переименована в chVTGetSystemTimeX() и chVTGetSystemTime().
chTimeElapsedSince() была переименована в chVTTimeElapsedSinceX().
chTimeIsWithin() была переименована в chVTIsSystemTimeWithinX().
chThdSelf() была переименована в chThdGetSelfX().
Функции chXXXInit была переименована в chXXXObjectInit().

Смена имен макросов ядра:
Макросы RDY_XXX были переименованы в MSG_XXX. Для того что бы лучше раскрыть внутреннюю архитектуру передачи сообщений.

Изменения виртуальных таймеров:
Теперь виртуальные таймеры дают возможность проверить установлены они или нет перед выполнением операции. Функции используемые для этого:

chVTSet() и chVTSetI() — таймер сбрасывается если он уже установлен, после этого установите его заново.
сhVTReset() и chVTResetI() — таймер сбрасывается если он был установлен.

Так же были введены новые функции аналогичные старым:

chVTDoSetI() аналогична chVTSetI().
сhVTDoResetI() аналогична chVTResetI().

Виртуальные таймеры стали поддерживать режим tickless mode, это означает что если нету больше системного тика, прерывания будут запускаться только в случае крайне необходимости. В этом режиме счетчик времени продолжает работать даже в критической зоне, так как выполняется с помощью счетчика HW.

Изменение параметров конфигурации ядра:
Префикс параметров конфигурации был изменен с Ch_ на CH_CFG.

Архитектура HAL:
В ChibiOS 3.0 HAL больше не зависит от ядра RT, общение с операционной системой происходит с помощью уровня абстракции OSAL(Operating System Abstraction Layer). Это дает возможность использовать HAL с другим RTOS, или даже без RTOS вообще.

Изменение в драйверах устройств:
В новой версии появились новые правила при написании драйверов устройств. Структура драйвера почти не изменилась, но:
Ch.h можно не подключать не посредственно в проект. Просто подключите hal.h, который, в том числе как и osal.h, также будет включать в себя соответствующий заголовок RTOS.
Вместо RT API, можно вызвать OSAL API. OSAL API является достаточным для реализации драйверов устройств.
Очень часто OSAL API приравнивают к API RT/NIL, но указывают префикс «osal» или «OSAL» вместо «ch» или «CH».
Мини драйвер NVIC может взять приоритет в качестве параметра, использование макроса CORTEX_PRIORITY_MASK() больше не требуется.

 

Источник: radiotech.kz