问题就在这条命令:
在汇编中,符号可以是各种东西,包括变量,数据集,函数。
我必须告诉编译器,LPUART0_IRQHandler是一个函数,编译器才会根据当前是什么指令集,决定符号指针是否要作为函数指针,并将末位写入1。
我加上这行指令输出文件就从34变成了35,然后程序就可以正常运行了。
原厂的启动文件并没有把Default_Handler标记为function,不过因为外部没有引用,也没有引起错误。与我所想一致,问题就是这个汇编少了一点点东西,就是这个: .type LPUART0_IRQHandler, %function
最后就是离大谱的问题,为啥单步调试能通过,正常运行才会卡进HardFault?
这个就不清楚了。
不过我猜测单步调试的时候,Jtag会塞给MCU一些指令来执行,这些指令当然是Thumb指令,也就会顺带将芯片设置成Thumb状态。
所以单步执行的时候在死机的边缘将指令集状态拉了回来,就能顺利走下去。
|