gpt4 book ai didi

c - FreeRTOS - STM32F4 上的堆栈损坏

转载 作者:行者123 更新时间:2023-12-02 00:09:14 25 4
gpt4 key购买 nike

我目前遇到问题,我认为是在 STM32F407 目标上运行 FreeRTOS 时一些配置错误的堆栈损坏。

我看过FreeRTOS stack corruption on STM32F4 with gcc但在那里没有得到帮助。

应用程序运行两个任务并依赖一个 CAN 中断。工作流程如下:

  1. network_task 和 app_task 这两个任务与两个队列 raw_msg_queue 和 app_msg_queue 一起创建。 CAN 中断也已设置。
  2. network_task 具有最高优先级并开始无限期地等待 raw_msg_queue。
  3. 接下来是 app_task 并开始等待 app_msg_queue。
  4. 然后 CAN 中断因外部事件而触发,将 CAN 消息添加到 raw_msg_queue。
  5. network_task 唤醒,处理消息,将处理后的消息添加到 app_msg_queue 中,然后继续在 raw_msg_queue 上等待。
  6. app_task 唤醒,我遇到一个硬错误。

问题是,由于最终用户的便利性和可移植性,我将 app_task 对 xQueueReceive 的调用分两步进行了包装。 app_task总函数链就是调用network_receive(..) -> os_queue_receive(..) -> xQueueReceive(..)。这很好用,但是当它从 xQueueReceive(..) 返回时,它只设法返回到 os_queue_receive(..),然后它返回到一个看似随机的内存位置,我遇到了一个硬故障。

堆栈大小应该足够并且都设置为 2048,所有大型数据结构都作为指针传递。

我在两个 STM32F407 上运行我的代码。 FreeRTOS 的版本为 7.4.2,是撰写本文时的最新版本。

我真的希望有人能帮助我!

最佳答案

首先可以看一下here并尝试获取有关硬故障的更多信息。您可能还想检查中断优先级设置,因为棘手的 ARM Cortex-M 中断优先级机制会在 FreeRTOS 中造成一些麻烦。引用here .

关于c - FreeRTOS - STM32F4 上的堆栈损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16443778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com