3 嵌入式软件的开发环境
本章主要内容:
(1) 嵌入式软件的开发过程
(2) 嵌入式软件的建立及其工具
(3) 嵌入式软件的下载及其工具
(4) 嵌入式软件的调试及其工具
(5) 典型的嵌入式软件开发环境
1
嵌入式软件的开发过程
为嵌入式系统开发应用程序的过程与为PC机
开发应用软件过程有一定的不同,出现了一
些在PC机上不曾有的工作阶段。在同样的一
个阶段,具体的工作也有很多的不同。
2
交叉开发模式应用程序的编辑、编译、链接等过
程都在宿主机上完成,
而应用程序要在和宿主机有很大
差别的目标机上实际运行。
应用程序的调试主要是
在宿主机上进行,但在
很多情况下要借助于目
机。
3
嵌入式软件的开发过程
4
嵌入式软件的建立及其工具
嵌入式软件的建立步骤:
源代码编写
编译
链接
定址
5
嵌入式软件的建立步骤
6
源代码编写
源代码编写阶段的工作任务是使用适当的程序设计
语言编写程序的源代码。比如说用C语言、C++语
言、汇编语言等。就目前的情况来看,使用最多的
是C语言。这其中的原因可能有以下三个:其一,
受通用计算机的影响,C语言的使用非常广泛,几
乎每一种处理器都支持C语言的编译器,而且有相
当多的程序员具有用C语言进行程序开发的丰富经
验。其二,在嵌入式系统领域中,C语言是一种最
具统一标准的程序设计语言。其三,C语言是一个
非常“低级”的语言。它赋于程序员很多直接控制
计算机硬件的能力,但又不失去高级语言所固有的
好处。它的这种特点对嵌入式系统更为重要。 7
编译
编译阶段要做的工作是用交叉编译或汇编
工具处理程序的源代码,产生目标文件。
当宿主机和目标机采用同样类型的处理器
时,没有“交叉”的问题,是这一阶段的
一个特例。这时编译工作往往简单些。
8
宿主机 目标机
DEC Alpha Digital Unix
HP 9000/700 HP-UX
IBM Power PC AIX
IBM RS6000 AIX
SGI Iris IRIX
Sun SPARC Solaris
Sun SPARC SunOS
x86 Windows 95/NT
x86 Red Hat Linux
AMD/Intel x86
Fujitsu SPARClite
Hitachi H8/300、H8/300H、H8/S
Hitachi SH
IBM/Motorola PowerPC
Intel i960
MIPS R3xxx、R4xx0
Mitsubishi D10v、M32R/D
Motoroln 68k
Sun SPARC、MicroSPARC
Toshiba TX39
GNU C/C++编译器支持的宿主机/目标机组
合
9
链接
交叉编译器所产生的目标文件是不完整的,它里
面可能还有未定义的内部变量和函数引用。链接
阶段的工作就是用链接工具把这些目标文件组合
到一起,使所有未定义的变量和函数在程序库或
其它目标文件中找到它的定义。
链接阶段得到的结果是一个“可重定位”的程序
文件。其中包含了来自输入文件的所有代码和数
据。链接工具通过合并输入文件里的代码段、数
据段来完成这一工作。链接完成后,所有输入文
件里的机器语言代码将出现在输出文件的代码段
里,所有变量将出现在输出文件的数据段里。
10
定址
要使链接工具输出的文件变成可执行的程序文件还
必须做一件事,那就是为程序的代码和数据指定存
储地址。指定存储地址这项工作是需要在定址阶段
通过定址工具来完成的任务。定址工具的输入是“
可重定位”的程序文件,输出是可执行的二进制文
件。它们二者之间的转换,由定址工具自动完成,
但应用程序的开发者必须向定址工具提供有关目标
机上的存储器的信息。定址工具将用这些信息来为
“可重定位”程序里的每一个代码段和数据段指定
物理存储地址。
11
嵌入式软件的下载及其工具
程序的下载就是把在宿主机上生成的目标
机内存映像文件放到目标机的RAM存储器
或者Flash ROM上面去,以便进行调试和
运行。程序下载的方法主要有以下几种:
(1) 使用ROM仿真器
(2) 使用在线仿真器(ICE)
(3) 使用片上调试器(ICD)
(4) 使用目标机上的驻留程序
12
使用目标机上的驻留程序
生成了目标机的内存映象文件之后,就可以使用
bootloader程序将这个内存映像文件下载到目标
机上面去。宿主机端软件和bootloader程序一般
是通过串口相互连接。当然也可以通过以太网相
连接。在使用串口相连接时,下载程序的工作可
分为以下几步进行:
(1) 用串口线连接宿主机和开发评估板的串口。
(2) 在宿主机上启动bootloader程序。当使用以
Windows为操作系统的PC机做宿主机时,通常以
超级终端程序做宿主机端软件。
13
(3) 在目标机上按复位键,重新启动目标机。目标机
被重新启动后,将自动执行驻留在 ROM中的
bootloader程序。(一些开发评估板可以通过跳线选
择系统重新启动后从不同的地址开始运行。)
(4) 将宿主机的串口和目标机的串口设置为相同的传
输速率。在设置时应选择尽可能高的速率,以节省
程序下载所花费的时间。设置目标机串口传输速率
的方法是同过超级终端程序输入相应的命令。
(5) 在宿主机上通过超级终端程序输入bootloader程
序的命令,将开发评估板设置为等待接收下载程序
状态,并指定程序下载的位置。
(6) 在宿主机上发出下载命令。开始进行程序下载。
14
嵌入式软件的调试及其工具
直接测试法
驻留程序法
插桩法
ROM仿真器法
在线仿真器法
片上调试法
模拟器法
15
直接测试法
直接测试法是嵌人式系统发展的早期经常采用的一
种调试方法。原因是这种方法需要的调试工具非常
简单,比较适应当时的实际情况。采用这种方式进
行软件开发的基本步骤如下:
16
(1) 在宿主机上编写程序的源代码;
(2) 在宿主机上用交叉编译工具对程序的源代码进
行编译,生成可执行程序;
(3) 将可执行程序固化到EPROM中;
(4) 将EPROM插到目标机的插座上;
(5) 在目标机上启动程序运行,若程序正确,则转
到第(8)步;
(6) 在在宿主机上修改程序的源代码,纠正错误;
(7) 转到第(2)步;
(8) 程序开发完成。
17
驻留程序法
驻留程序常被称为bootloader程序。它需要有
一个与之配合工作的宿主机端软件。宿主机
端软件和bootloader可建立起连接。对目标机
来说宿主机端软件好比是一个终端。通过它
可以输入针对目标机的控制命令。目标机上
的应用程序输出在标准输出设备上的内容可
以通过宿主机端软件显示出来。因此,只要
在被调试的程序中将一些重要的信息用printf
语句显示出来就可以帮助程序的调试。
18
在利用驻留程序法作为调试手段时,程序的
开发步骤如下:
(1) 在宿主机上编写程序的源代码。在编写
源代码时应根据需要加入若干printf语句,目
的是通过宿主机端软件显示某些变量的值,
以便帮助进行程序调试;
(2) 在宿主机上编译程序的源代码,生成可
执行程序;
(3) 将可执行程序的代码通过bootloader程序
提供的功能下载到目标机的RAM上;
19
(4) 通过bootloader程序提供的功能启动被调
试的程序;
(5) 如果程序运行正确,则去掉程序中不必
要的printf语句后转到第(9)步;
(6) 借助于用printf语句显示的信息,发现程
序中的错误;
(7) 在宿主机上修改程序的源代码,纠正错
误;
(8) 转到第(2)步;
(9) 用bootloader程序提供的功能将调试正确
的程序固化到目标机上。 20
插桩法
21
在利用插桩法作为调试手段时,程序的开发步骤如下:
(1) 在宿主机上编写程序的源代码;
(2) 在宿主机上编译程序的源代码,生成可执行程序;
(3) 将可执行程序的代码下载到目标机的RAM上;
(4) 使用调试器进行调试;
(5) 如果程序正确,则转到第(9)步;
(6) 在调试器的帮助下定位错误;
(7) 在宿主机上修改程序的源代码,纠正错误;
(8) 转到第(2)步;
(9) 将可执行程序固化到目标机上。
22
ROM仿真器法
ROM仿真器可以认为是一种用于替代目
标机上ROM芯片的硬件设备。它本身也
是一个嵌入式系统。
23
ROM仿真器的连接方法
24
ROM仿真器的最主要用途是节省程序开发
(编辑、编译、下载、调试)过程所需的时间。
使用插桩法的情况下,在更新ROM中的程序
时,一般的过程是从目标机上取下旧的
EPROM(或Flash),将其用紫外线照射擦除后
放到EPROM编程器中,写入新的程序,然后,
再插回到目标机上。反复这样做,EPROM很
快就会老化。而使用ROM仿真器时,可将程
序用ROM仿真器下载到目标机上运行,并根
据程序运行的情况对程序进行修改。
25
在线仿真器法
在线仿真器(In-Circuit Emulator,ICE)是一种
用于替代目标机上CPU的设备。对目标机来说,
在线仿真器就相当于它的CPU。在线仿真器本身
就是一个嵌入式系统,它有自己的CPU、RAM、
ROM和软件。在线仿真器可以执行目标机CPU的
所有指令,但比一般的CPU有更多的引出线,能
够将内部的信号输出到被控制的目标机上。在线
仿真器上的存储器也可以被映射到用户的程序空
间上。因此即使没有目标机,仅用在线仿真器也
可以进行程序的调试。
26
在线仿真器的连接方法
27
片上调试法
片上调试(In Circuit Debugger ICD)
是CPU芯片内部的一种用于支持调试功
能模块。可把它看做是一种廉价的在线
仿真器。
28
按照实现技术,片上调试可分为以下几类:
仿调试监控器: Motorola的CPU16、CPU32和
ColdFire系列。
后台调试模式(Backgroud Debugging Mode,
BDM): Motorola的MPC 5XX和MPC 8XX系列。
连接测试存取组( Joint Test Access Group,
JTAG): PPC6XX、PPC4XX、ARM7、ARM9、
Intel 1960。
片上仿真( On Chip Emulation, OnCE):
Motorola的DSP芯片系列。
29
目前使用比较多的是采用后台调试模式的CPU芯片。
这种芯片的外面有一些与调试控制有关的管脚。这
些管脚在需要的时候可被引出,形成一个用于与外
部相连的调试端口。这种CPU具有调试模式和一般
模式两种不同的运行模式。当满足了特定的触发条
件时CPU就可进入调试模式。在调试模式下,CPU
不再从内存中读取指令,而是通过它的调试端口读
取指令。通过调试端口还可以控制CPU进入和退出
调试模式,这样在宿主机的调试器上就可以通过调
试端口直接向目标机发送要执行的指令,使调试器
读写目标机的内存和各种寄存器,控制目标程序的
运行以及完成各种复杂的调试功能。
30
模拟器法
模拟器是一个运行于宿主机上的纯软件工具。它通
过模拟目标机的指令系统或目标机操作系统的系统
调用来达到在宿主机上运行和调试嵌入式程序的目
的。
模拟器适合于用来调试“高级”的应用程序,比如
说一个“通讯簿”程序。这种程序与外部设备打交
道不多,实时性不强,拿到哪一个计算机上去执行
都一样。因此,开发者可以直接在宿主机上验证程
序的逻辑。当确认无误之后,将写好的程序移到目
标机上面去一般就可以正确地执行。
31
模拟器有两种主要的类型:
一类是在宿主机上模拟目标机指令系统的模
拟器,我们称其为指令级的模拟器。
另一类是模拟目标机操作系统的系统调用的
模拟器,我们称其为系统调用级的模拟器。
指令级的模拟器相当于在宿主机上建立了一台虚拟的目标机,
该虚拟目标机的CPU的种类可以与宿主机不同。例如,宿主
机的CPU是Intel Pentium,而虚拟机是ARM、PowerPC或
MIPS等。指令级的模拟器除了能模拟目标机的指令系统之
外,视模拟器功能的强弱,还可以模拟目标机的外部设备、
中断和定时器。
系统调用级的模拟器相当于在宿主机上安装了目标机的操作
系统,使得基于目标机的操作系统的应用程序可以在宿主机
上运行。被模拟的目标机的操作系统的类型可以与宿主机不
同。例如,宿主机的操作系统是Windows 2000,而目标机的
操作系统是Hopen。
两种类型的模拟器相比,指令级模拟器所提供的运行环境与
实际的目标机更接近。而系统调用级的模拟器本身比较容易
开发,也容易移植。
32
我们已经把直接测试法、驻留程序法、插桩
法、ROM仿真器法、在线仿真器法、片上
调试法、模拟器法等几种嵌入式软件的调试
方法都简单地介绍了一遍。从嵌入式软件的
开发实践来看,各种调试方法都有一定的适
用范围。没有哪一种调试方法可以绝对地说
是最好的调试方法。即使是直接测试法在有
的时候也是最有效的方法。因此,在嵌入式
软件开发的不同阶段使用最适合的调试方式,
不但可以节约开发费用,同时还能大大地加
快项目开发的进度。
33
几种典型的嵌入式软件开发环境
嵌入式软件开发环境的种类很多。我们可以把它们
分为3类:
第一类是与某一种嵌入式操作系统配套的开发环境。
属于这一类的开发环境最多。DeltaOS、Hopen、
PalmOS、pSOS、THOS、VxWorks、Windows CE
等嵌入式操作系统就都有与其相配套的软件开发环
境。
第二类是与某个芯片系列配套的开发环境。如与爱
普生的32位单片机S1C33相配套的开发环境C33、与
ARM芯片相配套的UP-NetARM200等。
34
第三类是与某种应用平台配套的开发环境。如高通
公司的Brew SDK。这里所说的应用平台是一种与操
作系统相独立,专门针对某种应用领域的软件系统。
Brew就是一个专门针对手机的应用平台。
35
VxWorks的集成开发环境
Tornado
Tornado是WindRiver公司推出的一个集
成软件开发环境。它由三个部分所组成:
运行在宿主机和目标机上的交叉开发工具
和实用程序;运行在目标机上的实时操作
系统VxWorks;连接宿主机和目标机的各
种通讯介质。例如,以太网、串口、在线
仿真器(ICE)或ROM仿真器等。
36
Tornado提供的交叉开发工具和实用程序主要有:
源代码编辑工具
图形化的交叉调试工具
工程配置工具
集成仿真工具
诊断分析工具
C/C++编译工具
宿主机目标机连接配置工具
目标机系统状态浏览工具
命令行执行工具
多语言浏览工具
图形化核心配置工具 37
Tornado环境中宿主机与目标机间的关系
38
1. 图形化的交叉调试工具
CrossWind/WDB
CrossWind/WDB支持任务级和系统级两种调试方式、
混合源代码和汇编代码显示、多目标机同时调试。
它具有良好的图形用户界面。通过CrossWind/WDB
开发者可以在观察窗口中成组地观察表达式的值,
在调试窗口中改变变量、寄存器和局部变量的值,
通过信息规整和分类的方法有效地提供信息。
CrossWind/WDB还提供了GNU/GDB调试器引擎。
GNU/GDB调试器引擎采用命令行方式。对于熟悉它
的用户,使用起来有很强的灵活性。
39
2. 工程配置工具Project
通过Project可以对VxWorks操作系统及其组件进行
自动配置,进行依赖性分析和代码容量计算,自动
生成Makefile文件。它简化了VxWorks应用程序的
组织、配置和建立工作,使工程管理和VxWorks配
置的许多方面实现了自动化。这种集成的图形化工
程管理环境增强了开发小组的专业化水平,使单独
的组件可以各自独立开发,然后由小组的其他成员
共享和重用。
40
3. 集成仿真工具VxSim
VxSim能提供与真实目标机完全一致的调试和仿真
运行环境。通过VxSim,开发者可以在没有板级支
持包、目标机操作系统、目标机硬件的情况下,使
用Tornado进行开发工作。
41
4. 诊断分析工具WindView
WindView是一个图形化的工具。它的功能主要是向
开发者提供在目标机上运行的应用程序的许多的详
细情况。这种系统级的诊断分析工具可以与集成仿
真器一起使用。
嵌入式系统开发者经常因为无法知道程序执行时系
统内部的情况和软件的一些随时间变化的特性而感
到苦恼。WindView提供了运行在集成仿真器上的
VxWorks应用程序的详细的动态行为,用图形化的
方法显示出了任务、中断和系统对象之间的复杂关
系,为软件开发者解决了许多麻烦的问题。
42
5. C/C++编译工具
Tornado提供以下一些支持C语言和C++语言的工具
和类库:Diab C/C++编译器、GNU C/C++编译器、
iostreams类库。
43
6. 宿主机目标机连接配置工具
Launcher
从开发者的角度看Launcher位于Tornado环境的最
上层。通过它开发者可对开发环境进行设置。
44
7. 目标机系统状态浏览工具
Browser
Browser是一个图形化工具。它能随时提供目标系统
的全面状态信息。开发者也可以通过它监视任务、
信号量、消息队列、内存分区、定时器、模块、变
量、堆栈等系统对象。这些对象的信息将根据开发
者的选择进行周期性或条件性的更新。
45
8. 命令行执行工具WindSh
WindSh是一个命令行解释器。它可以直接解释执行
C语言达式、调用目标机上的C函数、访问已在系统
符号表中定义的变量。WindSh不仅可以解释几乎所
有的C语言表达式,而且还可以通过它执行Tornado
中所有的调试功能。例如,下载软件模块、删除软
件模块、创建并启动一个任务、删除任务、设置断
点、删除断点、运行程序、单步运行程序、继续运
行程序、查看内存、查看寄存器、查看变量、修改
内存、修改寄存器、修改变量、查看任务列表、查
看内存使用情况、查看CPU利用率、查看特定的对
象(任务、信号量、消息队列、内存分区、类)、
复位目标机等。 46
9. 多语言浏览工具
WindNavigator
通过WindNavigator可浏览源程序代码,用图形化的
方式显示函数调用关系。这样就可快速地进行代码
定位。
47
10. 图形化核心配置工具
WindConfig
通过WindCgnfig所提供的图形向导,Tornado的用
户可以方便地配置VxWorks内核及其组件的参数。
48
Brew SDK
49
Brew SDK是一个用于开发基于Brew的应用程序
的开发环境。使用这个开发环境可在PC机上(需
要Windows NT或Windows 2000操作系统的支持)
为无线设备编写和调试应用程序。待程序开发完
毕后,再下载到无线设备上去。Brew SDK由以下
工具和程序所组成:
模拟器
设备配置器
资源编辑器
模块信息文件编辑器
库函数
Brew头文件
示例应用程序 50
1. Brew模拟器
Brew模拟器用于模拟运行和调试Brew的应用程序。它
能提供与被模拟的手机同样的用户界面,好像应用程序
真正是在实际的手机上运行一样。Brew SDK提供了一
些类型的手机的模拟方案,用户也可以使用Brew的设
备配置器建立其它手机的模拟方案。
51
2. Brew设备配置器
Brew设备配置器用于生成新的设备配置文
件或编辑现有的设备配置文件。可以通过设
备配置文件进行设置的内容有键盘键及其功
能、屏幕的尺寸和分辨率、内存的大小等。
52
3. Brew资源编辑器
Brew资源编辑器用于建立应用程序的资源,
如字符串、图像和对话框等。保存字符串、
图像和对话框等资源的文件的后缀为.bar。
资源编辑器在产生资源内容的同时,还产生
定义资源标识号的.h文件。编译工具在生成
应用程序的.dll文件时需要用到这个.h文件。
53
4. Brew模块信息文件(MIF)
编辑器
Brew模块信息文件(MIF)编辑器用来产生
模块信息文件。模块信息文件包含以下几方
面的内容,模块中应用程序和类的数量、每
个应用程序和类的标识号、应用程序的名称、
应用程序的图标等。注意,在Brew中,一
个模块文件内可以有多个应用程序的信息。
模拟器在装入一个模块文件时要用到它的模
块信息文件。
54
用Brew SDK开发应用程序的过程可分为以下5个步骤:
(1) 使用模块信息文件编辑器建立模块信息文件(.mif
文件)。
(2) 使用Visual C++建立一个新工程,以便建立应用程
序模块文件(.dll文件)。
(3) 将应用程序的源码加入到第2步所建立的新工程当
中去。
(4) 建立应用程序的模块文件。
(5) 启动模拟器调试应用程序模块文件。如果有必要,
在启动模拟器调试应用程序之前还应该用资源编辑器
建立应用程序要用到的资源文件(.bar文件),用设
备配置器建立起要模拟的设备的设备配置文件(.qsc
文件)。 55
用Brew SDK开发应用程序的过程 56
C33编程工具包
C33是EPSON公司推出的一个专门为基于S1C33系列
微控制器芯片的嵌入式系统开发应用程序的软件工
具包。这个工具包里面包括多种工具。C33提供的
软件工具有:
(1) gcc33:C语言编译器;
(2) pp33:预处理器,用于处理宏命令;
(3) ext33:指令扩展器,用于处理S1C33系列的扩
展指令;
(4) as33:汇编程序;
(5) lk33:链接器,用于建立可执行目标程序;
57
(6) dis33:反汇编程序;
(7) db33:调试器,可通过控制硬件工具或调试监
控器进行调试,也可使用模拟程序在宿主机上进行
调试;
(8) hex33:二进制/十六进制转换工具;
(9) lib33:库生成工具;
(10) wb33:集成开发平台,包含了上述所有的工
具;
(11) MON33:调试监控器。调试监控器运行在目标
机上,并与宿主机上的调试器相互通信,达到监控
被调试的应用程序的目的。
58
C33提供的硬件工具有:
(1) ICE33:在线仿真器;
(2) ICD33:片上调试器;
(3) EPOD33:针对不同芯片的仿真器;
(4) MEM33:存储仿真器,可仿真ROM、F1ash和RAM。
59
用C33开发嵌入式软件的过程包括以下6个主要步
骤:
(1) 建立源程序:建立源程序可以使用普通的编
辑器。
(2) 建立make文件:在C33的集成开发平台wb33中
可方便地建立make文件。通过make文件,预处理、
编译、链接等步骤可自动完成。
(3) 执行make文件:执行上一步骤生成的make文
件生成后缀为.sr的目标文件。
(4) 调试目标文件:使用调试器db33调试上一步
生成的目标文件。在调试目标文件时有3种不同的
方式:使用ICE33,使用ICD33,使用调试监控器
MON33。
60
(5) 反汇编:为验证源程序代码与绝对地址之间
的一致性,可利用反汇编工具dis33对一个链接好
的目标文件进行反汇编。反汇编程序的输出是后
缀为.di的列表文件。
(6) 创建ROM数据或掩码数据:利用二进制/十六
进制转换工具hex33,将前面生成的目标文件转换
为目标ROM数据或/和掩码数据,以便将其固化到
基于S1C33芯片的目标机中去。
61
用C33编程工具包开发应
用程序的过程
62
Hopen的应用软件开发环境
Hopen是凯思公司研制的一个嵌入式软件系
统。它由操作系统、软件开发环境、窗口系
统、网络系统、数据库管理系统、Java虚拟
机等多个部分所组成。Hopen系统的应用软
件开发环境又称为Hopen SDK。
63
Hopen SDK的组成
64
Hopen系统提供的调试工具分别是:
仿真调试工具
指令级仿真调试工具
基于监控器的调试工具
仿真调试工具实际上就是我们前面所说的系统调
用级的模拟器。由于一个不太规范的习惯,它被
称为了现在的名字。在3个工具中它使用的最多。
指令级仿真调试工具是一个指令级的模拟器。它
的性能虽然强于仿真调试工具,但只能用来调试
MC68328上的应用程序。基于监控器的调试工具是一个用插桩法来调试嵌
入式应用程序的工具。使用它能观察应用程序在
目标机上的运行效果,但其问题同指令级仿真调
试工具一样,也只能支持少数几种CPU,包括
Motorola MC68328、Winbond 90210/90221和x86
系列的芯片。
65
用Hopen SDK开发应用
软件的过程
在使用Hopen系统的系统调用级模拟器作为调
试工具时,应用软件的开发过程应分为项目
计划、可行性分析、需求分析、概要设计、
详细设计、程序建立、程序调试、重新编译、
程序下载与固化、程序测试、程序运行等11
个阶段。前5个阶段与通常的开发过程相比没
有什么变化。不同之处主要体现在程序建立、
程序调试、重新编译、程序下载与固化、程
序测试、程序运行等几个阶段。
66
1. 程序建立阶段
在Hopen系统中可用C和Java两种语言中的
任何一种来编写应用程序。但在多数情况
下是使用C语言。在此处我们介绍的开发过
程也是针对C语言的。
67
为了帮助软件开发人员编写应用程序,Hopen系统
提供了一整套C语言的API函数,包括操作系统API、
窗口系统API、文件系统API、网络系统API等。此
外Hopen系统还提供了一个C语言库。程序建立阶
段的工作就是利用这些API函数和库函数根据应用
的需求编写出应用程序,并编译成可执行的目标码。
在编写和编译应用程序的时是用Visual C++或
做为开发工具。不过在使用时有几点要特别注
意,第一是在编写应用程序的时候应遵照标准的C
语言规范;第二是除了Hopen系统提供的API函数
和库函数之外不要调用其它的函数,比如Visual
C++的函数;第三是工程的类型应当是Hopen
AppWizard。
68
2. 程序调试阶段和重新编译阶段
由于在调试应用软件之前,不需要将其下载到目标
机之上,所以应用软件被编译为宿主机的目标指令
后,马上就可以用Hopen系统的仿真调试工具对其
进行调试。当应用程序经过反复调试,确认没有错
误之后,就可以将其下载并固化到目标机上面去。
但要注意,在下载之前还必须将应用程序重新编译
成与目标机的CPU相一致的目标码,并对目标码进
行重定位。进行这种编译与重定位一般是使用GNU
的C/C++编译器(gcc)或者是某种与目标机相配套
的编译器。
69
3. 程序下载与固化阶段
由于应用软件在调试之前不需要下载到目标机之
上,所以程序下载和程序固化两个阶段已无再划
分的必要,可以统一为一个"程序下载与固化"阶
段。这个阶段的工作与目标机有密切的关系。这
里我们所说的目标机指专门为开发工作设计的开
发评估板,而不是最终用户所使用的普通硬件设
备。这种开发评估板都提供一定的开发功能(在
软件的支持下)。利用这些功能,开发者可以比
较方便地把应用程序下载和固化到它上面来。下
载和固化的方法对于各种开发评估板是不太一样
的,必需具体地参考它们各自的使用手册。
70
4. 程序测试阶段
应用程序下载到目标机上面之后,就可以按照一
定的测试计划测试它的各种功能。因为在测试阶
段Hopen系统没有提供对应的支撑工具,所以只
能认真地逐一确认程序的每一个功能是否正确。
但由于这时运行的应用程序已经在仿真调试工具
中调试通过,所以通常不会出现错误。如果有错
误,一般都与目标机的硬件环境有关,比如输入
输出设备,中断地址等。这些错误一般要借助目
标机所提供的功能来排除。
71
5. 程序运行阶段
当应用程序在目标机上测试通过之后,整个开发
过程就告结束。剩下的事情就是把应用程序放到
普通的硬件设备上去,宣告进入应用程序的最终
运行阶段。
72
用Visual C++编译应用
软件的方法
当准备用一台PC机充当宿主机,使用它开发
Hopen系统的应用软件之前,必须首先在这
台PC上安装Visual C++和Hopen SDK。注意
安装这两个系统的次序不能颠倒,必须是先
安装Visual C++,后安装Hopen SDK。因为
在安装Hopen SDK时需要为Visual C++增加
两个新的工程类型。这两个工程类型分别是
Hopen AppWizard和Hopen DllWizard。
73
安装应用软件开发环境后Visual C++新增加的工程类型
新增加的工程类型
74
在安装了Visual C++和Hopen系统的应用软件开发环
境之后,可用Visual C++按照下面的步骤建立和编译
应用软件:
(1) 启动Visual C++。
(2) 在 指 定 的 目 录 中 建 立 一 个 类 型 为 Hopen
AppWizard的工程。
(3) 在工程所给出的程序模板中添加程序代码,建立
应用软件的源程序。
(4) 编译应用软件的源程序。如果编译通过,Hopen
AppWizard类型的工程将把应用软件编译为一个.dll
文件。在缺省情况下这个.dll文件被保存在开发环境
的安装目录的app子目录中。
75
用仿真调试工具调试应
用软件的方法
Hopen系统的仿真调试工具是一个在
Windows操作系统下运行的软件。它对
硬件环境的要求不高,在486上有32M内
存就可以正常地运行。
76
仿真调试工具的主窗口
仿真调试工具共有“文件”、“编辑”、“视图”、
“系统”、“调试”、“工具”和“帮助”七个菜
单。
77
Hopen系统的应用软件仿真调试工具向应用
程序的开发者提供了一个与实际的目标机基
本等价的软件运行环境,以及一系列追踪和
发现程序中的错误的手段。通过这个仿真调
试工具,应用程序的开发者可以对在建立阶
段所产生的应用程序进行调试。如果发现程
序中存在着错误,那么就对其进行修改并重
新编译,直至程序中不再有错误为止。
78
使用Hopen系统的仿真调试工具调试应用软
件之前。一般需要对仿真调试工具进行一些
设置。通过这些设置可以使仿真调试工具模
拟不同种类的嵌入式系统,比如联想公司的
PDA——天玑911、海尔公司的智能手机—
—雅典娜6000或者一个机顶盒。这样应用程
序的开发者就可以通过仿真调试工具调试这
些嵌入式系统上的应用程序。
79
1. 设置系统环境选中“系统”菜单中的“系统管理”菜单项,仿真调试工具将打
开一个多页窗口。这个多页窗口中的第一个窗口如本图所示。
通过这个窗口可以设置仿真调试工具所模拟的设备有多大
的内存,可以运行多少个任务(线程)等指标。
80
2. 设置设备
在“系统管理”菜单项打开的多页窗口中,第二个窗口如本图
所示。它里面包含存储器、通讯端口、网络适配器等设备。双
击其中的任何一个设备就会进入对应的设备管理窗口。
81
用于设置RAM的设备管理窗口在这个窗口中可以对RAM的起始地址、容量等指标进行设置。
82
3. 设置链接库
在Hopen系统中,窗口系统、网络系统、Java虚拟机以及类
库是以动态链接库的形式提供给仿真调试工具的。在“系
统管理”菜单项打开的多页窗口中,第三个窗口如本图所
示。通过这个窗口可以指定这个动态链接库位于何处。
83
4. 添加新设备
选中“系统”菜单中的“添加设备”菜单项可以弹出如本图
所示的窗口。通过这个窗口可以为仿真调试工具所仿真的嵌
入式系统增加存储器、通讯端口、遥控器、键盘、鼠标、笔、
显示器、网络适配器等设备。以达到仿真这些设备的目的。
84
5. 设置被仿真设备的外形
选中“系统”菜单中的“外形设置”菜单项可以弹出如本
图所示的窗口。通过这个窗口可以对被仿真的设备的一些
外观属性进行设置,比如它的外形图像、屏幕的高度和宽
度、支持哪些虚拟键等。
85
在针对应用软件所运行的嵌入式系统建立了一个仿
真文件后,就可用仿真工具按照下面的步骤开始应
用程序的调试。
(1) 启动仿真工具。
(2) 选中“文件”菜单中的“打开”菜单项,打开
仿真文件。
(3) 选中“调试”菜单中的“开始”菜单项,开始
调试应用程序。被调试的应用程序应事先用Visual
C++编译为.dll文件,并保存在开发环境的安装目
录的app子目录中。
(4) 在调试工作告一段落之后,可选中“调试”菜
单中的“结束”菜单项,结束对应用程序的调试。
86
仿真调试工具显示的联想天玑911
这台PDA与实际的天玑911有相同的功能。点击它的图标就可
以运行天玑911上面的应用程序。在应用程序运行的过程中,
仿真调试工具会在主窗口上显示出一些信息,以便帮助应用程
序的开发者发现程序中的错误。
87
查看状态窗口
应用程序的开发者还可以选中“调试”菜单中的“查看状态”菜
单项弹出如本图所示的“查看状态窗口”。在“查看状态窗口中
”可以选中“任务状态”、“内存状态”、“内存查看”、“窗
口资源”等菜单项进一步弹出几个窗口,显示任务状态、内存状
态和窗口资源的使用情况,以便帮助开发人员调试应用程序。
88