У меня возникли проблемы с тем, что, по моему мнению, является повреждением стека некоторой ошибки конфигурации при запуске FreeRTOS на цель STM32F407.FreeRTOS - повреждение стека на STM32F4
Я просмотрел FreeRTOS stack corruption on STM32F4 with gcc, но не получил помощи.
Приложение запускает две задачи и полагается на одно прерывание CAN. Рабочий процесс выглядит следующим образом:
- две задачи, network_task и app_task создается вместе с двумя очередями, raw_msg_queue и app_msg_queue. Прерывание CAN также настроено.
- Network_task имеет наивысший приоритет и начинает ждать raw_msg_queue неограниченно.
- App_task следующий и начинает ждать app_msg_queue.
- Прерывание CAN затем запускается из-за внешнего события, добавляя сообщение CAN к raw_msg_queue.
- Network_task просыпается, обрабатывает сообщение, добавляет обработанное сообщение в app_msg_queue и затем продолжает ждать raw_msg_queue.
- App_task просыпается, и я получаю жесткую ошибку.
Дело в том, что я завернул вызовы, которые app_task делает для xQueueReceive в два этапа из-за удобства и переносимости конечного пользователя. Целая функциональная цепочка app_task заключается в том, что она вызывает network_receive (..) -> os_queue_receive (..) -> xQueueReceive (..). Это работает хорошо, но когда он возвращается из xQueueReceive (..), ему удается вернуться к os_queue_receive (..), прежде чем он вернется в случайную ячейку памяти, и я получаю ошибку.
Размеры стека должны быть адекватными и установлены на 2048 для обоих, все крупные структуры данных передаются как указатели.
Я запускаю свой код на двух STM32F407. FreeRTOS находится в версии 7.4.2, самой последней на момент написания.
Я действительно надеюсь, что кто-то может помочь мне здесь!