关于nrf52832上电启动分析

2019-04-13 16:07发布

参考文档地址:https://www.cnblogs.com/strongwong/p/8657639.html 关于nrf52832上电启动分析: 启动所需要做的事: 堆栈的初始化、初始化中断向量表、在进入main之前初始化时钟 启动过程中用的.s文件 arm_startup_nrf52.s 定义堆栈,堆栈的数据都时在RAW中 然后定义RESET区域 然后是定位中断向量表: 第一条指令对应的堆栈,从第二条指令开始进入Reset Handler 在Reset_Handler中会先经SystemInit函数导入,可以理解成初始化时钟 对于SystemInit的理解:为啥需要在main之前初始化时钟,以前看过最标准的理解是,CPU启动工作的这段时间,内存、外设等设备还没有启动,需要CPU分配时钟来启动外设,然后分配堆栈空间,并且将存在到flash的数据copy到RAW然后在跳入到main中。 仔细观察SystemInit函数,发现没有变量,操作的都是寄存器,个人理解,局部变量就需要分配堆栈地址,而堆栈又是在内存,无法实现。 之后在初始化库函数,然后最终进入main函数 然后是具体的分析.hex文件 .hex文件和.s文件是一一对应 从图中可以看到0x00000000的位置是RAW的0x2002080也就数栈的位置 函数地址   Reset_Handler      0x00000004  NMI_Handler        0x00000008 ......... 和向量表中的位置是一一对应