参考文档地址:https://www.cnblogs.com/strongwong/p/8657639.html

关于nrf52832上电启动分析:

启动所需要做的事:

堆栈的初始化、初始化中断向量表、在进入main之前初始化时钟

启动过程中用的.s文件

arm_startup_nrf52.s

关于nrf52832上电启动分析

定义堆栈,堆栈的数据都时在RAW中

然后定义RESET区域

关于nrf52832上电启动分析

然后是定位中断向量表:

关于nrf52832上电启动分析

第一条指令对应的堆栈,从第二条指令开始进入Reset Handler

关于nrf52832上电启动分析

在Reset_Handler中会先经SystemInit函数导入,可以理解成初始化时钟

对于SystemInit的理解:为啥需要在main之前初始化时钟,以前看过最标准的理解是,CPU启动工作的这段时间,内存、外设等设备还没有启动,需要CPU分配时钟来启动外设,然后分配堆栈空间,并且将存在到flash的数据copy到RAW然后在跳入到main中。

仔细观察SystemInit函数,发现没有变量,操作的都是寄存器,个人理解,局部变量就需要分配堆栈地址,而堆栈又是在内存,无法实现。

关于nrf52832上电启动分析

之后在初始化库函数,然后最终进入main函数

然后是具体的分析.hex文件

.hex文件和.s文件是一一对应

关于nrf52832上电启动分析

从图中可以看到0x00000000的位置是RAW的0x2002080也就数栈的位置

函数地址

 

Reset_Handler      0x00000004 

NMI_Handler        0x00000008

.........

和向量表中的位置是一一对应

 

 

 

 

 

相关文章:

  • 2022-12-23
  • 2021-06-10
  • 2022-12-23
  • 2021-12-03
  • 2021-07-05
  • 2021-04-07
  • 2021-04-24
  • 2021-06-04
猜你喜欢
  • 2022-12-23
  • 2021-10-13
  • 2021-10-30
  • 2021-07-24
  • 2022-12-23
  • 2021-08-07
相关资源
相似解决方案