【文档说明】嵌入式软件的开发过程与开发环境课件.ppt,共(88)页,2.591 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-92640.html
以下为本文档部分文字说明:
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-UXIBMPowerPCAIXIBMRS6000AIXSGIIrisIRIXSunSPARCSolarisSunSPARC
SunOSx86Windows95/NTx86RedHatLinuxAMD/Intelx86FujitsuSPARCliteHitachiH8/300、H8/300H、H8/SHitachiSHIBM/MotorolaPowe
rPCInteli960MIPSR3xxx、R4xx0MitsubishiD10v、M32R/DMotoroln68kSunSPARC、MicroSPARCToshibaTX39GNUC/C++编译器支持的宿
主机/目标机组合103.2.3链接交叉编译器所产生的目标文件是不完整的,它里面可能还有未定义的内部变量和函数引用。链接阶段的工作就是用链接工具把这些目标文件组合到一起,使所有未定义的变量和函数在程序库或其
它目标文件中找到它的定义。链接阶段得到的结果是一个“可重定位”的程序文件。其中包含了来自输入文件的所有代码和数据。链接工具通过合并输入文件里的代码段、数据段来完成这一工作。链接完成后,所有输入文件里的机器语言代码将出现在输出文
件的代码段里,所有变量将出现在输出文件的数据段里。113.2.4定址要使链接工具输出的文件变成可执行的程序文件还必须做一件事,那就是为程序的代码和数据指定存储地址。指定存储地址这项工作是需要在定址阶段通过定址工具来完成的任务。定址工具的输入是
“可重定位”的程序文件,输出是可执行的二进制文件。它们二者之间的转换,由定址工具自动完成,但应用程序的开发者必须向定址工具提供有关目标机上的存储器的信息。定址工具将用这些信息来为“可重定位”程序里的每一个代码段和数据段指定物理存储地址
。123.3嵌入式软件的下载及其工具程序的下载就是把在宿主机上生成的目标机内存映像文件放到目标机的RAM存储器或者FlashROM上面去,以便进行调试和运行。程序下载的方法主要有以下几种:(1)使用ROM仿真器(2)使用在线仿真器(IC
E)(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)将可执行程序固化到EP
ROM中;(4)将EPROM插到目标机的插座上;(5)在目标机上启动程序运行,若程序正确,则转到第(8)步;(6)在在宿主机上修改程序的源代码,纠正错误;(7)转到第(2)步;(8)程序开发完成。183.4.
2驻留程序法驻留程序常被称为bootloader程序。它需要有一个与之配合工作的宿主机端软件。宿主机端软件和bootloader可建立起连接。对目标机来说宿主机端软件好比是一个终端。通过它可以输入针对目标机的控制命令。目标机上的应用程序输出在标准输出设备上的内容可以通过宿主机端软件显示出来。因此
,只要在被调试的程序中将一些重要的信息用printf语句显示出来就可以帮助程序的调试。19在利用驻留程序法作为调试手段时,程序的开发步骤如下:(1)在宿主机上编写程序的源代码。在编写源代码时应根据需要加入若干printf语句,目的是通过
宿主机端软件显示某些变量的值,以便帮助进行程序调试;(2)在宿主机上编译程序的源代码,生成可执行程序;(3)将可执行程序的代码通过bootloader程序提供的功能下载到目标机的RAM上;20(4)通过bo
otloader程序提供的功能启动被调试的程序;(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很快就会老化。而使用RO
M仿真器时,可将程序用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系列。后台调试模式(BackgroudDebugging
Mode,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、Po
werPC或MIPS等。指令级的模拟器除了能模拟目标机的指令系统之外,视模拟器功能的强弱,还可以模拟目标机的外部设备、中断和定时器。系统调用级的模拟器相当于在宿主机上安装了目标机的操作系统,使得基于目标机的操作系统的应用程序可以在宿主机上运行。被模拟的目标机的操作系统的类型可以与宿主机不同。例
如,宿主机的操作系统是Windows2000,而目标机的操作系统是Hopen。两种类型的模拟器相比,指令级模拟器所提供的运行环境与实际的目标机更接近。而系统调用级的模拟器本身比较容易开发,也容易移植。33我们已经把直接测试法、驻留程序法、插桩法、ROM仿真器法、在线仿真器法、片上调试法、模拟器
法等几种嵌入式软件的调试方法都简单地介绍了一遍。从嵌入式软件的开发实践来看,各种调试方法都有一定的适用范围。没有哪一种调试方法可以绝对地说是最好的调试方法。即使是直接测试法在有的时候也是最有效的方法。因此,在嵌入式软件开发的不同阶段使用
最适合的调试方式,不但可以节约开发费用,同时还能大大地加快项目开发的进度。343.5几种典型的嵌入式软件开发环境嵌入式软件开发环境的种类很多。我们可以把它们分为3类:第一类是与某一种嵌入式操作系统配套的开发环境。
属于这一类的开发环境最多。DeltaOS、Hopen、PalmOS、pSOS、THOS、VxWorks、WindowsCE等嵌入式操作系统就都有与其相配套的软件开发环境。第二类是与某个芯片系列配套的开发环境。如与爱普生的32
位单片机S1C33相配套的开发环境C33、与ARM芯片相配套的UP-NetARM200等。35第三类是与某种应用平台配套的开发环境。如高通公司的BrewSDK。这里所说的应用平台是一种与操作系统相独立,专门针对某种应用领域的软件系统。Brew就是一个专门针对手机的应用平
台。363.5.1VxWorks的集成开发环境TornadoTornado是WindRiver公司推出的一个集成软件开发环境。它由三个部分所组成:运行在宿主机和目标机上的交叉开发工具和实用程序;运行在目标机上的实时操作系统VxWorks;连接宿主机和目标机的各种通讯介质。例如,
以太网、串口、在线仿真器(ICE)或ROM仿真器等。37Tornado提供的交叉开发工具和实用程序主要有:源代码编辑工具图形化的交叉调试工具工程配置工具集成仿真工具诊断分析工具C/C++编译工具宿主机目标机连接配置工具目标机系统状态浏览工具命令
行执行工具多语言浏览工具图形化核心配置工具38Tornado环境中宿主机与目标机间的关系391.图形化的交叉调试工具CrossWind/WDBCrossWind/WDB支持任务级和系统级两种调试方式、混合源代码和汇编
代码显示、多目标机同时调试。它具有良好的图形用户界面。通过CrossWind/WDB开发者可以在观察窗口中成组地观察表达式的值,在调试窗口中改变变量、寄存器和局部变量的值,通过信息规整和分类的方法有效地提供信息。Cro
ssWind/WDB还提供了GNU/GDB调试器引擎。GNU/GDB调试器引擎采用命令行方式。对于熟悉它的用户,使用起来有很强的灵活性。402.工程配置工具Project通过Project可以对VxWorks操作系统及其组件进行自动配置,进行依赖性分析
和代码容量计算,自动生成Makefile文件。它简化了VxWorks应用程序的组织、配置和建立工作,使工程管理和VxWorks配置的许多方面实现了自动化。这种集成的图形化工程管理环境增强了开发小组的专业化水平,使单独的组件可以各自独立开
发,然后由小组的其他成员共享和重用。413.集成仿真工具VxSimVxSim能提供与真实目标机完全一致的调试和仿真运行环境。通过VxSim,开发者可以在没有板级支持包、目标机操作系统、目标机硬件的情况下,使
用Tornado进行开发工作。424.诊断分析工具WindViewWindView是一个图形化的工具。它的功能主要是向开发者提供在目标机上运行的应用程序的许多的详细情况。这种系统级的诊断分析工具可以与集成仿真器一起使用。嵌入式系统开发者经常因为无法知道程序执行时系统内部的情况和软件的一些随
时间变化的特性而感到苦恼。WindView提供了运行在集成仿真器上的VxWorks应用程序的详细的动态行为,用图形化的方法显示出了任务、中断和系统对象之间的复杂关系,为软件开发者解决了许多麻烦的问题。435.C/C++编译工具Tornado提供
以下一些支持C语言和C++语言的工具和类库:DiabC/C++编译器、GNUC/C++编译器、iostreams类库。446.宿主机目标机连接配置工具Launcher从开发者的角度看Launcher位于Tornado环境的最上层。通过它开发者可对开发环境进行设置。457.目标机系统状态浏览工
具BrowserBrowser是一个图形化工具。它能随时提供目标系统的全面状态信息。开发者也可以通过它监视任务、信号量、消息队列、内存分区、定时器、模块、变量、堆栈等系统对象。这些对象的信息将根据开发者的选择进行周期性或条件性的更新。468.命令行执行工具Win
dShWindSh是一个命令行解释器。它可以直接解释执行C语言达式、调用目标机上的C函数、访问已在系统符号表中定义的变量。WindSh不仅可以解释几乎所有的C语言表达式,而且还可以通过它执行Tornado中所
有的调试功能。例如,下载软件模块、删除软件模块、创建并启动一个任务、删除任务、设置断点、删除断点、运行程序、单步运行程序、继续运行程序、查看内存、查看寄存器、查看变量、修改内存、修改寄存器、修改变量、查看任务列表、查看内存使用
情况、查看CPU利用率、查看特定的对象(任务、信号量、消息队列、内存分区、类)、复位目标机等。479.多语言浏览工具WindNavigator通过WindNavigator可浏览源程序代码,用图形化的方式显示函数调用关系。这样就可快速地进行代码定位。4810.图形化核心配置工具WindCo
nfig通过WindCgnfig所提供的图形向导,Tornado的用户可以方便地配置VxWorks内核及其组件的参数。493.5.2BrewSDK50BrewSDK是一个用于开发基于Brew的应用程序的开发环境。使用这个开发环境可在PC机上(需要WindowsNT或
Windows2000操作系统的支持)为无线设备编写和调试应用程序。待程序开发完毕后,再下载到无线设备上去。BrewSDK由以下工具和程序所组成:模拟器设备配置器资源编辑器模块信息文件编辑器库函数Bre
w头文件示例应用程序511.Brew模拟器Brew模拟器用于模拟运行和调试Brew的应用程序。它能提供与被模拟的手机同样的用户界面,好像应用程序真正是在实际的手机上运行一样。BrewSDK提供了一些类型的手机的
模拟方案,用户也可以使用Brew的设备配置器建立其它手机的模拟方案。522.Brew设备配置器Brew设备配置器用于生成新的设备配置文件或编辑现有的设备配置文件。可以通过设备配置文件进行设置的内容有键盘键及其功能、屏幕的尺
寸和分辨率、内存的大小等。533.Brew资源编辑器Brew资源编辑器用于建立应用程序的资源,如字符串、图像和对话框等。保存字符串、图像和对话框等资源的文件的后缀为.bar。资源编辑器在产生资源内容的同时,还产生定义资源标识号的.h文件。编译工具在生成应用程序的.dll文件时需要用到
这个.h文件。544.Brew模块信息文件(MIF)编辑器Brew模块信息文件(MIF)编辑器用来产生模块信息文件。模块信息文件包含以下几方面的内容,模块中应用程序和类的数量、每个应用程序和类的标识号、应用程序
的名称、应用程序的图标等。注意,在Brew中,一个模块文件内可以有多个应用程序的信息。模拟器在装入一个模块文件时要用到它的模块信息文件。55用BrewSDK开发应用程序的过程可分为以下5个步骤:(1)使用模块信息文件编辑器建立模块信息文件(.mif文件)。(2)使用VisualC++建立一个新
工程,以便建立应用程序模块文件(.dll文件)。(3)将应用程序的源码加入到第2步所建立的新工程当中去。(4)建立应用程序的模块文件。(5)启动模拟器调试应用程序模块文件。如果有必要,在启动模拟器调试应用程序之前还应该用资源编辑器建立应用程序要用到的资源文件(.bar文件)
,用设备配置器建立起要模拟的设备的设备配置文件(.qsc文件)。56用BrewSDK开发应用程序的过程573.5.3C33编程工具包C33是EPSON公司推出的一个专门为基于S1C33系列微控制器芯片的嵌入式系统开发应用程序的软件工具包
。这个工具包里面包括多种工具。C33提供的软件工具有:(1)gcc33:C语言编译器;(2)pp33:预处理器,用于处理宏命令;(3)ext33:指令扩展器,用于处理S1C33系列的扩展指令;(4)as33:汇编程序;(5)lk33:链接器,用于建立可执行目
标程序;58(6)dis33:反汇编程序;(7)db33:调试器,可通过控制硬件工具或调试监控器进行调试,也可使用模拟程序在宿主机上进行调试;(8)hex33:二进制/十六进制转换工具;(9)lib33:库生成工具;(10)wb33:集成开发平台,包含了上述所有的工具;(11)MON33
:调试监控器。调试监控器运行在目标机上,并与宿主机上的调试器相互通信,达到监控被调试的应用程序的目的。59C33提供的硬件工具有:(1)ICE33:在线仿真器;(2)ICD33:片上调试器;(3)EPOD33:针对不同芯片的
仿真器;(4)MEM33:存储仿真器,可仿真ROM、F1ash和RAM。60用C33开发嵌入式软件的过程包括以下6个主要步骤:(1)建立源程序:建立源程序可以使用普通的编辑器。(2)建立make文件:在C
33的集成开发平台wb33中可方便地建立make文件。通过make文件,预处理、编译、链接等步骤可自动完成。(3)执行make文件:执行上一步骤生成的make文件生成后缀为.sr的目标文件。(4)调试目标文件:使用调试器db33调试上一步生成的
目标文件。在调试目标文件时有3种不同的方式:使用ICE33,使用ICD33,使用调试监控器MON33。61(5)反汇编:为验证源程序代码与绝对地址之间的一致性,可利用反汇编工具dis33对一个链接好的目标
文件进行反汇编。反汇编程序的输出是后缀为.di的列表文件。(6)创建ROM数据或掩码数据:利用二进制/十六进制转换工具hex33,将前面生成的目标文件转换为目标ROM数据或/和掩码数据,以便将其固化到基于S1C33芯片的目标机中去。62用C33编程工具包开发应用程序
的过程633.5.4Hopen的应用软件开发环境Hopen是凯思公司研制的一个嵌入式软件系统。它由操作系统、软件开发环境、窗口系统、网络系统、数据库管理系统、Java虚拟机等多个部分所组成。Hopen系统的应用
软件开发环境又称为HopenSDK。643.5.4.1HopenSDK的组成65Hopen系统提供的调试工具分别是:仿真调试工具指令级仿真调试工具基于监控器的调试工具仿真调试工具实际上就是我们前面所说的系统调用
级的模拟器。由于一个不太规范的习惯,它被称为了现在的名字。在3个工具中它使用的最多。指令级仿真调试工具是一个指令级的模拟器。它的性能虽然强于仿真调试工具,但只能用来调试MC68328上的应用程序。基于监控器的调试工具是一个用插桩法来调试嵌入式应用程
序的工具。使用它能观察应用程序在目标机上的运行效果,但其问题同指令级仿真调试工具一样,也只能支持少数几种CPU,包括MotorolaMC68328、Winbond90210/90221和x86系列的芯片。663.5.4.2用HopenSDK开发应用软件的过
程在使用Hopen系统的系统调用级模拟器作为调试工具时,应用软件的开发过程应分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、程序调试、重新编译、程序下载与固化、程序测试、程序运行等11个阶段。前5个阶段与通常的开发过程相比没有什么变化。不同
之处主要体现在程序建立、程序调试、重新编译、程序下载与固化、程序测试、程序运行等几个阶段。671.程序建立阶段在Hopen系统中可用C和Java两种语言中的任何一种来编写应用程序。但在多数情况下是使用C语言。在此处我们介绍的开发过程也是针对C语言的。68为了帮助软件开发人
员编写应用程序,Hopen系统提供了一整套C语言的API函数,包括操作系统API、窗口系统API、文件系统API、网络系统API等。此外Hopen系统还提供了一个C语言库。程序建立阶段的工作就是利用这些API函数和库函数根据应用的
需求编写出应用程序,并编译成可执行的目标码。在编写和编译应用程序的时是用VisualC++5.0或6.0做为开发工具。不过在使用时有几点要特别注意,第一是在编写应用程序的时候应遵照标准的C语言规范;第二是除了Hopen系统提供的API函数
和库函数之外不要调用其它的函数,比如VisualC++的函数;第三是工程的类型应当是HopenAppWizard。692.程序调试阶段和重新编译阶段由于在调试应用软件之前,不需要将其下载到目标机之上,所以应用软件被编译为宿主机的目标指令
后,马上就可以用Hopen系统的仿真调试工具对其进行调试。当应用程序经过反复调试,确认没有错误之后,就可以将其下载并固化到目标机上面去。但要注意,在下载之前还必须将应用程序重新编译成与目标机的CPU相一致的目标码,
并对目标码进行重定位。进行这种编译与重定位一般是使用GNU的C/C++编译器(gcc)或者是某种与目标机相配套的编译器。703.程序下载与固化阶段由于应用软件在调试之前不需要下载到目标机之上,所以程序下载和程序固
化两个阶段已无再划分的必要,可以统一为一个"程序下载与固化"阶段。这个阶段的工作与目标机有密切的关系。这里我们所说的目标机指专门为开发工作设计的开发评估板,而不是最终用户所使用的普通硬件设备。这种开发评估板都提供一定的开发功能(在软件的支持
下)。利用这些功能,开发者可以比较方便地把应用程序下载和固化到它上面来。下载和固化的方法对于各种开发评估板是不太一样的,必需具体地参考它们各自的使用手册。714.程序测试阶段应用程序下载到目标机上面之后,就可以按照一定的测试计划测试它的各种功能
。因为在测试阶段Hopen系统没有提供对应的支撑工具,所以只能认真地逐一确认程序的每一个功能是否正确。但由于这时运行的应用程序已经在仿真调试工具中调试通过,所以通常不会出现错误。如果有错误,一般都与目标机的硬件环境有关,比如输入输出设备,中断地址等。这些错误一般要借助目标机所提供的功能来排
除。725.程序运行阶段当应用程序在目标机上测试通过之后,整个开发过程就告结束。剩下的事情就是把应用程序放到普通的硬件设备上去,宣告进入应用程序的最终运行阶段。733.5.4.3用VisualC++编译应用软件的方法当准备用一台PC机充
当宿主机,使用它开发Hopen系统的应用软件之前,必须首先在这台PC上安装VisualC++和HopenSDK。注意安装这两个系统的次序不能颠倒,必须是先安装VisualC++,后安装HopenSDK。因为在安装HopenSDK时需要为VisualC++增加
两个新的工程类型。这两个工程类型分别是HopenAppWizard和HopenDllWizard。74安装应用软件开发环境后VisualC++新增加的工程类型新增加的工程类型75在安装了VisualC++和Hopen系
统的应用软件开发环境之后,可用VisualC++按照下面的步骤建立和编译应用软件:(1)启动VisualC++。(2)在指定的目录中建立一个类型为HopenAppWizard的工程。(3)在工程所给出的程序模板中
添加程序代码,建立应用软件的源程序。(4)编译应用软件的源程序。如果编译通过,HopenAppWizard类型的工程将把应用软件编译为一个.dll文件。在缺省情况下这个.dll文件被保存在开发环境的安装目录的app子目录中。763.5.4.4用仿真调试工
具调试应用软件的方法Hopen系统的仿真调试工具是一个在Windows操作系统下运行的软件。它对硬件环境的要求不高,在486上有32M内存就可以正常地运行。77仿真调试工具的主窗口仿真调试工具共有“文件”、“编
辑”、“视图”、“系统”、“调试”、“工具”和“帮助”七个菜单。78Hopen系统的应用软件仿真调试工具向应用程序的开发者提供了一个与实际的目标机基本等价的软件运行环境,以及一系列追踪和发现程序中的错误的手段。通过这个仿真调试工具,应用程序的开发者可以对在建立阶段所
产生的应用程序进行调试。如果发现程序中存在着错误,那么就对其进行修改并重新编译,直至程序中不再有错误为止。79使用Hopen系统的仿真调试工具调试应用软件之前。一般需要对仿真调试工具进行一些设置。通过这些设置可以使仿真调试工具模拟不同种类的嵌入式系统,比如联想公司的PDA——天玑
911、海尔公司的智能手机——雅典娜6000或者一个机顶盒。这样应用程序的开发者就可以通过仿真调试工具调试这些嵌入式系统上的应用程序。801.设置系统环境选中“系统”菜单中的“系统管理”菜单项,仿真调试工具将打开一个多页窗口。这个多页窗口中的第一个窗口如本图所示。通过这个窗口
可以设置仿真调试工具所模拟的设备有多大的内存,可以运行多少个任务(线程)等指标。812.设置设备在“系统管理”菜单项打开的多页窗口中,第二个窗口如本图所示。它里面包含存储器、通讯端口、网络适配器等设备。双击其中
的任何一个设备就会进入对应的设备管理窗口。82用于设置RAM的设备管理窗口在这个窗口中可以对RAM的起始地址、容量等指标进行设置。833.设置链接库在Hopen系统中,窗口系统、网络系统、Java虚拟机以及类库是以动态链接库的形式提供给仿真调试工具的。在“系统管理”菜单项打开的多页窗
口中,第三个窗口如本图所示。通过这个窗口可以指定这个动态链接库位于何处。844.添加新设备选中“系统”菜单中的“添加设备”菜单项可以弹出如本图所示的窗口。通过这个窗口可以为仿真调试工具所仿真的嵌入式系统增加存储器、通讯端口、遥控器、键盘、鼠标、笔、显示器、网络
适配器等设备。以达到仿真这些设备的目的。855.设置被仿真设备的外形选中“系统”菜单中的“外形设置”菜单项可以弹出如本图所示的窗口。通过这个窗口可以对被仿真的设备的一些外观属性进行设置,比如它的外形图像、屏幕的高度和宽度、支持哪些虚拟键等。86在针对应用软件所运行的嵌入式
系统建立了一个仿真文件后,就可用仿真工具按照下面的步骤开始应用程序的调试。(1)启动仿真工具。(2)选中“文件”菜单中的“打开”菜单项,打开仿真文件。(3)选中“调试”菜单中的“开始”菜单项,开始调试应用程序。被调试的应用程序应事先用VisualC++编译为.dll文件,并保存在开发环境的安装
目录的app子目录中。(4)在调试工作告一段落之后,可选中“调试”菜单中的“结束”菜单项,结束对应用程序的调试。87仿真调试工具显示的联想天玑911这台PDA与实际的天玑911有相同的功能。点击它的图标就可以运行天玑911上面的应用程序。在应用程序运行的过程中,仿真调试工具会在主窗口
上显示出一些信息,以便帮助应用程序的开发者发现程序中的错误。88查看状态窗口应用程序的开发者还可以选中“调试”菜单中的“查看状态”菜单项弹出如本图所示的“查看状态窗口”。在“查看状态窗口中”可以选中“任务状态”、“内存状态”、“
内存查看”、“窗口资源”等菜单项进一步弹出几个窗口,显示任务状态、内存状态和窗口资源的使用情况,以便帮助开发人员调试应用程序。