Где найти хороший мануал по FreeRTOS под Cortex-M3?

Здравствуйте! Недавно начал разработку прошивки для устройства на базе STM32F103. Так как есть несколько параллельных ресурсоемких задач с разным приоритетом, то решил не городить велосипед, а возложить это на RTOS. Поскольку из CubeMX сразу доступна FreeRTOS, то выбор пал на нее, как на наверняка наиболее проработанный вариант для данной платформы. Для сборки и отладки использую VS+VisualGDB с компилятором GCC. В ходе работы обнаружилось несколько вопросов и проблем:
  1. Первоначальная настройка FreeRTOS. Параметры стартового конфига примерно ясны, но вот с минимальным размером стека задачи и кучей возникают вопросы - не совсем ясно до каких пределов их можно уменьшать(стек вроде еще и считается в словах), а динамическое выделение памяти текущий порт FreeRTOS отключить не дает. Потребление RAM под нужды FreeRTOS со стандартной конфигурацией выходит в рамках 20% от всей памяти, что явно хочется оптимизировать.
  2. Постоянная борьба с ошибками, возникающими при работе RTOS. Стоит чуть коснуться её элементов - сразу оказываешься в HardFault, после чего следует долгий гуглеж по стеку вызовов в попытке понять причину ошибки. То ей оказывается обязательное включение -O1, то теперь по непонятной причине падает в uxListRemove.

Исходя из вышеперечисленного, возникает вопрос - есть ли какой-нибудь гайд/FAQ/документация, которые помогут получить достаточное количество информации для решения всех этих проблем? В случае с конфигурацией я могу перечитать несколько раз информацию об этом на freertos.org, но наверное же есть статьи о её реальном использовании на МК. На хабре всё, что было - прочитал, с пониманием того, как работают мьютексы, семафоры, события и т.д. проблем нет.
  • Вопрос задан
  • 437 просмотров
Решения вопроса 1
bullitufa
@bullitufa
электронщик программист (микроконтроллеры и PC)
1) Есть же документация на сайте! В pdf формате!
2) На сайте microsin.ru
3) 10 (или 11) Лекций Курница (из журнала компоненты и технологии).
Всё гуглится!

Если прям вот хочется увидеть что там конкретно под кортекс, то идите в папку portable. Ничего особенного не увидите!

Любые опции вкл/выкл в файле freertos_config.h.

То ей оказывается обязательное включение -O1, то теперь по непонятной причине падает в uxListRemove.
Такое не видел. С чего Вы решили что надо с -O1 компилить?

но вот с минимальным размером стека задачи и кучей возникают вопросы - не совсем ясно до каких пределов их можно уменьшать(стек вроде еще и считается в словах), а динамическое выделение памяти текущий порт FreeRTOS отключить не дает.
Стек, да, в словах. Подсчитать объём занимаемой таском памяти - не тривиальная задача. Я пользуюсь ключом компиляции "-fstack-usage" Генерятся файлы. Их скармливаем avstack.pl (гуглится) Программа хоть и для AVR но работает. Там можно посмотреть сколько задача кушает стека!

Плюс есть плагины и ключи для просмотра стека задач и т.д.! Но тут надо учитывать что задача "пройдёт" самый "прожорливый" для стека путь!

Не ленитесь "обложиться" инструментами - сэкономят в будущем уйму времени и сил!

Удачи!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы