M3的MCU的启动过程
来源:互联网 发布:linux socket bind 编辑:程序博客网 时间:2024/06/06 20:11
这段时间再看bootloader相关的内容,因此也想了解下main函数之前,mcu做了什么。参考的文档和博客的地址如下:
http://www.sunyouqun.com/2017/05/mcu-startup-procedure/
先抄一张图,这张图描述了MCU的映像文件
“所谓映像文件,就是工程编译完成后生成的bin文件。
映像文件起始位置存放中断向量表(Vector Table),然后依次存放程序代码和其他数据。中断向量表的第一项为栈顶指针MSP(Main Stack Pointer)的初值,第二项为复位向量,它指向了程序的第一个指令,即复位处理函数Reset_Handler。
如上图所示,MCU复位时,依次完成三个任务:
- 从向量表的第一项(@0x00000000)中取出MSP初值
- 从复位向量(@0x00000004)中取出Reset_Handler函数地址
- 跳转到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
- M3的MCU的启动过程
- 8051 MCU学习之分析单片机的启动过程
- GD32F130FXP6学习笔记五:cortex-m3系列的启动过程
- 三星MCU的一种启动方式
- 基于Fujitsu FM3 32-bit ARM Cortex-M3 内核的MCU 开发
- 基于Fujitsu FM3 32-bit ARM Cortex-M3 内核的MCU 开发(第二篇)
- mcu的bootloader
- PPC的MCU初始化
- MCU的市场
- MCU的状态管理
- Cortex-M3 的本性
- Cortex-M3的优势
- STM32(Cortex-M3)启动过程(入口地址)
- ARM的MCU pk MPU
- MCU和SOC的区别
- DSP和MCU的区别
- 嵌入式各类MCU的学习方法
- 51MCU的中断系统
- PAI深度学习Tensorflow框架多机多卡多PS Server使用说明
- mongodb数据库常用指令
- 10045---Servlet、Filter 和Listener 工作原理
- Linux第二章习题
- highcharts 处理时间不连续的图表封装函数
- M3的MCU的启动过程
- 【Ionic3】关闭新增页面,跳转到列表后刷新(回显)
- C语言经典面试题 与 C语言面试宝典
- MySQL使用用@jznum声明一个变量
- 省选模拟(12.10) T2 maze
- git命令
- Maven环境变量配置教程(史上最详细版)
- 比特币或区块链的创业思路【炒币篇】
- TunesKit Audible AA AAX Converter(有声读物转换工具)官方注册版V1.2.10.21下载 | TunesKit Audible Converter