Запуск FreeRTOS на MIK32: различия между версиями
Строка 42: | Строка 42: | ||
Далее, так как мы должны выбрать только одну модель памяти из 5 вариантов, то удалим все файлы кроме heap_1.c - это самая базовая опция, без возможности очистки и удаления, более подробно про модели памяти можно узнать на сайте freertos.org. | Далее, так как мы должны выбрать только одну модель памяти из 5 вариантов, то удалим все файлы кроме heap_1.c - это самая базовая опция, без возможности очистки и удаления, более подробно про модели памяти можно узнать на сайте freertos.org. | ||
[[Файл:Freertos 13.png|центр|мини]] | [[Файл:Freertos 13.png|центр|мини]] | ||
На этом структура проекта в части исходных кодов FreerRTOS сформирована | На этом структура проекта в части основных исходных кодов FreerRTOS сформирована. | ||
==== Файл ctr0.s ==== | ==== Файл ctr0.s ==== | ||
Строка 53: | Строка 51: | ||
Поменял путь к папке, чтобы она адресовала именно в директорию с проектом: | Поменял путь к папке, чтобы она адресовала именно в директорию с проектом: | ||
[[Файл:Freertos 15.png|центр|мини]] | [[Файл:Freertos 15.png|центр|мини]] | ||
==== Конфигурирование порта ==== | |||
Далее, нужно добавить несколько пользовательских конфигурационных файлов в корневую директорию \src. Для этого нужно скопировать туда FreeRTOSConfig.h и scr_sys.c, найдя их в репозитории \202212-sp1-sc-dt-win.zip/\sc-dt_2022.12-sp1\workspace\freertos\Demo\RISC-V_Syntacore_SCRx_GCC\. Первый отвечает за конфигурацию опций операционной системы, второй - за её связь с аппаратной частью ядра процессора (настройка системного таймера ядра и его периодическое прерывание). | |||
В файле FreeRTOSConfig.h следует отключить часть модулей, чтобы объем прошивки позволил поместиться в 8кБ. | |||
<nowiki>#</nowiki>define configUSE_TIMERS 0 | |||
.... | |||
<nowiki>#</nowiki>define INCLUDE_xTimerPendFunctionCall 0 | |||
Комментируем подключение файла arch.h | |||
//#include "arch.h" | |||
Меняем системную частоту на 32МГц | |||
<nowiki>#</nowiki>define configCPU_CLOCK_HZ ( 1000000 ) |
Версия от 10:21, 28 июня 2023
Введение
Большинство современных приложений на микроконтроллерах с 32-битной архитектурой требуют применения операционных систем реального времени (ОСРВ). Таких систем существует довольно много - ombOC, microC/OC-II, ThreadX, chibiOS, openRTOS и многие другие, но, наиболее получивших распространение стала система - FreeRTOS.
FreeRTOS - это бесплатное ответвление проекта openRTOS. Дополнительную прелесть этой системе придает легкая интеграция TCP/IP стека lwIP, так же проект с открытым исходным кодом.
В данной статье будет рассмотрено портирование этого проекта под платформу MIK32. Здесь не будет обучения работе с этой ОСРВ, однако таких материалов в интернете довольно много, поэтому здесь будет информация только про то, что нужно изменить в порте под RISC-V из стандартной поставки с сайта freertos.org.
Первые шаги
Загрузка файлов проекта
Есть два пути, по которым можно двигаться, один из них скорее более длительный и трудоемкий - взять за основу один из официальных портов RISC_V с сайта freertos.org и модернизировать его.
Или же взять за основу порт от компании syntacore, который будет по максимуму приближен к нашему микроконтроллеры, так как он основан на ядре SCR1 разработки этой компании. И этим путем мы и пойдем. Исходный порт находится в SDK по ссылке https://syntacore.com/page/products/sw-tools , имя файла 202212-sp1-sc-dt-win.zip.
И мы пойдем именно этим путем!
Краткое пояснение - что-где
В первую очередь найдем место, где находятся файлы самого движка ОСРВ, после чего нам нужно будет добавить эти файлы в свой проект-шаблон. В архиве SDK искомые файлы находятся здесь:
В подпапке include - все необходимые хидеры.
Папка portable находятся файлы, которые портируют систему на разные архитектуры. Здесь нас будет интересовать именно подпапка \GCC\RISC-V
Рабочая среда Eclipse
Будем работать в среде Eclipse. Скачать уже сконфигурированную оболочку можно в разделе Быстрый старт в Eclipse IDE. После установки среды в рабочей папке можно найти проект-шаблон:
Копируем содержимое этой директории во вновь созданную папку для нашего будущего проекта!
Далее, уже в Eclipse мы втягиваем проект в рабочий worspace, в меню выбираем "File->Import"
и выбираем место, где мы ранее сохранили шаблон-проект
остается нажать кнопку Finish. После этого проект должен вполне успешно собираться (Ctrl+B) и работать в микроконтроллере . Можно проверить это при желании.
Копирование файлов ОСРВ в проект
На данном этапе существует вариативность действий, но предлагается оставить структуру наиболее близкой к той, которая наблюдается в репозитории syntacore/freertos. Создадим папку FreeRTOS в директории src. Сначала копируем папку с хидерами и Си-файлы движка опtрационной системы в созданную src\FreeRTOS.
В этом месте создадим папку portable и скопируем в нее только необходимое, это файлы репозитория которые находятся в \portable\GCC\RISC-V\, далее нужно скопировать папку portable\Common (работа с MPU при наличии такового), а так же MemMang (модели памяти). На данном этапе проект должен выглядеть следующим образом:
Далее, так как мы должны выбрать только одну модель памяти из 5 вариантов, то удалим все файлы кроме heap_1.c - это самая базовая опция, без возможности очистки и удаления, более подробно про модели памяти можно узнать на сайте freertos.org.
На этом структура проекта в части основных исходных кодов FreerRTOS сформирована.
Файл ctr0.s
Следует найти этот системный файл в проекте и убедиться, что он не является файлом из внешнего репозитория (по умолчанию так). Поэтому следует этот важный файл содержать локально. Иначе все правки, которые мы внесем в этот файл отразятся на остальных проектах, которые этот файл используют.
Как было в случае копирования шаблона:
Поменял путь к папке, чтобы она адресовала именно в директорию с проектом:
Конфигурирование порта
Далее, нужно добавить несколько пользовательских конфигурационных файлов в корневую директорию \src. Для этого нужно скопировать туда FreeRTOSConfig.h и scr_sys.c, найдя их в репозитории \202212-sp1-sc-dt-win.zip/\sc-dt_2022.12-sp1\workspace\freertos\Demo\RISC-V_Syntacore_SCRx_GCC\. Первый отвечает за конфигурацию опций операционной системы, второй - за её связь с аппаратной частью ядра процессора (настройка системного таймера ядра и его периодическое прерывание).
В файле FreeRTOSConfig.h следует отключить часть модулей, чтобы объем прошивки позволил поместиться в 8кБ.
#define configUSE_TIMERS 0
....
#define INCLUDE_xTimerPendFunctionCall 0
Комментируем подключение файла arch.h
//#include "arch.h"
Меняем системную частоту на 32МГц
#define configCPU_CLOCK_HZ ( 1000000 )