由于许可证问题,我有一个要从Keil IDE移植以使用GNU工具链构建的应用程序。我已经能够成功在设备上设置,构建,刷新和运行应用程序。

GNU端的应用由于某种原因被卡在WWDG的弱链接IRQ处理程序中,这是一个无限循环。该应用程序不启用WWDG,默认情况下在重置时被禁用。我还验证了配置寄存器处于其默认启动值。

除编译器外,唯一的区别是链接器和启动文件。但是,两个工具链使用的启动文件和链接器文件都是STM默认生成的。

知道是什么原因造成的吗?我快要结束了。

使用stm32f103XX,让我知道是否有其他信息会有所帮助。

编辑:
使用下面的注释,我可以确定实际上是被触发的HardFault_Handler。
我在下面包括了backtrace输出,如果有帮助的话

GDB BT:

0 HardFault_Handler()

1(称为信号处理程序)

2 0x720a3de in ?? ()

3 0x80005534在foo()中

回溯停止:前一帧与此帧相同(损坏的堆栈?)

尽管我不是gdb专家,但有2件事对我很重要。 1)foo不是函数,它是char的const数组,并且2)0x0720a3de不是有效的内存地址,闪存地址范围始于0x08000000

最佳答案

因此,感谢D Krueger的出色表现。我能够弄清楚HardFault_Handler是实际被调用的东西。因此,任何偶然发现此帖子的人都可以通过编写临时功能来掩盖可能的罪魁祸首,即HardFault,来验证真正调用了哪个IRQ。 IRQ调用的真正问题是memcpy的内存访问错误,我接下来将要解决它。

关于arm - 未配置STM32 WWDG中断触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27623885/

10-10 14:07