06 嵌入式软件系统设计

上传人:zw****58 文档编号:46610523 上传时间:2018-06-27 格式:PDF 页数:11 大小:816.54KB
返回 下载 相关 举报
06 嵌入式软件系统设计_第1页
第1页 / 共11页
06 嵌入式软件系统设计_第2页
第2页 / 共11页
06 嵌入式软件系统设计_第3页
第3页 / 共11页
06 嵌入式软件系统设计_第4页
第4页 / 共11页
06 嵌入式软件系统设计_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《06 嵌入式软件系统设计》由会员分享,可在线阅读,更多相关《06 嵌入式软件系统设计(11页珍藏版)》请在金锄头文库上搜索。

1、11提纲1 1 12 2 2嵌入式软件开发的关键技术第六章 嵌入式软件系统设计ARM软件开发中的若干问题2内容提要嵌入式软件开发的关键技术1. 嵌入式软件启动代码的组织和编写;2. 程序的链接定位与链接脚本;4. 嵌入式软件的调试;嵌入式软件开发的关键技术1. 代码编写过程中的一些典型问题;2. 程序异常后的定位方法;3. 编译过程中产生的一些问题及解决办法。ARM软件开发中的若干问题3. 中断程序的编写;3启动代码的功能和特征? 功能1. 配置处理器的工作模式,初始化硬件;配置处理器的工作模式,初始化硬件;2. 为高级语言编写的程序准备环境,并引导高级语言编写的代码;为高级语言编写的程序准备

2、环境,并引导高级语言编写的代码;3. 启动代码的最终目的就是启动应用程序或引导操作系统。启动代码的最终目的就是启动应用程序或引导操作系统。? 特征1. 与处理器以及硬件配置密切相关,通常用汇编语言编写;与处理器以及硬件配置密切相关,通常用汇编语言编写;2. 程序复位运行入口点。程序复位运行入口点。嵌入式软件开发的关键技术启动代码是处理器上电复位时运行的一段代码4启动代码的最小流程嵌入式软件开发的关键技术寄存器配置存储区配置堆栈初始化C例程全局变 量初始化跳转到应用程序入 口C_Main设置异常跳转表5小型启动代码分析流程嵌入式软件开发的关键技术设置异常跳转表关闭中断,寄 存器配置堆栈初始化C例

3、程全局变 量初始化跳转到高级语言程 序入口C_Main调用7段数码 管测试程序C_Main软件环境初始化ramstart.sled.c硬件初始 化6小型启动代码分析异常向量嵌入式软件开发的关键技术1. 设置异常入口设置异常入口_entry :b ResetHandler/* Reset vector */b . /* Undefined instruction */b ./* SWI */b . /* Prefetch abort */b . /* Data abort */b . /* Reserved*/b HandlerIRQ/* IRQ */b . /* FIQ */27小型启动代码分

4、析处理器配置嵌入式软件开发的关键技术2. 关中断关中断ldrr0,=INTCON/*#Interrupt control register. */ ldrr1,=0x07 /*#non-vectored mode,disable IRQ,disable FIQ. */ strr1,r0 ldrr0,=INTMSK/*#Interrupt MASK register. */ ldrr1,=0x07ffffff /*#disable all(30) interrupt sources.*/ strr1,r0 ldrr0,=WTCON/*#watch dog disable*/ ldrr1,=0x0

5、 strr1,r08小型启动代码分析设置堆栈嵌入式软件开发的关键技术3. 初始化栈指针初始化栈指针 blInitStacks InitStacks: mrsr0,cpsr/* MODEMASK =0x1f, NOINT = 0x80*/ bicr0,r0,#MODEMASK|NOINT orrr1,r0,#IRQMODE|NOINT/* IRQMODE=0x12*/ msrcpsr_cxsf,r1 /*;IRQMode*/ ldrsp,=IRQStack orrr1,r0,#SVCMODE msrcpsr_cxsf,r1 /*;SVCMode*/ ldrsp,=SVCStack movpc,l

6、r9小型启动代码分析C语言全局变量清0嵌入式软件开发的关键技术4. 数据区初始化数据区初始化bss段清零段清零startram : LDRa1,=Image_ZI_Base /* Pickup the start of the BSS area */ MOVa3,#0/* Clear value in a3 */ LDRa2,=Image_ZI_Limit /* Pickup the end of the BSS area */ CMPa1,a2 BEQmove_data clear_loop : STRa3,a1,#4 /* Clear a word, a1 += 4 */ CMPa1,a2

7、/* end of ZI ? */ BNEclear_loop /* If not, continue with the BSS clear */ 10小型启动代码分析调用高级语言入口嵌入式软件开发的关键技术5. 进入进入C代码入口代码入口goto_main : B Main 11小型启动代码分析应用程序的启动嵌入式软件开发的关键技术void Main() Test_Seg7(); void Test_Seg7(void) while(1) *(U8*) 0x02000006) = 0x00; *(U8*) 0x02000004) = seg7table0; 12启动代码的典型流程嵌入式软件开

