嵌入式软件系统设计_第1页
嵌入式软件系统设计_第2页
嵌入式软件系统设计_第3页
嵌入式软件系统设计_第4页
嵌入式软件系统设计_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1嵌入式系统嵌入式系统嵌入式软件系统设计嵌入式软件系统设计20132提纲嵌入式软件开发过程ARM软件设计与代码分析ARM软件开发流程和开发工具第六章 嵌入式软件系统设计3常用调试方法q 软件仿真q 驻留监控程序硬件要求高,一般在硬件稳定之后进行需要占用目标板上的一部分资源不能对程序的全速运行进行完全仿真q JTAG仿真器完全非插入式调试,不使用片上资源,无需目标存储器仿真效果更加接近于目标硬件q 在线仿真器ARM软件开发流程和开发工具4ARM主流开发工具qWindows操作系统ARM ADS/SDT + 调试器GNU + Cygwin + 调试器ARM SDT + 简易电缆KEIL 4.13

2、+ 调试器qLinux操作系统GNU + GDBARM软件开发流程和开发工具5ARM嵌入式开发模式( ARM ADS/SDT + 调试器)ARM软件开发流程和开发工具6ADS与Multi-ICE qARM ADS全称为ARM Developer Suite,是ARM公司推出的用于ARM程序设计、开发和调试的集成开发工具。现在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0。qADS由命令行开发工具,ARM运行时库,图形化集成开发环境(Code Warrior和AXD),实用程序和支持软件组成。ARM软件开发流程和开发工具7ADS命令行开发工具 qARM C(C+)编译器 qA

3、RM汇编器(armasm) qARM链接器(armlink) q符号调试器(armsd) ARM软件开发流程和开发工具8ARM运行时库qANSI C函数库:(armlib) qC+函数库: ARM软件开发流程和开发工具9图形化集成开发环境(Code Warrior和AXD) qCodeWarrior for ARM qADS调试器q实用程序 fromELF armar Flash downloader q支持的软件 ARMulatorARM软件开发流程和开发工具10ADT IDE for ARMARM软件开发工具ADT IDE简介 11嵌入式软件开发q 无操作系统的软件开发启动代码应用程序q

4、基于操作系统的软件开发bootloader操作系统移植BSP板级支持包应用程序开发ARM软件设计与代码分析12启动代码q 功能硬件初始化引导C代码q 特征通常用汇编语言编写程序复位运行入口点代码量非常小q 程序流程设置中断、异常入口关中断硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)初始化栈指针数据区初始化C入口函数调用 BL MainARM软件设计与代码分析13应用程序(无操作系统)q 功能硬件驱动应用q 特征通常用C语言或者嵌入式汇编语言编写程序较复杂,代码量较大ARM软件设计与代码分析14bootloaderq 功能硬件初始化引导操作系统下载程序(串口、网口、USB)烧写flas

5、hq 特征程序复位运行入口点通常用汇编语言+C语言编写代码量较小ARM软件设计与代码分析15嵌入式操作系统移植qLinuxqWindows CE quC/OS IIquClinuxqNucleusARM软件设计与代码分析16BSP板级支持包q 功能为应用程序提供统一的硬件操作接口q 特征高度硬件相关高度依赖于具体硬件平台各种操作系统各异ARM软件设计与代码分析17应用程序开发(操作系统)q 功能GUI图形、人机交互控制算法q 特征硬件依赖程度小部分可仿真调试各种操作系统各异ARM软件设计与代码分析18嵌入式软件设计和调试流程q 编辑创建工程添加文件、编写程序汇编语言加C语言q 编译配置编译、汇

