【发布时间】:2015-02-21 19:17:01
【问题描述】:
由于许可证问题,我有一个从 Keil IDE 移植以使用 GNU 工具链构建的应用程序。我已经成功地在设备上设置、构建、刷写和运行应用程序。
GNU 端的应用程序由于某种原因卡在 WWDG 的弱链接 IRQ 处理程序中,这是一个无限循环。该应用程序不启用 WWDG,默认情况下在重置时禁用。我还验证了配置寄存器的默认启动值。
除了编译器之外,唯一的区别是链接器和启动文件。但是,两个工具链使用的启动文件和链接器文件都是 STM 生成的默认文件。
知道是什么原因造成的吗?我快到这里了。
使用 stm32f103XX,如果有任何其他信息会有所帮助,请告诉我。
编辑: 使用下面的 cmets,我能够确定它实际上是被触发的 HardFault_Handler。 如果可能有帮助,我已经包含了下面的回溯输出
GDB BT:
0 HardFault_Handler ()
1(调用的信号处理程序)
2 0x720a3de 在?? ()
3 0x80005534 in foo()
回溯停止:前一帧与此帧相同(损坏的堆栈?)
虽然我不是 gdb 专家,但我觉得有两件事很突出。 1) foo 不是一个函数,它是一个 const 字符数组 2) 0x0720a3de 不是一个有效的内存地址,闪存地址范围从 0x08000000 开始
【问题讨论】:
-
你确定这真的是 WWDG 吗?由于优化,另一个
while(1);可能正在共享该代码。地图文件是否仅显示该地址的 WWDG? -
您可能正在做某事。似乎在 .elf 文件中,所有默认的 irq 符号都指向相同的地址,我想这意味着 WWDG_IRQ 名称在调试器中使用只是巧合。我将为 irq 添加强链接函数,这样我就可以找出究竟是哪一个是罪魁祸首。
-
我也卡在
HardFault_Handler里了,找了半天半夜搞清楚原因,结果忘记编译所有外围文件了(stm32f10x_adc.o,stm32f10x_bkp.o,stm32f10x_can.o,stm32f10x_cec.o...misc.o) 并链接它们,我觉得我是个傻瓜????????♂️
标签: arm embedded gnu stm32 cortex-m3