之前参与MbedOS书稿编写积累的经验
使用芯片: MKL36Z64VLH6
芯片启动到main函数之前的运行过程
(1)芯片上电复位后,芯片内部机制首先从Flash的0x00000000地址,取出第一个表项的内容,赋值给堆栈指针MSP,完成堆栈指针初始化。
(2)芯片内部机制将第二个表项,即复位处理程序Reset_Handler的首地址,赋值给程序计数(Program Counter,PC)寄存器。
(3)芯片内部机制从PC中取出地址,再从地址取出机器码(芯片复位后执行的第一个指令),程序从startup_MKL36Z64.S中文件中的Reset_Handler函数开始运行。第一个指令就是关总中断(cpsid i),最后运行”system_MKL36Z64.c“文件的SystemInit()函数:
(4)SystemInit()函数进行芯片部分初始化设置,以此关闭看门狗、系统时钟初始化。
(5)回到Reset_Handler中继续执行剩余初始化功能,包括开中断、将ROM中的初始化数据拷贝到RAM中、清零未初始化的BSS数据段,随后进入main函数。