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

下载本文档

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

文档简介

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

ARMADS全称为ARMDeveloperSuite,是ARM公司推出的用于ARM程序设计、开发和调试的集成开发工具。现在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0。ADS由命令行开发工具,ARM运行时库,图形化集成开发环境(CodeWarrior和AXD),实用程序和支持软件组成。ARM软件开发流程和开发工具6ADS命令行开发工具

ARMC(C++)编译器

ARM汇编器(armasm)

ARM链接器(armlink)

符号调试器(armsd)

ARM软件开发流程和开发工具7ARM运行时库ANSIC函数库:(armlib)

C++函数库:

ARM软件开发流程和开发工具8图形化集成开发环境(CodeWarrior和AXD)

CodeWarriorforARM

ADS调试器实用程序fromELF

armar

Flashdownloader

支持的软件ARMulatorARM软件开发流程和开发工具9ADTIDEforARMARM软件开发工具-ADTIDE简介

10嵌入式软件开发无操作系统的软件开发启动代码应用程序基于操作系统的软件开发bootloader操作系统移植BSP板级支持包应用程序开发ARM软件设计与代码分析11启动代码功能硬件初始化引导C代码特征通常用汇编语言编写程序复位运行入口点代码量非常小程序流程设置中断、异常入口关中断硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)初始化栈指针数据区初始化C入口函数调用BLMainARM软件设计与代码分析12应用程序(无操作系统)功能硬件驱动应用特征通常用C语言或者嵌入式汇编语言编写程序较复杂,代码量较大ARM软件设计与代码分析13bootloader功能硬件初始化引导操作系统下载程序(串口、网口、USB)烧写flash特征程序复位运行入口点通常用汇编语言+C语言编写代码量较小ARM软件设计与代码分析14嵌入式操作系统移植LinuxWindowsCEuC/OSIIuClinuxNucleusARM软件设计与代码分析15BSP板级支持包功能为应用程序提供统一的硬件操作接口特征高度硬件相关高度依赖于具体硬件平台各种操作系统各异ARM软件设计与代码分析16应用程序开发(操作系统)功能GUI图形、人机交互控制算法特征硬件依赖程度小部分可仿真调试各种操作系统各异ARM软件设计与代码分析17嵌入式软件设计和调试流程编辑创建工程添加文件、编写程序汇编语言加C语言编译配置编译、汇编和连接参数编写连接脚本文件编译调试连接调试器下载程序运行、调试固化通过仿真器烧写flash专用或通用的编程器通过bootloader烧写flashARM软件设计与代码分析18交叉编译GNU交叉编译编译.carm-elf-gcc汇编.Sarm-elf-gas连接.oarm-elf-ld操作文件汇编文件.SC文件.c链接脚本文件ldscript库文件.o.lib.a生成调试格式文件.elfDWARF-1DWARF-2生成bin文件elf2binarm-elf-objcopyARM软件设计与代码分析19链接脚本段Text段rodata段data段bss段符号Image_RO_Limit

