首先声明,#define是在程序启动代码运行之前就会编译好的。烧录到芯片中时是已经替换完成的数值;
1、芯片复位,启动代码运行,启动代码进行初级硬件初始化等,比如内核从初始复位地址取指令,开始执行程序,最重要的是设置堆栈指针,如图
2、初始化0值变量,将对应内存初始化为0,这些内存对应在程序中的“int i= 0”的变量地址,图示
3、初始化非零变量,例如“int j = 6;”这样的语句对应的内存应该初始化为6,在启动程序中,从ROM中的Initializers段复制到对应的内存,图示
最后调用main(); 记忆:(启(启动代码)栈(初始化堆栈)0(0变量到RAM)变(非零变量到RAM))