stm32调试能够运行,但是不调试时无法运行,按复位按钮也不行。
勾选使用MicroLIB。
问题到这里就解决了,我虽然没有使用 printf() ,但是包含了C库 stdio.h 并且没有勾选 Use MicroLIB ,导致标准C库被调用,程序卡死在半主机模式(也就是 BKPT 软件断点等待主机调试端响应)下。解决方法也很简单,在项目配置中勾选 Use MicroLIB 然后重新编译(Rebuild)即可。
————————————————
被抛弃的部分是堆栈的初始化处理程序,可以看出定义了 __MICROLIB 宏和没有定义时堆栈的初始化是交由不同的函数处理的。但是编译的时候没改变这里的条件汇编,结果没有初始化的程序了,因此报错“符号未定义”。解决方式同样很简单,点击重新编译即可。(想当初为了解决把startup.s 给改了,真是醉了)