我目前有問題,我認爲是在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,是本文撰寫時的最新版本。
我真的希望有人能幫助我在這裏!