周立功LPC21xx/LPC22xx系列ARM7启动代码深度解析
需积分: 10 113 浏览量
更新于2024-09-14
收藏 76KB DOC 举报
"周立功lpc21xx/lpc22xx系列ARM7启动代码分析"
这篇文章主要探讨了周立功公司针对LPC21xx/LPC22xx系列基于ARM7TDMI架构微控制器的启动代码,这对于理解ARM7体系结构至关重要。启动代码是嵌入式系统中非常关键的部分,它负责初始化硬件、设置堆栈、跳转到主程序等任务。
在分析启动代码时,我们首先看到一些定义的符号,如SVC_STACK_LEGTHEQU0、FIQ_STACK_LEGTHEQU0等。这些符号是用EQU指令定义的,相当于C语言中的#define宏,用于指定不同异常模式下的堆栈大小。例如,SVC32Mode、IRQ32Mode等定义了不同的处理器模式,这些模式在ARM架构中用于处理中断和异常。
接下来,代码中导入了_use_no_semihosting_swi,这表明启动代码会禁用半主机模式(Semihosting)。半主机模式是一种调试技术,允许应用程序通过主机操作系统进行输入输出操作,在最终产品中通常不需要启用。导入的FIQ_Exception、_main和TargetResetInit是外部函数,它们分别对应于FIQ异常处理、主程序入口和系统复位初始化。
然后,代码导出了bottom_of_heap、StackUsr、Reset和__user_initial_stackheap等符号,这些都是其他组件或链接器需要知道的地址或内存区域,比如堆栈的起点、复位处理函数以及用户初始堆栈和堆的设置。
ENTRY指令指定了汇编代码的入口点,即程序执行的起始位置。接着,Reset函数定义了处理器在复位时执行的序列,它加载了各种异常处理程序的地址,如UndefinedAddr(未定义指令异常)、SWI_Addr(软件中断异常)等。最后,DCD指令用来定义一个数据值,这里是0xb9205f80,可能是一个特定的地址或复位向量。
这篇分析涵盖了启动代码的基本结构,包括处理器模式、堆栈配置、异常处理、调试功能的禁用以及程序流程控制。对于理解LPC21xx/LPC22xx系列微控制器的启动过程和ARM7内核的工作原理,这些都是不可或缺的知识点。
2018-09-25 上传
2011-08-17 上传
2009-04-02 上传
点击了解资源详情
点击了解资源详情
2009-08-12 上传
2013-08-23 上传
2008-09-23 上传
普通网友
- 粉丝: 0
- 资源: 6
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