Image_RW_BaseImage_ZI_BaseImage_ZI_LimitGCC库专用调试信息ARM软件设计与代码分析20链接脚本示例程序在SDRAM中运行程序在FLASH中运行ARM软件设计与代码分析21GCC库GCC库标准C函数库lib.a-lc标准数学函数库libm.a-lm标准函数库的支持库libg.a-lgGCC的支持库libgcc.a-lgcc链接排列顺序-lm–lc–lgcc-lgARM软件设计与代码分析22JXARM9-2410启动代码分析ARM软件设计与代码分析在基于ARM920Tcore的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,因此在这个地址处安排的通常就是系统的启动代码。它通常也是BootLoader程序的一部分,可以在启动代码基础上编写BootLoader。用汇编语言编写。启动代码是在复位后运行其它程序之前运行的一段小程序。通过它,初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用C函数准备好正确的环境。23启动代码的移植和修改ARM软件设计与代码分析启动代码除了依赖于CPU的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的启动代码也能运行在另一块板子上,也还是需要作一些必要的修改。24启动代码流程图启动代码的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用C函数。注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;ARM软件设计与代码分析25设置异常跳转表复位异常直接跳转到ResetHandler处,它是相对跳转,位置无关。ARM软件设计与代码分析26关闭看门狗设置S3C2410WTCON寄存器必须设置0x01e000000x01d30000ARM软件设计与代码分析27设置中断模式并禁止中断设置S3C2410中断寄存器设置所有一级中断源与二级中断源为不可用状态ARM软件设计与代码分析28配置存储器控制寄存器宽度ARM软件设计与代码分析0x01e00000配置值29堆栈初始化ARM软件设计与代码分析30C代码初始化ARM软件设计与代码分析拷贝RW数据段ZI段清零跳转到Main函数处执行31JXARM9-2410BOOTLOADER分析ARM软件设计与代码分析BootLoader是在启动代码的基础之上,通常启动代码包含于BootLoader之中BootLoader常用于引导操作系统或者应用程序BootLoader可以包含一些简单的调试手段JXARM9-2410使用通用的u-boot32u-boot简介ARM软件设计与代码分析u-boot是由德国DENX小组开发的交叉平台BootLoader,其全称为“universalBootLoader”。u-boot的开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统。它提供数百种嵌入式开发板和各种CPU,包括PowerPC、ARM、Xscale、MIPS、Coldfire、NIOS、Microblaze和x86等,同时它除了支持Linux系统的引导外,还支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多种嵌入式操作系统的引导。33u-boot简介ARM软件设计与代码分析u-boot的用户接口类似于Linux的shell界面,通过串口连接以后,用户可以交互式的输入命令和看到结果,u-boot的启动界面如下所示:U-Boot1.1.1(Sep62004-12:12:06)U-Bootcode:33F80000->33F9CED0BSS:->33FA116CRAMConfiguration:Bank#0:3000000064MBFlash:32MBIn:serialOut:serialErr:serialHitanykeytostopautoboot:0JX2410#34BootLoader的基本概念BootLoader是系统加电后运行的第一段软件代码。嵌入式系统中,整个系统的加载启动任务完全由BootLoader来完成。比如在一个基于ARM920Tcore的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。通常,BootLoader

是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的BootLoader

是很困难的。ARM软件设计与代码分析35BootLoader的移植和修改BootLoader除了依赖于CPU的体系结构外,BootLoader

实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。ARM软件设计与代码分析36BootLoader的安装系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C2410在复位时都从地址0x00000000取它的第一条指令。嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先执行BootLoader程序。也就是说对于基于S3C2410的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。ARM软件设计与代码分析37用来控制BootLoader的设备或机制串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader

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

的这种模式通常在系统更新时使用。工作于这种模式下的BootLoader

通常都会向它的终端用户提供一个简单的命令行接口。在uboot中可以通过修改环境变量实现自主模式。ARM软件设计与代码分析39BootLoader与主机间文件传输的通信设备及协议最常见的情况就是,目标机上的BootLoader

通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口上也可以采用xmodem/ymodem/zmodem

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

的stage2准备RAM空间拷贝BootLoader

的stage2到RAM空间中设置好堆栈跳转到stage2的C入口点BootLoader的stage2通常包括以下步骤初始化本阶段要使用到的硬件设备调用应用程序或启动内核ARM软件设计与代码分析42Stage1初始化流程图stage1的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage2。注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;ARM软件设计与代码分析43Stage2流程图stage2的功能: 初始化串口,显示菜单,通过控制台获取用户输入,并执行相应的命令操作。ARM软件设计与代码分析44板级支持包ARM软件设计与代码分析BSP(板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作。45板级支持包的特点ARM软件设计与代码分析硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。46板级支持包的功能ARM软件设计与代码分析47板级支持包的功能ARM软件设计与代码分析嵌入式系统初始化片级初始化板级初始化系统级初始化硬件相关的设备驱动程序和BootLoader存在一定的重叠48系统级初始化ARM软件设计与代码分析这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。49硬件相关的驱动程序ARM软件设计与代码分析与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联

温馨提示

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

评论

0/150

提交评论