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
相关产品推荐
相关产品推荐

