基于ARM的嵌入式系统软件设计.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《基于ARM的嵌入式系统软件设计.pdf》由会员分享,可在线阅读,更多相关《基于ARM的嵌入式系统软件设计.pdf(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于ARM的嵌入式系统软件设计北京微芯力科技有限公司北京微芯力科技有限公司主要内容?嵌入式软件开发关键技术?“ARM”软件设计基础?“ARM”软件调试与运行?嵌入式软件的启动代码嵌入式软件开发关键技术?嵌入式实时操作系统?程序的链接定位?软件调试技术启动代码说明?启动代码是用来初始化电路以及用来为高级语言写的软件做好运行前准备的一小段汇编语言是任何处理器上电复位时的程序运行入口点?功能初始化电路为高级语言编写的软件运行做准备?特征汇编语言处理器上电复位的程序运行入口点启动代码常见形式?实时操作系统的板基支持包BSP?计算机主板的BIOS启动代码最小流程全局寄存器初始化存储区配置初始化堆栈高级语
2、言入口函数调用Main()Rtos_Init()MyRoot()启动代码典型流程中断向量设置看门狗设置外围电路初始化初始化堆栈数据区清零高级语言入口函数调用全局寄存器初始化中断禁止存储区设置自检允许中断程序的链接定位?链接定位是系统级软件开发过程中必不可少的一部分嵌入式软件开发均属于系统级开发?链接定位过程一般由链接器根据链接定位文件完成比较简单的系统可以通过设置链接器开关选项取代链接定位文件?链接定位的关键是链接定位文件的编写常见链接程序段?text:代码段所有代码块部分以下程序段存在于各个目标文件中*.obj*.o链接定位后按段的类别收集在一起同时指定在存储区中的位置?rodata:已初始
3、化的全局只读数据?data:已初始化的全局数据?bss:未初始化的全局变量简单链接定位文件SECTIONS .=0 x10000 .text:*(.text).=0 x8000000 .data:*(.data).bss:*(.bss)典型链接定位文件SECTIONS.=0 x02000000;.text:*(.text)Image_RO_Limit=.;Image_RW_Base=.;.data:*(.data).rodata:*(.rodata).bss:*(.bss)PROVIDE(_stack=.);end=.;_end=.;.debug_info 0:*(.debug_info).d
4、ebug_line0:*(.debug_line).debug_abbrev 0:*(.debug_abbrev).debug_frame 0:*(.debug_frame)调试技术 在应用程序的编辑编译工作完成后开发人员需要借助一些调试设备或调试模块对应用程序进行调试发现程序设计中的缺陷常用的调试设备或调试模块有以下几种?指令集模拟器?驻留监控软件?JTAG仿真器?在线仿真器指令集模拟器?PC?而且?运行速度?调试?驻留监控软件 驻留监控软件Resident Monitors是一段运行在目标板上的程序集成开发环境中的调试模块通过以太网口并行端口或者串行端口等通讯端口与驻留监控软件进行交互由调
5、试模块发送命令通知驻留监控软件控制程序的执行读写存储器读写寄存器设置断点等 驻留监控软件是一种比较低廉有效的调试方式不需要任何其他的硬件调试和仿真设备ARM公司的Angel就是该类软件大部分嵌入式实时操作系统也是采用该类软件进行调试不同的是在嵌入式实时操作系统中驻留监控软件是作为操作系统的一个任务存在的 驻留监控软件的不便之处在于它对硬件设备的要求比较高一般在硬件稳定之后才能进行应用软件的开发同时它占用目标板上的一部分资源而且不能对程序的全速运行进行完全仿真所以对一些要求严格的情况不是很适合JTAG仿真器 JTAG仿真器也称为JTAG调试器是通过ARM芯片的JTAG边界扫描口进行调试的设备 J
6、TAG仿真器比较便宜连接比较方便通过现有的JTAG边界扫描口与 ARM CPU 核通信属于完全非插入式(即不使用片上资源)调试它无需目标存储器不占用目标系统的任何端口而这些是驻留监控软件所必需的 另外由于JTAG调试的目标程序是在目标板上执行仿真更接近于目标硬件因此许多接口问题如高频操作限制AC和DC参数不匹配电线长度的限制等被最小化了 使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式在线仿真器 在线仿真器使用仿真头完全取代目标板上的CPU可以完全仿真ARM芯片的行为提供更加深入的调试功能但这类仿真器为了能够全速仿真时钟速度高于100MHz的处理器通常必须采用极其复杂的设
7、计和工艺因而其价格比较昂贵 在线仿真器通常用在ARM的硬件开发中在软件的开发中较少使用其价格高昂也是在线仿真器难以普及的因素实时操作系统(RTOS)?RTOS选择的原则?EmbestIDE与RTOS的配合?常见的几种RTOS介绍RTOS特点?基于优先级的任务调度保证优先任务得到优先执行?任务间的通信互斥机制实现任务间同步和通讯?实时时钟管理保证任务在确定时间内执行完成RTOS基础知识RTOS选择?真的需要RTOS?主程序是不是很冗长程序的执行是不是需要判断很多条件参数或资源是否得到?是否发现花费很多时间盘算怎样使一段代码在该执行的时候执行?是否花费太多时间在中断子程序上需要编出所有代码处理中断
8、事件?处理器控制的时间和方式和预想的一样吗RTOS选择原则?RTOS性能包括任务最长切换时间中断最长延迟时间可调度的任务数和优先级数等?软件组件和设备驱动程序是否齐全?开发工具和调试工具是否易用?标准兼容性是否支持POSIX标准?RTOS发送形式是源代码还是二进制代码?是否需要许可证以及能否提供及时的技术支持EmbestIDE和RTOS的配合?EmbestIDE完全支持源代码方式提供的RTOS只需要将RTOS的源代码纳入EmbestIDE的工程管理目录中和应用程序一起编译即可调试RTOS及应用程序?EmbestIDE支持二进制码方式提供的RTOS条件是RTOS的二进制码是使用GNU工具链编译的
9、将该二进制码文件作为库链接进EmbestIDE应用工程即可调试RTOS及应用程序uCOS操作系统?简单高效易用?完全免费使用提供全部源代码?支持64个任务?支持多种CPU?提供邮箱信号量以及消息队列三种任务间通讯方式?无设备驱动程序缺乏足够多的应用模块如TCP/IP协议以及GUI模块等等?无技术支持eCOS操作系统?从linux移植而来复杂但完全功能?完全免费使用提供全部源代码?支持多种CPU?使用GNU工具链开发?有完备的设备驱动程序和应用模块可从linux中移植?技术支持需付费?支持POSIX标准?需要较多的系统资源uCLinux操作系统?从linux移植而来复杂但完全功能?完全免费使用提
10、供全部源代码?支持多种CPU?使用GNU工具链开发提供通用的linux API?有完备的设备驱动程序和应用模块可从linux中移植?使用直接物理内存访问方式?完整的TCP/IP协议栈?需要较多的系统资源内核512KB?无技术支持但国内使用较多Vxworks操作系统?销售额最大的实时操作系统价格昂贵?通常只提供二进制码内核?支持多种CPU?完整的开发工具和测试工具?完备的设备驱动程序和应用模块?技术支持需付费?支持POSIX标准?需要中等系统资源性能好功能齐全ARM寄存器?ARM寄存器组织?各种模式下的寄存器?主要寄存器的用途ARM处理器总共有37个寄存器?31个32位通用寄存器?6个32位状态
11、寄存器ARM寄存器组织ARM寄存器分类?通用寄存器?不分组寄存器 R0R7?分组寄存器 R8R14访问的具体物理寄存器取决于当前处理器模式?程序计数器(PC)R15?程序状态寄存器 CPSR每种处理器模式都有单独的当前程序状态寄存器ARM状态寄存器结构特殊功能寄存器?R13 用做堆栈寄存器SP每种异常模式都有自己单独的分组R13?R14 用做子程序链接寄存器LR可保存子函数返回地址?R15 用做程序计数器PC?CPSR 保存当前程序状态包含条件码标志中断禁止位当前处理器模式以及其它状态和控制信息存储区配置?存储区类型?存储区大小和起始地址?访问等待周期?访问时序?数据总线宽度?其他需要设置的内
12、容存储区配置?启动代码完成?手工实现?利用命令脚本ARM的存储器组织ARM的存储器组织ARM的中断向量表分配在0 x0到0 x20ARM启动代码从0地址开始执行复位的时候0地址为ROM区很多芯片允许存储区的重映射ARM指令集指令集?寄存器装载和存储指令寄存器装载和存储指令?算术和逻辑指令算术和逻辑指令?移位操作指令移位操作指令?乘法指令乘法指令?比较指令比较指令?分支指令分支指令?SWI 指令指令?协处理器指令协处理器指令?伪指令伪指令Thumb指令集指令集?存储器访问指令存储器访问指令?数据处理指令数据处理指令?分支指令分支指令?中断和断点指令中断和断点指令?伪指令伪指令寄存器装载和存储指令
13、寄存器装载和存储指令举例举例STR Rd,Rbase ;存储存储 Rd 到到 Rbase 所包含的有效地址所包含的有效地址STR Rd,place ;存储存储 Rd 到到 PC+place 所合成的有效地址所合成的有效地址STR Rd,Rbase,Rindex,LSL#2 ;存储存储 Rd 到到 Rbase+(Rindex*4);所合成的有效地址所合成的有效地址算术和逻辑指令算术和逻辑指令举例举例ADCS R3,R7,R11 ;加高端的字加高端的字带进位带进位AND R0,R0,#3 ;R0=保持保持 R0 的位的位 和和 1丢弃其余的位丢弃其余的位BIC R0,R0,#%1011 ;清除清除
14、 R0 中的位中的位 01和和 3保持其余的不变保持其余的不变MOV R0,R0,LSL#3 ;R0=R0*8移位操作指令移位操作指令LSL 逻辑左移逻辑左移ASL 算术左移算术左移LSR 逻辑右移逻辑右移ASR 算术右移算术右移ROR 循环右移循环右移RRX 带扩展的循环右移带扩展的循环右移乘法指令乘法指令 MLA:带累加的乘法带累加的乘法(Multiplication with Accumulate)MLA条件条件S,dest=(op_1*op_2)+op_3 MLA 的行为同于的行为同于 MUL但它把操作数但它把操作数 3 的值加到结果上的值加到结果上这在求总和时有用这在求总和时有用 M
15、UL:乘法乘法(Multiplication)MUL条件条件S,dest=op_1*op_2 MUL 提供提供 32 位整数乘法位整数乘法如果操作数是有符号的如果操作数是有符号的可以假定结果也是有符号的可以假定结果也是有符号的比较指令比较指令举例举例CMN R0,#1 ;把把 R0 与与-1 进行比较进行比较TST R0,#%1 ;测试在测试在 R0 中是否设置了位中是否设置了位 0分支指令分支指令 B:分支分支(Branch)指令指令处理器处理器PC立即跳转到给定的地址立即跳转到给定的地址 B条件条件 BL:带连接的分支带连接的分支(Branch with Link)指令指令在分支之前在分支
16、之前在寄存器在寄存器 14 中装载上中装载上 R15 的内容的内容 BL条件条件 伪指令伪指令 伪指令伪指令它们不是处理器实际上能理解的指令它们不是处理器实际上能理解的指令但可以转换成它能理解的某种东西但可以转换成它能理解的某种东西它们的存在能使你的程序更加简单它们的存在能使你的程序更加简单?ADR?ADRL?LDR?ALIGN?DCx?EQUx?OPT ARM 的Exception Handler Reset Undefined instruction SWI Prefetch abort Data abort Reserved FIQ IRQ异常向量RESET 正常情况下系统reset后进
17、入的入口 ENTRY主入口 驻留于存储系统的0 x0地址占4Byte,机器码通常为EA0000XX 通常在进入时将系统CPSR设为监控模式退出时改为用户模式 所有必须的BSP必须在此入口内完成 使用汇编语言编写可控制C代码入口Undefined Instruction 未定义指令 当程序员使用未定义指令时系统出错处理的入口 驻留于存储空间的0 x4,4bytes 处理程序通常做法是首先进行现场保护然后Do nothing 当出现此错误时主因大致是仿真器跳入错误地址SWI 软中断 驻留于0 x8,4Bytes monitor程序的入口 包含有丰富的指令寄存器 适用于ARM和ThumbAbort
18、Perfect abort 预取失败错误 驻留于0 x0c,4bytes Data abort 取数据失败错误 驻留于0 x10,4bytes 通常是保护现场然后do nothing 出错主因程序跳飞查程序FIQ和IRQ FIQ快速中断请求 驻留于0 x18,4bytes IRQ中断请求 驻留于0 x1c,4bytes FIQ和IRQ处理原理相同 所有的硬件中断源共用一个通道来进行IRQ或FIQ 中断处理支持中断嵌套编程实例1.数码管显示程序数码管显示程序功能功能显示显示0 1 2Flcddemo.cIsr.csnds.hledDemo.hsegment.h板卡ROM编程本章包含如下部分本章包
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 嵌入式 系统软件 设计
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内