【发布时间】:2013-05-02 20:47:56
【问题描述】:
我目前在 STM32F407 目标上运行 FreeRTOS 时遇到了一些问题,我认为这是由于某些配置错误导致堆栈损坏。
我查看了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,是撰写本文时的最新版本。
我真的希望有人可以在这里帮助我!
【问题讨论】:
标签: c stm32 freertos stm32f4discovery