[技术问答] 《Cortex-M0权威指南》之体系结构---程序映像和启动流程

[复制链接]
 楼主| xujunyi3611 发表于 2019-1-30 15:02 | 显示全部楼层 |阅读模式
  我们先来看看程序映像。
309995c514befb1f15.png
  通常,Cortex-M0处理器的程序映像时从地址0x00000000处开始的。

  程序映像开始处时向量表,其中包含了异常的其实地址(向量),每个中断向量的地址都等于“异常号*4”,比如,外部IRQ0的异常类型为16,因此其向量地址为16*4=0x40。这些向量的最低位都被置为1,以表示使用thumb指令。向量表的大小由实际使用的中断个数决定。

  向量表中包含了MSP的初始值,它存储在向量表的头四个字节。

  复位时,处理器首先读取向量表的前两个字(8个字节),第一个字为MSP的初始值,第二个字为复位向量,它表示程序执行的起始地址。

 楼主| xujunyi3611 发表于 2019-1-30 15:02 | 显示全部楼层
  例如,如果启动代码位于地址0x000000C0,需要在复位向量处写入这个地址,并且将地址的最低位置为1,以表明当前为thumb代码,因此,地址0x00000004处的值为0x000000C1。在取得复位向量值后,处理器开始从这个地址处执行程序代码。
299475c514c1c5f288.png
 楼主| xujunyi3611 发表于 2019-1-30 15:03 | 显示全部楼层
  复位流程也会初始化MSP,假设内存位于0x20000000~0x20007FFF,可以将0x20008000写在地址0x00000000处,这样就实现了把主栈指针置于内存的顶部。

  如果要使用PSP,在配置CONTROL寄存器切换栈指针前,必须首先通过软件代码将其初始化,因为复位流程只初始化MSP,不初始化PSP。
336375c514c33021f2.png
123ycli 发表于 2019-1-30 16:52 | 显示全部楼层
复位时,处理器首先读取向量表的前两个字(8个字节),第一个字为MSP的初始值,第二个字为复位向量,它表示程序执行的起始地址。
123ycli 发表于 2019-1-30 16:52 | 显示全部楼层
复位时,处理器首先读取向量表的前两个字(8个字节),第一个字为MSP的初始值,第二个字为复位向量,它表示程序执行的起始地址。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

376

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部