You are here

FreeRTOS: Руководство по портированию

Перевод может содержать ошибки. Читайте первоисточник: FreeRTOS

Назад: [Как работает FreeRTOS] Вверх: [Как работает FreeRTOS] Вперёд: [Как работает FreeRTOS]

 

Создание нового порта FreeRTOS

Вам нет необходимости читать или понимать эту страницу, если вы используете один из многих существующих портов и демонстрационных приложений!

Портирование FreeRTOS на совершенно другой и пока не поддерживаемый микроконтроллер является нетривиальной задачей. Цель этой страницы - описать house keeping предварительные требования для начала работ по созданию нового порта.

Каждый порт является в некоторой степени уникальным и сильно зависит от процессора и используемых средств разработки, поэтому эта страница не может предоставить все детали и подробности о портировании. Однако уже существует много других портов FreeRTOS, и предлагается использовать их в качестве справочных примеров.

Портирование в пределах одного и того же семейства процессоров является гораздо более простой задачей - например, с одного устройства на базе ARM7 на другое. Страница документации, подробно описывающая, как изменить существующее демонстрационное приложение, будет хорошей отправной точкой для начала работы, если ваша цель именно в таком переносе.

 

Настройка структуры каталогов

Исходный код ядра FreeRTOS обычно содержится в трёх исходных файлах (или в четырёх, если используются сопрограммы), которые являются общими для всех портов, и в одном или двух файлах уровня портирования, которые адаптируют ядро ОСРВ к конкретной архитектуре.

Предлагаемые шаги:

  1. Скачайте последнюю версию исходного кода FreeRTOS.
  2. Разархивируйте файлы в удобное место и с сохранением структуры каталогов.
  3. Ознакомьтесь с организацией исходного кода и со структурой каталогов.
  4. Создайте каталог, который будет содержать файлы 'port' для порта [architecture]. Следуя соглашению, определённому по ссылке, имя каталога должно иметь вид: FreeRTOS/Source/portable/[compiler name]/[processor name]. Например, если вы используете компилятор GCC, вы можете создать каталог [architecture] из существующего каталога FreeRTOS/Source/portable/GCC.
  5. Скопируйте пустые файлы port.c и portmacro.h в каталог, который вы создали. Эти файлы должны просто содержать заглушки функций и макросов, которые требуют реализации. Смотрите существующие файлы port.c и portmacro.h для получения списка этих функций и макросов. Также вы можете создать заглушку из одного из существующих файлов, просто удалив тела функций и макросов.
  6. Если стек в микроконтроллере растёт сверху вниз (в сторону уменьшения адреса в памяти), то параметр portSTACK_GROWTH в portmacro.h должен быть установлен в -1, в противном случае в 1.
  7. Создайте каталог, который будет содержать файлы демонстрационных приложений для порта [architecture]. Опять же, следуя соглашениям об организации исходного кода, его имя должно иметь вид FreeRTOS/Demo/[architecture_compiler] или что-то вроде этого.
  8. Скопируйте существующие файлы FreeRTOSConfig.h and main.c в только что созданный каталог. Опять же они должны быть отредактированы так, чтобы остались просто заглушки.
  9. Взгляните на файл FreeRTOSConfig.h. Он содержит некоторые макросы, которые должны быть настроены для выбранного вами оборудования.
  10. Создайте каталог из только что созданного и назовите его ParTest (возможно, это будет FreeRTOS/Demo/[architecture_compiler]/ParTest). Скопируйте в этот каталог файл-заглушку ParTest.c.
  11. Файл ParTest.c содержит три простые функции:
    1. Настройка некоторых GPIO (портов ввода/вывода общего назначения), которые могут мигать несколькими светодиодами.
    2. Установка или очистка указанного светодиода, и
    3. Переключение состояния светодиода.

    Эти три функции должны быть реализованы для вашей отладочной платы. Наличие светодиодных выходов облегчит остальную часть требуемой работы. Для примера посмотрите на многие существующие файлы ParTest.c, включённые в другие демонстрационные проекты для примера (название 'ParTest' является исторической аномалией для тестирования параллельного порта - PARallel port TEST), и страницу, описывающую, как модифицировать существующее демонстрационное приложение для получения информации о написании и тестировании функций в файле ParTest.c.

 

Создание проекта

Теперь все необходимые файлы на месте, вам нужно создать проект (или makefile), который будет собирать их. Очевидно, что они содержат просто заглушки, поэтому пока не будут выполнять никаких действий. Но после успешной сборки заглушки будут постепенно заменяться рабочими функциями.

Проект должен содержать следующие файлы:

  • Source/tasks.c
  • Source/Queue.c
  • Source/List.c
  • Source/portable/[compiler name]/[processor name]/port.c
  • Source/portable/MemMang/heap_1.c (or heap_2.c or heap_3.c or heap_4.c)
  • Demo/[processor name]/main.c
  • Demo/[Processor name]/ParTest/ParTest.c

Следующие каталоги должны быть добавлены в список путей расположения заголовочных файлов - пожалуйста, используйте относительные пути относительно каталога Demo/[Process name] - а НЕ абсолютные пути:

  • Demo/Common (i.e. ../Common)
  • Demo/[Processor Name]
  • Source/include
  • Source/portable/[Compiler name]/[Processor name]

Реализация заглушек

А теперь сложная часть. Как только проект скомпилируется, заглушки на уровне портирования необходимо реализовать. Предполагается, что первой будет портирована функция pxPortInitialiseStack(). Для её реализации вы должны сначала выбрать согласно контексту вашей задачи структуру фрейма стека, которая сильно зависит от архитектуры.

Дополнительная помощь

Не забывайте, что стратегический партнёр FreeRTOS, компания WITTENSTEIN high integrity systems предлагает полный сервис портирования и тестирования! Правда не бесплатно - прим. переводчика.

 

Hobby's category: