我目前有问题,我认为是在STM32F407目标上运行FreeRTOS时配置错误的堆栈损坏。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,是本文撰写时的最新版本。
我真的希望有人能帮助我在这里!