S32DS踩坑日记五-bootloader跳转APP时触发DefaultISR
bootloader和APP由另一位同事开发过程中,被导师叫回去写论文了。
由于项目不急,接手后未作任何改动,后面硬件工程师手工焊了几块电路版,需要刷上程序测试电路板。然后就遇到了奇怪的问题。
刷了四块电路板,只有一块的APP可以启动, 另外三块只有bootloader可以启动。
开始认为是电路板的问题,但是bootloader能正常运行又说不通。
后面又刷了几块板子,现象也是bootloader能启动,APP运行不起来。
MCU是S32K144w。
开发工具是S32DS,调试工具为J-Link。在APP main第一行增加了断点,显示没有运行到断点,就进入到DefaultISR了。
然后将APP的编译优化都去掉了,还是相同的现象。
之后在startup_S32K144.S的reset函数中增加了如下的断点:
在反汇编代码中跟踪进入main中后,发现其实已经进入CLOCK_SYS_Init函数里面了,这个函数的运行过程中触发了defaultisr。想到了网上说的时钟要反初始化一下。决定尝试一下。
但是发现没有CLOCK的反初始化函数:
就只能把外设中有的逐一调用了一下:
然后就发现APP能正常运行了。不知道什么原因。明天再用更多的板子测试一下。