周立功ARM启动代码详解
需积分: 9 37 浏览量
更新于2024-10-28
收藏 57KB DOC 举报
"周立功的ARM启动代码分析"
这篇文档是关于ARM处理器的启动代码,由知名嵌入式专家周立功所讲解。启动代码是任何基于ARM微控制器的应用程序执行的第一部分,它负责设置处理器的状态、初始化硬件、分配内存空间以及调用应用程序的主入口函数。这里主要涉及了在LPC系列芯片上的C语言启动代码。
1. **堆栈配置**
在启动代码中,定义了不同模式下的堆栈大小。例如,`SVC_STACK_LEGTHEQU0`、`FIQ_STACK_LEGTHEQU0`、`IRQ_STACK_LEGTHEQU256`等分别定义了系统服务(SVC)、快速中断(FIQ)和服务中断(IRQ)的堆栈大小。堆栈用于保存处理器在执行中断或子程序调用时的上下文信息。
2. **处理器模式**
ARM处理器有多种运行模式,如用户模式(USR32Mode)、系统模式(SYS32Mode)、中断模式(IRQ32Mode)、快速中断模式(FIQ32Mode)等。这些模式的定义(如USR32ModeEQU0x10、IRQ32ModeEQU0x12等)用于设置处理器状态,以便在不同条件下正确地处理任务。
3. **寄存器定义**
部分代码定义了如`PINSEL2EQU0xE002C014`这样的寄存器地址,这些通常是微控制器的外设接口控制寄存器,用于配置I/O引脚功能、波特率等。
4. **配置寄存器**
`BCFG0EQU0xFFE00000`、`BCFG1EQU0xFFE00004`等表示配置寄存器的地址,这些寄存器通常用于初始化微控制器的外围设备,比如设置总线配置、时钟源、电源管理等。
5. **外部标号导入与导出**
`IMPORT`和`EXPORT`关键字用于声明和提供对其他函数或变量的访问。例如,`IMPORT__use_no_semihosting_swi`表示使用无半主机模式的软件中断,`IMPORT__main`是C语言主程序的入口点,`IMPORTFIQ_Exception`是快速中断异常处理程序。同时,`EXPORT`关键字导出了如堆栈和堆的边界,供其他代码段使用。
6. **中断向量表**
启动代码还包括中断向量表,如`Reset`、`Undefined`等,它们是处理器响应不同类型异常或中断时跳转的地址。`Reset`是复位中断处理程序,通常用于初始化系统。
7. **程序流程**
`ENTRY`指令标志着程序的开始,`Reset`是处理器复位后执行的第一个地址,`LDR PC, ResetAddr`加载新的程序计数器值,使得处理器开始执行复位后的初始化代码。接着,调用`TargetResetInit`初始化目标板,然后调用`__main`进入C语言的主程序。
总结来说,周立功的ARM启动代码分析涉及了微控制器启动时的堆栈设置、处理器模式、外设初始化、中断处理等多个关键点,是学习和理解ARM系统开发的重要参考资料。
2018-09-25 上传
2022-07-15 上传
2012-07-28 上传
2009-07-14 上传
2013-12-27 上传
2008-09-07 上传
2010-10-23 上传
点击了解资源详情
点击了解资源详情
xiaojialin
- 粉丝: 16
- 资源: 26
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常