欢迎来到天天文库
浏览记录
ID:36884448
大小:914.50 KB
页数:55页
时间:2019-05-10
《ARM启动代码设计及中断的处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章ARM启动代码设计及中断的处理内容5.1嵌入式软件开发5.2启动代码分析5.3BootLoader分析5.4ARM中断处理5.1嵌入式软件开发无操作系统的软件开发启动代码应用程序基于操作系统的软件开发bootloader操作系统移植BSP板级支持包应用程序开发启动代码功能硬件初始化引导C代码特征通常用汇编语言编写程序复位运行入口点代码量非常小程序流程设置中断、异常入口关中断硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)初始化栈指针数据区初始化C入口函数调用BLMain应用程序(无操作系统)功能硬件驱动应用特征通常用C语言或者嵌入式汇编
2、语言编写程序较复杂,代码量较大bootloader功能硬件初始化引导操作系统下载程序(串口、网口、USB)烧写flash特征程序复位运行入口点通常用汇编语言+C语言编写代码量较小嵌入式操作系统移植LinuxWindowsCEuC/OSIIuClinuxNucleusBSP板级支持包功能为应用程序提供统一的硬件操作接口特征高度硬件相关高度依赖于具体硬件平台各种操作系统各异应用程序开发(操作系统)功能GUI图形、人机交互控制算法特征硬件依赖程度小部分可仿真调试各种操作系统各异嵌入式软件设计和调试流程编辑创建工程添加文件、编写程序汇编语言加C语言编译配置
3、编译、汇编和连接参数编写连接脚本文件编译调试连接调试器下载程序运行、调试固化通过仿真器烧写flash专用或通用的编程器通过bootloader烧写flash交叉编译GNU交叉编译编译.carm-elf-gcc汇编.Sarm-elf-gas连接.oarm-elf-ld操作文件汇编文件.SC文件.c链接脚本文件ldscript库文件.o.lib.a生成调试格式文件.elfDWARF-1DWARF-2生成bin文件elf2binarm-elf-objcopyARM代码结构ARM程序编译后得到的二进制代码通常包含:代码段(text段或code段):编译后的
4、代码,只读读写数据段(data段):可读写的全局变量,读写只读数据段(rodata段):只读数据,如const类型的全局变量BSS段:需要清0的数据这些段在链接(link)过程中产生,并且在链接过程中都应该设置各段的起始地址。程序必须从代码段指定的起始位置处运行。根据代码段运行所在地址的硬件介质不同可以将程序分为在RAM运行的程序和在ROM运行的程序。链接脚本段Text段rodata段data段bss段符号Image_RO_LimitImage_RW_BaseImage_ZI_BaseImage_ZI_LimitGCC库专用调试信息链接脚本示例程序
5、在SDRAM中运行程序在FLASH中运行在RAM运行程序结构图在ROM运行程序结构图GCC库GCC库标准C函数库lib.a-lc标准数学函数库libm.a-lm标准函数库的支持库libg.a-lgGCC的支持库libgcc.a-lgcc链接排列顺序-lm–lc–lgcc-lg5.2启动代码由于ARM软件编程一般采用高级语言,如C语言,因此在系统启动后必须有一段程序能够将CPU带入到能够运行C语言的状态,这段程序就是启动代码。启动代码通常用汇编语言完成,并在系统复位入口点(ARM系统中为0地址)运行。在嵌入式系统中系统复位入口点所在的硬件通常是Fla
6、sh等芯片,存储在这些芯片中的数据即使掉电也能够保存,而且这个地方的硬件的访问宽度是由硬件设计决定,软件不能更改,这样就能保证上电后该地址的数据有效。启动代码主要功能(1)1、建立异常向量表2、初始化硬件:初始化RAM、关闭中断、关闭看门狗等3、初始化堆栈4、初始化读写数据段、BSS段:在ROM中运行的程序必须将数据段从ROM中拷贝到RAM中,并将BSS段清零;在RAM中运行的程序则需要将BSS段清零,然后将整个代码段、只读数据段、读写数据段和BSS段从ROM拷贝到RAM。启动代码主要功能(2)5、重定向位置无关的代码是指该代码不用在编译指定的地址
7、运行也能保证程序的执行流程和执行逻辑不会改变。位置相关代码运行的地址必须和编译时的地址一致,否则将导致程序运行流程改变。在初始化程序区、数据区之后需要一条跳转指令将PC跳转到编译时指定的运行地址接着运行。LDR指令及之前的指令都在ROM中运行,而startram标号之后的代码则跳转到编译时指定的地址(RAM或者ROM中)中运行了,因为startram标号表示的地址是由编译时就确定的。这个过程就是重定向。LDRPC,=startramstartram:…重定向之前运行的代码必须是位置无关的代码。启动代码主要功能(3)6、跳转到C代码LDRPC,=Ma
8、in5.2启动代码分析在基于ARM920Tcore的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,
此文档下载收益归作者所有