周立功ARM7启动代码深度分析——LPC21xx/LPC22xx系列
需积分: 10 55 浏览量
更新于2024-09-09
1
收藏 172KB PDF 举报
"周立功公司的LPC21xx和LPC22xx系列基于ARM7架构的微控制器启动代码分析"
这篇原创文章主要探讨了针对周立功公司LPC21xx和LPC22xx系列芯片的ARM7启动代码,作者通过对启动代码的深入解析,旨在帮助读者理解这些微控制器在上电或复位时的初始化过程。启动代码通常包括对处理器状态的设置、栈空间的配置、中断向量的初始化以及系统核心功能的启动。
文章首先提到,虽然已有针对LPC2000系列(ARM7TDMI)的启动代码分析,但作者选择专注于`startup.s`文件,因为之前的分析对此部分处理较为简洁。`startup.s`是汇编语言编写的核心启动代码,负责设置CPU的初始状态,为C语言运行环境做好准备。
文章中提到了几个关键的汇编指令和定义:
1. `EQU`:类似于C语言中的`#define`,用于定义符号常量。例如,`SVC_STACK_LEGTHEQU0`等定义了不同模式下的栈大小。
2. `IMPORT`:导入外部函数或变量,如`_use_no_semihosting_swi`表示禁用半主机模式,这是一种调试工具,通常在发布版本中关闭。
3. `EXPORT`:导出内部函数或变量供其他模块使用,如`bottom_of_heap`、`StackUsr`等,它们与堆栈和内存分配有关。
4. `ENTRY`:指定汇编程序的入口点,即从`Reset`标签开始执行。
接着,启动代码中的一些关键步骤包括:
- `Reset`:这是程序的起始点,通过`LDR PC, ResetAddr`指令跳转到复位处理程序。
- `UndefinedAddr`、`SWI_Addr`、`PabortAddr`、`DabortAddr`等:这些地址定义了处理器遇到未定义指令、软件中断、预取异常和数据异常时的处理程序入口。
- `IRQ32Mode`、`FIQ32Mode`等:定义了不同中断模式,表明处理器如何响应中断事件。
- 栈的设置:如`FIQ Stack`、`IRQ Stack`等,定义了不同优先级中断时的栈空间,确保中断处理时的正确上下文切换。
- `__user_initial_stackheap`:初始化用户堆栈和堆,为C运行时环境做准备。
文章通过深入解析这些细节,帮助读者理解启动过程中处理器状态的变迁,以及如何从硬件层面逐步构建一个可运行的应用程序环境。这对于进行嵌入式系统的开发和调试至关重要,尤其是在没有操作系统支持的裸机环境下。通过这样的分析,开发者可以更好地理解微控制器的初始化流程,从而优化系统性能,避免潜在问题。
2011-10-27 上传
2012-07-28 上传
点击了解资源详情
2013-08-23 上传
2009-08-12 上传
2009-04-02 上传
pubuzhixia
- 粉丝: 13
- 资源: 53
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