Keil, Milandr, FreeRTOS. Нет ничего проще.

Создаем и проект для Миландр и подключаем с помощью Manage Run-Time Environment операционную систему FreeRTOS

Cover Image

Вы также часто пользуетесь кейлом как и я? Программируете микроконтроллеры компании Миландр? Вы хотите легко и просто подключить и использовать в своём проекте FreeRTOS? Тогда эта маленькая заметка для вас.

План действий:

  • создаём проект;
  • выбираем используемые пакеты;
  • конфигурируем операционку;
  • запускаем и пользуемся.

Создаём проект

Прежде чем начать я надеюсь вы уже установили Keil и скачали все необходимые пакеты?

Должно быть как-то так. Всё что мы будем использовать обведено красным.

Менеджер с необходимыми пакетами Если да - продолжаем.

Черед меню Project -> New uVision Project... Создаём проект и в качестве устройства выбираем свой микроконтроллер, в моём случае это Cortex-M3 -> MDR1986BE92

Выбираем используемые пакеты

После выполнения предыдущего пункта плана сразу открывается окно Manage Run-Time Environment, которое и позволяет выбрать необходимые пакеты.

Минимальный набор показан на картинке.

Минимальный набор пакетов

Клацаем ОК и переходим к следующему пункту плана

Конфигурируем операционку

Для настройки необходимо открыть файл FreeRTOSConfig.h и изменить несколько значенией:

  • configTOTAL_HEAP_SIZE - указывает размер кучи в байтах, по-умолчанию установлено 4096, чего для простеньких проектов хватит;
  • configMINIMAL_STACK_SIZE - указывает минимальный размер стека для задачи, по-умолчанию установлено 130, для большенства задачь хватает;
  • configUSE_TIMERS - странно почему он изначально выставлен в 1, хотя мы таймеры не планировали использовать, устанавливаем 0;
  • configLIBRARY_LOWEST_INTERRUPT_PRIORITY - здесь устанавливается значение минимального приоритета аппаратных прерываний, в данном случае нам нужно число 15, нужно понимать что меньше номер - выше приоритет, это можно почитать в спецификации на микроконтроллер в разделе Прерывания и исключения;
  • configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY - прерывания с приоритетом от 0 до (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY-1) не должны использовать обычные RTOS функции, только с суфиксом ISR.

Необходимо сразу после #include <stdint.h> добавить #include "MDR32Fx.h" иначе макросы для вычисления приоритетов не подхватят значение __NVIC_PRIO_BITS и сработают неправильно. Код скомпилируется, но операционка не запустится.

Запускаем и пользуемся.

Тут уж всё просто и литературы предостаточно.

Я писал про работу FreeRTOS на микроконтроллере Миландр: Подключаем FreeRTOS к Миландр.

Настоятельно советую почитать два документа опубликованых на сайте FreeRTOS: