您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式软件的开发环境1
13嵌入式软件的开发环境本章主要内容:(1)嵌入式软件的开发过程(2)嵌入式软件的建立及其工具(3)嵌入式软件的下载及其工具(4)嵌入式软件的调试及其工具(5)典型的嵌入式软件开发环境23.1嵌入式软件的开发过程为嵌入式系统开发应用程序的过程与为PC机开发应用软件过程有一定的不同,出现了一些在PC机上不曾有的工作阶段。在同样的一个阶段,具体的工作也有很多的不同。3交叉开发模式应用程序的编辑、编译、链接等过程都在宿主机上完成,而应用程序要在和宿主机有很大差别的目标机上实际运行。应用程序的调试主要是在宿主机上进行,但在很多情况下要借助于目机。4嵌入式软件的开发过程53.2嵌入式软件的建立及其工具嵌入式软件的建立步骤:源代码编写编译链接定址6嵌入式软件的建立步骤73.2.1源代码编写源代码编写阶段的工作任务是使用适当的程序设计语言编写程序的源代码。比如说用C语言、C++语言、汇编语言等。就目前的情况来看,使用最多的是C语言。这其中的原因可能有以下三个:其一,受通用计算机的影响,C语言的使用非常广泛,几乎每一种处理器都支持C语言的编译器,而且有相当多的程序员具有用C语言进行程序开发的丰富经验。其二,在嵌入式系统领域中,C语言是一种最具统一标准的程序设计语言。其三,C语言是一个非常“低级”的语言。它赋于程序员很多直接控制计算机硬件的能力,但又不失去高级语言所固有的好处。它的这种特点对嵌入式系统更为重要。83.2.2编译编译阶段要做的工作是用交叉编译或汇编工具处理程序的源代码,产生目标文件。当宿主机和目标机采用同样类型的处理器时,没有“交叉”的问题,是这一阶段的一个特例。这时编译工作往往简单些。9宿主机目标机DECAlphaDigitalUnixHP9000/700HP-UXIBMPowerPCAIXIBMRS6000AIXSGIIrisIRIXSunSPARCSolarisSunSPARCSunOSx86Windows95/NTx86RedHatLinuxAMD/Intelx86FujitsuSPARCliteHitachiH8/300、H8/300H、H8/SHitachiSHIBM/MotorolaPowerPCInteli960MIPSR3xxx、R4xx0MitsubishiD10v、M32R/DMotoroln68kSunSPARC、MicroSPARCToshibaTX39GNUC/C++编译器支持的宿主机/目标机组合103.2.3链接交叉编译器所产生的目标文件是不完整的,它里面可能还有未定义的内部变量和函数引用。链接阶段的工作就是用链接工具把这些目标文件组合到一起,使所有未定义的变量和函数在程序库或其它目标文件中找到它的定义。链接阶段得到的结果是一个“可重定位”的程序文件。其中包含了来自输入文件的所有代码和数据。链接工具通过合并输入文件里的代码段、数据段来完成这一工作。链接完成后,所有输入文件里的机器语言代码将出现在输出文件的代码段里,所有变量将出现在输出文件的数据段里。113.2.4定址要使链接工具输出的文件变成可执行的程序文件还必须做一件事,那就是为程序的代码和数据指定存储地址。指定存储地址这项工作是需要在定址阶段通过定址工具来完成的任务。定址工具的输入是“可重定位”的程序文件,输出是可执行的二进制文件。它们二者之间的转换,由定址工具自动完成,但应用程序的开发者必须向定址工具提供有关目标机上的存储器的信息。定址工具将用这些信息来为“可重定位”程序里的每一个代码段和数据段指定物理存储地址。123.3嵌入式软件的下载及其工具程序的下载就是把在宿主机上生成的目标机内存映像文件放到目标机的RAM存储器或者FlashROM上面去,以便进行调试和运行。程序下载的方法主要有以下几种:(1)使用ROM仿真器(2)使用在线仿真器(ICE)(3)使用片上调试器(ICD)(4)使用目标机上的驻留程序13使用目标机上的驻留程序生成了目标机的内存映象文件之后,就可以使用bootloader程序将这个内存映像文件下载到目标机上面去。宿主机端软件和bootloader程序一般是通过串口相互连接。当然也可以通过以太网相连接。在使用串口相连接时,下载程序的工作可分为以下几步进行:(1)用串口线连接宿主机和开发评估板的串口。(2)在宿主机上启动bootloader程序。当使用以Windows为操作系统的PC机做宿主机时,通常以超级终端程序做宿主机端软件。14(3)在目标机上按复位键,重新启动目标机。目标机被重新启动后,将自动执行驻留在ROM中的bootloader程序。(一些开发评估板可以通过跳线选择系统重新启动后从不同的地址开始运行。)(4)将宿主机的串口和目标机的串口设置为相同的传输速率。在设置时应选择尽可能高的速率,以节省程序下载所花费的时间。设置目标机串口传输速率的方法是同过超级终端程序输入相应的命令。(5)在宿主机上通过超级终端程序输入bootloader程序的命令,将开发评估板设置为等待接收下载程序状态,并指定程序下载的位置。(6)在宿主机上发出下载命令。开始进行程序下载。153.4嵌入式软件的调试及其工具直接测试法驻留程序法插桩法ROM仿真器法在线仿真器法片上调试法模拟器法163.4.1直接测试法直接测试法是嵌人式系统发展的早期经常采用的一种调试方法。原因是这种方法需要的调试工具非常简单,比较适应当时的实际情况。采用这种方式进行软件开发的基本步骤如下:17(1)在宿主机上编写程序的源代码;(2)在宿主机上用交叉编译工具对程序的源代码进行编译,生成可执行程序;(3)将可执行程序固化到EPROM中;(4)将EPROM插到目标机的插座上;(5)在目标机上启动程序运行,若程序正确,则转到第(8)步;(6)在在宿主机上修改程序的源代码,纠正错误;(7)转到第(2)步;(8)程序开发完成。183.4.2驻留程序法驻留程序常被称为bootloader程序。它需要有一个与之配合工作的宿主机端软件。宿主机端软件和bootloader可建立起连接。对目标机来说宿主机端软件好比是一个终端。通过它可以输入针对目标机的控制命令。目标机上的应用程序输出在标准输出设备上的内容可以通过宿主机端软件显示出来。因此,只要在被调试的程序中将一些重要的信息用printf语句显示出来就可以帮助程序的调试。19在利用驻留程序法作为调试手段时,程序的开发步骤如下:(1)在宿主机上编写程序的源代码。在编写源代码时应根据需要加入若干printf语句,目的是通过宿主机端软件显示某些变量的值,以便帮助进行程序调试;(2)在宿主机上编译程序的源代码,生成可执行程序;(3)将可执行程序的代码通过bootloader程序提供的功能下载到目标机的RAM上;20(4)通过bootloader程序提供的功能启动被调试的程序;(5)如果程序运行正确,则去掉程序中不必要的printf语句后转到第(9)步;(6)借助于用printf语句显示的信息,发现程序中的错误;(7)在宿主机上修改程序的源代码,纠正错误;(8)转到第(2)步;(9)用bootloader程序提供的功能将调试正确的程序固化到目标机上。213.4.3插桩法22在利用插桩法作为调试手段时,程序的开发步骤如下:(1)在宿主机上编写程序的源代码;(2)在宿主机上编译程序的源代码,生成可执行程序;(3)将可执行程序的代码下载到目标机的RAM上;(4)使用调试器进行调试;(5)如果程序正确,则转到第(9)步;(6)在调试器的帮助下定位错误;(7)在宿主机上修改程序的源代码,纠正错误;(8)转到第(2)步;(9)将可执行程序固化到目标机上。233.4.4ROM仿真器法ROM仿真器可以认为是一种用于替代目标机上ROM芯片的硬件设备。它本身也是一个嵌入式系统。24ROM仿真器的连接方法25ROM仿真器的最主要用途是节省程序开发(编辑、编译、下载、调试)过程所需的时间。使用插桩法的情况下,在更新ROM中的程序时,一般的过程是从目标机上取下旧的EPROM(或Flash),将其用紫外线照射擦除后放到EPROM编程器中,写入新的程序,然后,再插回到目标机上。反复这样做,EPROM很快就会老化。而使用ROM仿真器时,可将程序用ROM仿真器下载到目标机上运行,并根据程序运行的情况对程序进行修改。263.4.5在线仿真器法在线仿真器(In-CircuitEmulator,ICE)是一种用于替代目标机上CPU的设备。对目标机来说,在线仿真器就相当于它的CPU。在线仿真器本身就是一个嵌入式系统,它有自己的CPU、RAM、ROM和软件。在线仿真器可以执行目标机CPU的所有指令,但比一般的CPU有更多的引出线,能够将内部的信号输出到被控制的目标机上。在线仿真器上的存储器也可以被映射到用户的程序空间上。因此即使没有目标机,仅用在线仿真器也可以进行程序的调试。27在线仿真器的连接方法283.4.6片上调试法片上调试(InCircuitDebuggerICD)是CPU芯片内部的一种用于支持调试功能模块。可把它看做是一种廉价的在线仿真器。29按照实现技术,片上调试可分为以下几类:仿调试监控器:Motorola的CPU16、CPU32和ColdFire系列。后台调试模式(BackgroudDebuggingMode,BDM):Motorola的MPC5XX和MPC8XX系列。连接测试存取组(JointTestAccessGroup,JTAG):PPC6XX、PPC4XX、ARM7、ARM9、Intel1960。片上仿真(OnChipEmulation,OnCE):Motorola的DSP芯片系列。30目前使用比较多的是采用后台调试模式的CPU芯片。这种芯片的外面有一些与调试控制有关的管脚。这些管脚在需要的时候可被引出,形成一个用于与外部相连的调试端口。这种CPU具有调试模式和一般模式两种不同的运行模式。当满足了特定的触发条件时CPU就可进入调试模式。在调试模式下,CPU不再从内存中读取指令,而是通过它的调试端口读取指令。通过调试端口还可以控制CPU进入和退出调试模式,这样在宿主机的调试器上就可以通过调试端口直接向目标机发送要执行的指令,使调试器读写目标机的内存和各种寄存器,控制目标程序的运行以及完成各种复杂的调试功能。313.4.7模拟器法模拟器是一个运行于宿主机上的纯软件工具。它通过模拟目标机的指令系统或目标机操作系统的系统调用来达到在宿主机上运行和调试嵌入式程序的目的。模拟器适合于用来调试“高级”的应用程序,比如说一个“通讯簿”程序。这种程序与外部设备打交道不多,实时性不强,拿到哪一个计算机上去执行都一样。因此,开发者可以直接在宿主机上验证程序的逻辑。当确认无误之后,将写好的程序移到目标机上面去一般就可以正确地执行。32模拟器有两种主要的类型:一类是在宿主机上模拟目标机指令系统的模拟器,我们称其为指令级的模拟器。另一类是模拟目标机操作系统的系统调用的模拟器,我们称其为系统调用级的模拟器。指令级的模拟器相当于在宿主机上建立了一台虚拟的目标机,该虚拟目标机的CPU的种类可以与宿主机不同。例如,宿主机的CPU是IntelPentium,而虚拟机是ARM、PowerPC或MIPS等。指令级的模拟器除了能模拟目标机的指令系统之外,视模拟器功能的强弱,还可以模拟目标机的外部设备、中断和定时器。系统调用级的模拟器相当于在宿主机上安装了目标机的操作系统,使得基于目标机的操作系统的应用程序可以在宿主机上运行。被模拟的目标机的操作系统的类型可以与宿主机不同。例如,宿主机的操作系统是Windows2000,而目标机的操作系统是Hopen。两种类型的模拟器相比,指令级模拟器所提供的运行环境与实际的目标机更接近。而系统调用级的模拟器本身比较容易开发,也容易移植。33我们已经把直接测试法、驻留程序法、插桩法、ROM仿真器法、在线仿真器法、片上调试法、模拟器法等几种嵌入式软件的调试方法都简单地介绍了一遍。从嵌入式软件的开发实践来看,各种调试方法都有一定的适用范围。没
本文标题:嵌入式软件的开发环境1
链接地址:https://www.777doc.com/doc-916332 .html