8、发的关键技术寄存器配置存储区配置,自检堆栈初始化C例程全局变量初始化跳转到高级语言程序 入口C_Main设置异常向量表外围电路初始化系统维护引导用户程序引导操作系统与系统密切相关与启动代码的功能相关313启动代码的组织嵌入式软件开发的关键技术从操作系统的角度看,启动代码的总目标就是正确地调用 内核来执行。?大多数启动代码都分为stage1和stage2两大部分。?依赖于CPU体系结构的代码,比如设备初始化代码等, 通常都放在stage1中,而且通常都用汇编语言来实现,以 达到短小精悍的目的。?而stage2 则通常用C语言来实现,这样可以实现复杂的 功能,而且代码会具有更好的可读性和可移植性。

9、14启动代码的操作模式? 启动加载模式:这种模式也称为“自主“(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。? 下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的固态存储设备中。BootLoader 的这种模式通常在系统更新时使用。工作于这种模式下的

10、BootLoader 通常都会向它的终端用户提供一个简单的命令行接口。嵌入式软件开发的关键技术15控制启动的设备? 串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader 程序在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。? 采用其他通讯设备,如果认为串口通讯速度不够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。嵌入式软件开发的关键技术16启动代码的搬迁RAM的存取速度要优于FLASH,为了提高程序的运行速度, 我们通常将启动代码

11、搬迁的RAM中运行。copy_code_to_ram :ldrr1, =0ldrr2, =0xc700000 ldrr3, =0x10000 /* 64K Bytes */next :ldrr0,r1,#4strr0,r2,#4cmpr1,r3bnenext嵌入式软件开发的关键技术17?.text:代码段,软件的代码部分?.rodata:只读数据段,存放已经初始化的全局常量如: const int g_mask = 0;?.data:数据段,存放已经初始化的全局变量如: intg_pending = 0;?.bss:堆栈段,存放未初始化的全局变量如:intg_cnt;嵌入式软件开发的关键技术软

12、件的代码和数据是分段存储的,各段存在于各个目标文件中(*.obj *.o),链接定位后按段的类别收集在一起,并分别保存在指定的存储区中程序代码和数据的组织18程序代码和数据的在存储器中的存储嵌入式软件开发的关键技术嵌入式软件的代码和数据组织非常灵活1. 代码段、只读数据段、可写数据段以及堆栈段分开存 放;各自的起始地址可以根据需要来设定;2. 程序入口也可以由设计者任意设定。419程序的链接定位?链接定位是系统级软件开发过程中必不可少的一部分,嵌入式 软件开发均属于系统级开发;?链接定位过程一般由链接器根据链接定位文件完成,比较简单 的系统,可以通过设置链接器开关选项取代链接定位文件;?链接定

13、位的关键是链接定位文件的编写。嵌入式软件开发的关键技术20简单的链接定位脚本文件SECTIONS. = 0x0C000000;.text : *(.text) .rodata : *(.rodata) . = 0x0C700000;.data : *(.data) .bss : *(.bss) 嵌入式软件开发的关键技术21典型的链接定位脚本文件SECTIONS. = 0x0C000000;.text : *(.text) .rodata : *(.rodata) Image_RO_Limit = .;Image_RW_Base = .;.data : *(.data) Image_ZI_Bas

14、e = .;.bss : *(.bss) Image_ZI_Limit = .;嵌入式软件开发的关键技术22程序入口的指定1. 通过链接脚本指定;ENTRY(_entry)/* _entry 必须为全局函数/标号 */SECTIONS . = 0x0C000008; .text : *(.text) .rodata : *(.rodata) Image_RO_Limit = .; 嵌入式软件开发的关键技术23程序入口的指定2. 通过工程设置来指定嵌入式软件开发的关键技术24嵌入式操作系统? Linux? Windows CE ? uC/OS II? uClinux? Nucleus嵌入式软件开

15、发的关键技术525嵌入式操作系统的选择和移植1. 操作系统的选择确定具体需求,选择商业操作系统或免费开源的操作系 统;2. 操作系统的移植根据自己的硬件平台进行移植和裁减嵌入式软件开发的关键技术26异常向量表(Exception Vectors)地 址地 址异 常异 常进入模式进入模式0x0000,00000x0000,0000复位复位管理模式管理模式0x0000,00040x0000,0004未定义指令未定义指令未定义模式未定义模式0x0000,00080x0000,0008软件中断软件中断管理模式管理模式0x0000,000C0x0000,000C中止(预取指令)中止(预取指令)中止模式中止模式0x0000,00100x0000,0010中止(数据)中止(数据)中止模式中止模式0x00

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号