M3的MCU的启动过程

6 篇文章 0 订阅
4 篇文章 0 订阅

这段时间再看bootloader相关的内容,因此也想了解下main函数之前,mcu做了什么。参考的文档和博客的地址如下:

http://www.sunyouqun.com/2017/05/mcu-startup-procedure/

先抄一张图,这张图描述了MCU的映像文件

MCU_Startup_Image

“所谓映像文件,就是工程编译完成后生成的bin文件。

映像文件起始位置存放中断向量表(Vector Table),然后依次存放程序代码和其他数据。中断向量表的第一项为栈顶指针MSP(Main Stack Pointer)的初值,第二项为复位向量,它指向了程序的第一个指令,即复位处理函数Reset_Handler。

http://www.sunyouqun.com/wp-content/uploads/2017/05/MCU_Startup_Reset_Sequence.png

如上图所示,MCU复位时,依次完成三个任务:

  1. 从向量表的第一项(@0x00000000)中取出MSP初值
  2. 从复位向量(@0x00000004)中取出Reset_Handler函数地址
  3. 跳转到Reset_Handler函数位置并执行

在Reset_Handler函数中,MCU执行软硬件初始化,包括Flash和RAM位置、时钟和PLL、静态和全局变量等。”


在IAR上,就有以下的图


由以上图可以看到,0X0000 0000的值给了SP,也就是栈顶指针。0X0000 0004中的值给了PC,也就是程序代码段。

这里0X0000 0004的值是0X0800 1AE1,但是PC里面的值是0X08001AE0,相差了1。是因为这里使用的是Thumb指令,网上的说明 原因如下:

1.“最低位为1只是为了向cpu说明,现在要跳向thumb code,真正的地址还是偶地址对其的。”

2.“thumb是奇数地址, 原因是 ARM 内核的设置.
   由于指令都是偶地址的, 最后一位没用, ARM 内核拿来另作他用, 以代表指令(ARM为0, THUMB为1)模式”

3.“4.BX带状态切换的跳转指令

  格式:BX <RN>;

  功能:处理器跳转到目标地址处,从那里继续执行;

  目标地址为寄存器RN的值和0xFFFFFFFE(最后一位自动清零)作与操作的结果。

目标地址处的指令可以是ARM指令,也可以是Thumb指令。

  RN的最低位存到CPSR的t位,此位决定了指令时ARM还是THUBM状态。为0表明是ARM指令,为1表明是THUMB指令。

在arm中是按照pc取指令的。32位可以寻址32G

thumb指令中取值是按照偶地址实现的。”

参考网页:http://bbs.21ic.com/icview-454078-1-1.html



  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值