ARM芯片启动流程解析:从启动方式到执行路径
需积分: 9 90 浏览量
更新于2024-09-12
收藏 197KB PDF 举报
"ARM启动释疑"
在深入探讨ARM启动流程之前,首先要明确一点:与51单片机不同,ARM处理器的启动方式更为复杂。51单片机通常在上电后从0地址开始执行程序,但ARM处理器的启动地址可以是非零地址,具体取决于所采用的启动方式。
ARM启动流程主要涉及两个关键概念:“启动方式”和“启动流程”。启动方式决定了程序代码在何处被执行,而启动流程则是指从上电到进入用户程序的一系列步骤。
1. 启动代码和功能代码:
- 启动代码:这部分代码通常由芯片设计工程师用汇编语言编写,用于初始化CPU的工作模式下的堆栈,设置中断向量表(如果需要中断功能),并最终将控制权交给C/C++程序的入口点`__main()`。
- 功能代码:即我们平常编写的应用程序,通常从`main()`函数开始执行,位于启动代码之后。
2. 存储器布局:
- ESRAM和SDRAM:这两种都是易失性存储器,上电时其内容是不确定的。ARM通常从它们的预设地址开始执行,但这不是存放完整程序的地方。
3. ARM的启动方式:
- 内部Flash启动:上电后,CPU会从内部Flash存储器中的特定地址开始执行代码。由于内部Flash容量有限,通常只存放启动代码,而功能代码则存储在其他更大的存储介质中。
- 外部存储器启动:包括NAND、NOR Flash或SD卡等。在这种情况下,整个程序可能都存储在外部设备上,CPU会在上电后通过特定的加载机制读取并执行这些代码。
4. 启动流程详解:
- 上电:电源接通后,ARM处理器的PC(程序计数器)会指向预设的启动地址,通常是内部Flash的某个地址。
- 执行启动代码:这部分代码负责设置系统环境,如初始化内存管理单元(MMU)、设置时钟、配置外设等。
- 转移至功能代码:启动代码执行完毕后,通过跳转指令将控制权交给`__main()`,然后进行全局变量初始化和C库的初始化。
- main()函数:最后,程序进入`main()`函数,这是用户程序的起点,开始执行实际的功能代码。
5. 启动加载器(Bootloader):
- 在外部存储器启动时,可能需要一个Bootloader来加载功能代码。Bootloader负责从外部设备读取并解析映像文件,将其加载到内存中,然后跳转到执行点。
ARM处理器的启动过程比51单片机复杂得多,涉及到多种启动方式和多个阶段的初始化。理解这些细节对于深入理解和调试嵌入式系统至关重要。
2015-05-02 上传
2022-09-14 上传
2010-05-14 上传
2021-01-20 上传
2008-04-23 上传
2010-06-14 上传
2009-09-24 上传
2022-09-20 上传
宇华
- 粉丝: 9
- 资源: 13
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析