ARM7启动代码解析——LPC21xx/LPC22xx系列

需积分: 9 1 下载量 167 浏览量 更新于2024-09-11 收藏 386KB PDF 举报
"周立功lpc21xx/lpc22xx系列ARM7启动代码分析" 这篇资源主要讨论了LPC21xx/LPC22xx系列微控制器的启动代码,这对于理解ARM7处理器的启动流程至关重要。作者强调了深入理解启动代码对于提升学习进度和增强开发信心的作用。文章引用了周立功公司的一份启动代码分析,并指出这份分析重点关注了`startup.s`文件,这是启动代码的核心部分。 在ARM7处理器中,启动代码的主要任务包括设置处理器状态、初始化内存映射、配置中断处理以及调用主程序入口`_main`。在`startup.s`文件中,可以看到一些关键的符号定义,如栈大小定义(如SVC、FIQ、IRQ等栈的大小)和处理器模式常量(如USR32Mode、SVC32Mode、SYS32Mode等)。这些定义用于设定处理器在启动时的初始状态和异常处理。 例如,`SVC_STACK_LEGTHEQU0`、`FIQ_STACK_LEGTHEQU0`分别定义了服务调用栈和服务快速中断栈的大小为0,这可能意味着在特定的系统配置下,这些栈并未被使用。而`IRQ_STACK_LEGTHEQU256`则表示中断栈大小为256个字节。`EQU`在这里相当于C语言中的`#define`,用于常量定义。 `IMPORT`指令用于声明外部函数或变量,如`IMPORT _use_no_semihosting_swi`表示在代码中禁止使用半主机模式(Semihosting),这是一种调试工具,通常在正式发布的产品中关闭。`IMPORT FIQ_Exception`和`IMPORT _main`则表明了启动代码依赖于外部的快速中断异常处理函数和主程序入口。 在ARM7处理器的启动过程中,处理器会从ROM中的预设地址开始执行,首先进行必要的初始化工作,比如设置堆栈指针、初始化硬件模块,然后跳转到`_main`函数,开始用户应用程序的执行。这部分代码是嵌入式系统开发的基础,理解和掌握启动代码能够帮助开发者更好地控制系统的启动行为,解决启动阶段可能出现的问题。