S32K116使用IAR建立工程后,软件debug可以运行,断电冷启动无法运行。
这种现象基本上都是RAM未初始化导致,由于Debug时,调试器会自动初始化芯片,很多问题都不会暴露处理。
大家可以开一下Startup的汇编文件,相关代码片段如下,如果没有定义START_FROM_FLASH这个宏定义,则没有初始化SRAM,所以软件是无法运行的。
#ifdef START_FROM_FLASH
IMPORT __RAM_START, __RAM_END
;; INIT ECC RAM
LDR R1, =__RAM_START
LDR R2, =__RAM_END
SUBS R2, R2, R1
SUBS R2, #1
BLE .LC5
MOVS R0, #0
MOVS R3, #4
.LC4:
STR R0, [R1]
ADD R1, R1, R3
SUBS R2, #4
BGE .LC4
.LC5:
#endif
在IAR环境下,C语言和汇编语言,头文件和宏定义是独立的,添加时需要注意,在下面界面中添加汇编宏定义,则可以解决这个问题。