6、编和连接参数编写连接脚本文件编译q 调试连接调试器下载程序运行、调试q 固化通过仿真器烧写flash专用或通用的编程器通过bootloader烧写flashARM软件设计与代码分析19交叉编译q GNU交叉编译编译.c arm-elf-gcc汇编.S arm-elf-gas连接.o arm-elf-ldq 操作文件汇编文件.SC文件.c链接脚本文件ldscript库文件.o .lib .aq 生成调试格式文件.elfDWARF-1DWARF-2q 生成bin文件elf2binarm-elf-objcopyARM软件设计与代码分析20链接脚本q 段Text段rodata段data段bss段q 符

7、号 Image_RO_Limit Image_RW_Base Image_ZI_Base Image_ZI_Limitq GCC库专用q 调试信息ARM软件设计与代码分析21链接脚本示例q 程序在SDRAM中运行q 程序在FLASH中运行ARM软件设计与代码分析22GCC库q GCC库标准C函数库lib.a -lc标准数学函数库libm.a -lm标准函数库的支持库libg.a -lgGCC的支持库libgcc.a -lgccq 链接排列顺序-lm lc lgcc -lgARM软件设计与代码分析23JXARM9-2410启动代码分析ARM软件设计与代码分析l 在基于ARM920T core的嵌

8、入式系统中,系统在上电或复位时都从地址0 x00000000开始执行,因此在这个地址处安排的通常就是系统的启动代码。l 它通常也是BootLoader程序的一部分,可以在启动代码基础上编写BootLoader。l 用汇编语言编写。l 启动代码是在复位后运行其它程序之前运行的一段小程序。通过它,初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用C函数准备好正确的环境。24启动代码的移植和修改ARM软件设计与代码分析l启动代码除了依赖于 CPU 的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类

9、型等。l对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的启动代码也能运行在另一块板子上,也还是需要作一些必要的修改。 25启动代码流程图q 启动代码的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用C函数。q 注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;Boot Loader 入口设置中断向量表切换到超级模式,并禁止中断ResetHandler:复位入口设置中断模式,关闭所有中断初始化硬

10、件关闭看门狗使能回写Buffer和Cache设置非Cache区域设置端口关闭数据线015上拉设置外部中断的触发方式设置时钟设置CPU的运行频率,系统各部件的总线矿宽度以及各部件的时钟将Boot Loader拷贝到RAM拷贝代码到RAM跳至C代码程序ARM软件设计与代码分析26设置异常跳转表q复位异常直接跳转到ResetHandler处,它是相对跳转,位置无关。 ARM软件设计与代码分析27关闭看门狗q设置S3C2410 WTCON寄存器q必须设置0 x01e000000 x01d30000ARM软件设计与代码分析28设置中断模式并禁止中断q设置S3C2410中断寄存器q设置所有一级中断源与二级

11、中断源为不可用状态ARM软件设计与代码分析29配置存储器控制寄存器宽度ARM软件设计与代码分析0 x01e00000配置值30堆栈初始化ARM软件设计与代码分析31C代码初始化ARM软件设计与代码分析拷贝RW数据段ZI段清零跳转到Main函数处执行32JXARM9-2410 BOOTLOADER分析ARM软件设计与代码分析qBootLoader是在启动代码的基础之上,通常启动代码包含于BootLoader之中qBootLoader常用于引导操作系统或者应用程序qBootLoader可以包含一些简单的调试手段qJXARM9-2410使用通用的u-boot33u-boot简介ARM软件设计与代码分

12、析qu-boot是由德国DENX小组开发的交叉平台BootLoader,其全称为“universal Boot Loader”。qu-boot的开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统。它提供数百种嵌入式开发板和各种CPU,包括PowerPC、ARM、Xscale、MIPS、Coldfire、NIOS、Microblaze和x86等,同时它除了支持Linux系统的引导外,还支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多种嵌入式操作系统的引导。34u-boot简介ARM软件设计与代码分析qu-boot的用户接口类似于Linux的shell界面,通过

