FreeRtos comunity creates only paid documentation in pdf and does not free in the chm. Because I have converted the FreeRtos source files in the chm file. Now you can download FreeRTOS API Reference 8.1.2 version 1.0a, link at the bottom of the page. You should rename file .zip_ -> .zip Enjoy ! Маленькие Tips and Tricks по использованию FreeRtos and STM32Fxxx. Пишу собственно больше для себя как напоминалку, что бы второй раз не напарываться. Все что я напишу можно найти на форумах и в официальной документации. В данном документе отражены только проблемные моменты и мой подход к отладке, что бы сэкономить время на старт для начинающих. 1. Настройка FreeRtos- Для правильной работы с FreeRtos надо пошагово выполнить все рекомендации написанные в документации по FreeROS и самое главное, надо взять правильный FreeRTOSConfig.h из демо примеров для СВОЕГО МК (больше собственно взять config негде). - В FreeRTOSConfig.h в самом конце проверяем наличие строчек: Это обработчики прерываний FreeRTOS привязанные на прерывания контроллера. Были случаи (особенно в ранних версиях RTOS) когда они не были привязаны. - Немного про аппаратные требования. У меня FreeRtos себя очень хорошо чувствует на STM32F при FLASH >= 64k and RAM >=16k. Если меньше RAM, то работать с FreeRtos извращение, т.к. практически сразу надо поставить в конфиге #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 8 * 1024 ) ). 2. Проблемы с прерываниями во FreeRtos и STM32Fxxx. Эта проблема описана уже везде (даже на заборе), но повторюсь, т.к. на эти грабли я тоже наступил. 1. Во FreeRTOS чем выше число приоритета, тем выше приоритет, а у STM32 наоборот. И FreeRTOS использует только 4 бита для установки приоритета. От этого все проблемы и недопонимания. 2. В фале конфига написано: Что означает, что самые высокие приоритеты в классификации STM32, заняты RTOS ( от 0 до 4). А мы можем использовать только от 5 до 15. Т.е. правильно писать присвоение приоритетов в своих прогах как: и не превышать числа 15, Ну и естественно 15 это самый низший приоритет. Самое смешное, что на STM32F0 у меня прокатывало ставить приоритет прерывания 0 и все работало. А вот в STMf4ххх все встает колом или прерывания не вызываются. Хотя может быть я также попадал в assert(), но не видел по первости результата работы assert(). Также для STM32F4 (на F3 не проверял) обязательно надо указывать: это как раз и есть указание что используем 4 бита. Другое значение указывать нельзя !!!! 3. CubeMx RTOS and FreeRTOS. Сейчас CubeMx в своем составе включает RTOS - это FreeRTOS с оберткой функций в cmsis_os.h, документации мало и нет примеров, поэтому проще использовать стилистику FreeRTOS, т.к. все работает. Также компания ST сделала значительное упрощение по работе с симафорами и мьютексами, остальное не проверял, т.к. вернулся к стилистике FreeRTOS. Но самое плохое что в версии CubeMx 4.5.0 неправильно генерируется FreeRTOSConfig.h (по крайней мере для контроллера STM32F072, остальные не пробовал), не был указан один из обработчиков прерываний и соответственно ОС не запустилась. 4. Создание инфраструктуры отладки для FreeRTOS.- Перед созданием своего первого проекта необходимо создать и настроить инфраструктуру для отладки и отлова ошибок, т.к. когда перестает работать OS то всегда трудно понять что произошло. - Я сразу создаю задачу моргания светодиодом (обычно зелёный), что бы было понятно что ОС работает, и обработчик ошибок, который буду везде использовать, например вот так: - Далее я переопределяю обработчик configASSERT() в файле FreeRTOSconfig.h И у нас на все configASSERT() в процессе отладки будут моргать светодиодом, один длинный, четыре коротких :) - Во FreeRTOSConfig.h прописываю #include на .h файл с функцией обработки ошибок, чтобы компилятор не ругался: Далее в main() создаем задачу моргания зеленым светодиодом, так называемый GOOD сигнал. Мы сделали главную часть работы, теперь пришло время во FreeRTOSConfig.h включить обработку ошибок памяти FreeRTOS: далее создаем обработчики ошибок памяти, я это делаю прямо в файле main.c: Что мы получили в сухом остатке: 1. Обработали все configASSERT(), которые поставили разработчики FreeRtos. И на каждый assert у нас будет моргать светодиод (- . . . .), а если в отладчике нажать стоп, то мы можем по callstack увидеть откуда пришел вызов. 2. Если у нас произошли проблемы с памятью, то у нас будет также моргать светодиод ошибки. 3. Получили две функции для отладки configASSERT() and Error_Handler(err_num). 4. Когда все хорошо и задачи переключаются и работают, то мы видим моргающий зеленый светодиод. 5. Мы также можем поменять обработчик Assert для SPL, правда я этого не делаю. Комментарии можно оставить вот тут. |
Software >