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

Тема в разделе "ChibiOS/RTOS", создана пользователем koteika, 16 июл 2015.

  1. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    Перевел статейку How to port code from ChibiOS 2.x to 3.x, http://wiki.chibios.org/dokuwiki/doku.php?id=chibios:howtos:porting_from_2_to_3
    Кто заметит ошибки, то не стесняйтесь - пишите;)
    Как портировать код с 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() больше не требуется.
    Последнее редактирование модератором: 16 июл 2015
     
    : chibios

Поделиться этой страницей