13、串口连接以后,用户可以交互式的输入命令和看到结果,u-boot的启动界面如下所示:U-Boot 1.1.1 (Sep 6 2004 - 12:12:06) U-Boot code: 33F80000 - 33F9CED0 BSS: - 33FA116CRAM Configuration:Bank #0: 30000000 64 MBFlash: 32 MBIn: serialOut: serialErr: serialHit any key to stop autoboot: 0JX2410 #35BootLoader的基本概念q BootLoader是系统加电后运行的第一段软件代码。q 嵌入

14、式系统中,整个系统的加载启动任务完全由 BootLoader来完成。比如在一个基于ARM920T core的嵌入式系统中,系统在上电或复位时都从地址0 x00000000开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。q 简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。q 通常,BootLoader 是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的 Bo

15、otLoader 是很困难的。ARM软件设计与代码分析36BootLoader 的移植和修改q BootLoader除了依赖于 CPU 的体系结构外,BootLoader 实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。q 对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。 ARM软件设计与代码分析37BootLoader 的安装q 系统加电或复位后,所有的CPU通常都从CPU制造商预先安排

16、的地址上取指令。比如,S3C2410在复位时都从地址 0 x00000000 取它的第一条指令。q 嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先执行BootLoader程序。q 也就是说对于基于S3C2410的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。ARM软件设计与代码分析38用来控制 BootLoader 的设备或机制q 串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立

17、连接,BootLoader 程序在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为串口通讯速度不够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。ARM软件设计与代码分析39Boot Loader 的操作模式q 启动加载模式:这种模式也称为自主(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。 q 下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网

18、络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被 BootLoader写到目标机上的固态存储设备中。BootLoader 的这种模式通常在系统更新时使用。工作于这种模式下的 BootLoader 通常都会向它的终端用户提供一个简单的命令行接口。 q 在uboot中可以通过修改环境变量实现自主模式。ARM软件设计与代码分析40BootLoader与主机间文件传输的通信设备及协议q 最常见的情况就是,目标机上的 BootLoader 通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发

19、,当然在串口上也可以采用xmodemymodemzmodem 协议以及q 在以太网上采用TFTP协议。ARM软件设计与代码分析41BootLoader的主要任务与典型结构框架q 从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。 q 大多数BootLoader都分为stage1和stage2两大部分。q 依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前面说的启动代码。q 而stage2 则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。 ARM软件设计

20、与代码分析42BootLoader的主要任务与典型结构框架q BootLoader的stage1通常包括以下步骤 为加载 BootLoader 的 stage2 准备 RAM 空间 拷贝 BootLoader 的 stage2 到 RAM 空间中 设置好堆栈 跳转到 stage2 的 C 入口点q BootLoader的stage2通常包括以下步骤 初始化本阶段要使用到的硬件设备 调用应用程序或启动内核ARM软件设计与代码分析43Stage 1初始化流程图q stage 1的功能: RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage 2。q

21、注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;Boot Loader 入口设置中断向量表切换到超级模式,并禁止中断ResetHandler:复位入口设置中断模式,关闭所有中断初始化硬件关闭看门狗使能回写Buffer和Cache设置非Cache区域设置端口关闭数据线015上拉设置外部中断的触发方式设置时钟设置CPU的运行频率,系统各部件的总线矿宽度以及各部件的时钟将Boot Loader拷贝到RAM拷贝代码到RAM跳至C代码程序ARM软件设计与代码分析44Stage 2流程图q stage 2的功能:初始化串口,显示

22、菜单,通过控制台获取用户输入,并执行相应的命令操作。ARM软件设计与代码分析45板级支持包ARM软件设计与代码分析qBSP(板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作。46板级支持包的特点ARM软件设计与代码分析q硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。q操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。47板级支持包的功能ARM软件设计与代码分

23、析48板级支持包的功能ARM软件设计与代码分析q嵌入式系统初始化v片级初始化v板级初始化v系统级初始化q硬件相关的设备驱动程序 和BootLoader存在一定的重叠49系统级初始化ARM软件设计与代码分析q这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。50硬件相关的驱动程序ARM软件设计与代码分析q与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。q尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论