You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cortex-M0+(STM32G0B1RETx)函数无法返回跳转错误代码求助

FreeRTOS+LVGL在STM32G0B1上的随机异常问题

环境信息

  • 硬件:Cortex-M0+内核 STM32G0B1RETx
  • 软件栈:FreeRTOS 10.3.1(采用heap3内存管理)、LVGL v8.3
  • 工具链:GNU Tools for STM32 9-2020-q2-update
  • 工程配置:由STM32CubeIDE生成

异常现象

  • 触发位置随机,且与代码体积相关:修改代码后,异常触发点会改变
  • 典型异常场景:按钮事件处理函数leftEventHandler偶尔无法正常返回,转而执行fragmentAttach函数的代码
  • 最小任务集测试:仅保留idle和timer任务时,调度器会触发硬fault

调试细节

  • 反汇编分析leftEventHandler:
    • 函数开头的push {r4, lr}已将寄存器值正确写入栈中
    • 函数结尾的pop {r4, pc}执行时,r4寄存器能正确恢复,但pc寄存器未被更新,且执行该指令时栈内数值无被修改的痕迹
  • 异常触发时,通常未进入Presenter_onLeftPressed分支(此时事件码code != LV_EVENT_CLICKED)
  • 异常触发在fragmentAttach的08040716地址处时,已捕获当时的寄存器状态与内存快照

已尝试的无效操作

  • 增大线程栈大小,无法解决问题

内容的提问来源于stack exchange,提问作者user0x0859

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:55:35