版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,嵌入式软件的开发环境,嵌入式软件的开发环境显著不同于通用软件 本章主要内容,嵌入式软件的一个重要特点是开发工作难度大。造成这种问题的主要原因是嵌入式系统的资源非常有限,不能完全依靠它自身进行应用程序的开发,而是要借助于其他的计算机系统。这一情况对嵌入式软件的开发环境产生了直接影响,使它与通用软件的开发环境有了很大的不同。,2,嵌入式软件的开发环境,嵌入式软件的开发环境显著不同于通用软件 本章主要内容,嵌入式软件的开发过程 嵌入式软件的建立及其工具 嵌入式软件的下载及其工具 嵌入式软件的调试及其工具 几种典型的嵌入式软件开发环境,3,嵌入式软件的开发难度大于通用软件 嵌入式软件的开发过程不同
2、于通用软件的原因 嵌入式软件的开发需要采用交叉开发模式 嵌入式软件采用交叉开发模式的原因 嵌入式软件开发过程的阶段,#include main() printf(Hello Worldn); ,1 嵌入式软件的开发过程,4,嵌入式软件的开发难度大于通用软件 嵌入式软件的开发过程不同于通用软件的原因 嵌入式软件的开发需要采用交叉开发模式 嵌入式软件采用交叉开发模式的原因 嵌入式软件开发过程的阶段,但在嵌入式计算机上问题就不那么简单了。应用程序的开发者必须考虑许多在通用计算机上不曾遇到的问题:例如,怎样调试应用程序,怎样把编写好的应用程序放到嵌入式计算机上,应用程序应当放到什么位置上,怎样在嵌入式
3、计算机上启动应用程序运行等。所以为嵌入式系统开发应用程序的过程与为通用计算机开发应用软件的过程有不少的不同之处,出现了一些在通用计算机上不曾有的工作阶段。在同样的一个工作阶段,具体的工作也有很多不同。,1 嵌入式软件的开发过程,5,嵌入式软件的开发难度大于通用软件 嵌入式软件的开发过程不同于通用软件的原因 嵌入式软件的开发需要采用交叉开发模式 嵌入式软件采用交叉开发模式的原因 嵌入式软件开发过程的阶段,嵌入式软件的开发过程不同于通用软件的原因主要是由于嵌入式软件的开发环境和通用软件的开发环境之间有很大的差异。通用软件的开发环境和运行环境是基于同样或类似的硬件平台。而嵌入式软件的开发环境和运行环
4、境则有明显区别。其开发环境由宿主机、目标机以及连接宿主机和目标机的装置共同组成。宿主机上面有比较丰富的软件和硬件资源。通常是用PC机做宿主机,也有使用工作站的情况。目标机是CPU和操作系统都与最终的嵌入式系统产品相同的开发评估板。CPU芯片的生产厂商或一些专门的开发商会提供这种开发评估板。宿主机和目标机之间可以通过串行端口、并行端口或以太网相连,也可以通过某个很复杂的装置相连接(如在线仿真器)。,1 嵌入式软件的开发过程,6,嵌入式软件的开发难度大于通用软件 嵌入式软件的开发过程不同于通用软件的原因 嵌入式软件的开发需要采用交叉开发模式 嵌入式软件采用交叉开发模式的原因 嵌入式软件开发过程的阶
5、段,嵌入式软件的开发环境中,开发工作需要采用交叉开发模式。应用程序的编辑、编译、链接等过程都在宿主机上完成。而应用程序要在和宿主机有很大差别的目标机上实际运行。应用程序的调试主要是在宿主机上进行,但在大多数情况下要借助于目标机。,1 嵌入式软件的开发过程,7,嵌入式软件的开发难度大于通用软件 嵌入式软件的开发过程不同于通用软件的原因 嵌入式软件的开发需要采用交叉开发模式 嵌入式软件采用交叉开发模式的原因 嵌入式软件开发过程的阶段,在嵌入式软件的开发环境中需要采用交叉开发模式的原因主要有两个:其一是目标机资源有限,仅靠目标机不能进行软件的开发工作。其二是由于宿主机和目标机二者间有显著的差别。这种
6、差别主要来自两个方面:一是硬件的差别。比如,有可能宿主机的CPU为酷睿2,而目标机的CPU则是ARM9。二是软件的差别。比如,有可能宿主机上的操作系统是Windows 2000,而目标机的操作系统是C/OS,还有可能目标机就是一台裸机,根本没有操作系统。,1 嵌入式软件的开发过程,8,嵌入式软件的开发难度大于通用软件 嵌入式软件的开发过程不同于通用软件的原因 嵌入式软件的开发需要采用交叉开发模式 嵌入式软件采用交叉开发模式的原因 嵌入式软件开发过程的阶段,1 嵌入式软件的开发过程,嵌入式软件的开发过程可分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、程序下载、程序调试、程序固
7、化、程序测试等10个阶段。,9,嵌入式软件开发过程的阶段 项目计划、可行性分析、需求分析、概要设计、详细设计 程序建立 程序下载、程序调试 程序固化 程序测试,1 嵌入式软件的开发过程,项目计划、可行性分析、需求分析、概要设计、详细设计等几个阶段的工作与通用软件没有显著的区别。都是按照一般的软件工程方法来进行。如采用原型化方法、结构化方法、面向对象方法等。这几个阶段的工作成果是一些文档。产生这些文档的过程完全是在宿主机上进行,不需要使用目标机。但要注意的是:由于嵌入式软件具有专用性强、系统精简、与硬件依赖性强、实时性强等一些不同于通用软件的特点,所以在上述开发阶段中一定要考虑这些特点会给工作带
8、来什么影响。,10,嵌入式软件开发过程的阶段 项目计划、可行性分析、需求分析、概要设计、详细设计 程序建立 程序下载、程序调试 程序固化 程序测试,1 嵌入式软件的开发过程,程序建立阶段的工作是根据详细设计阶段所编写的文档产生出程序的可执行文件。这一阶段的工作又可分为源代码编写、编译、链接、定址等几个子阶段。这些阶段的工作都是在宿主机上进行,也不需要使用目标机。,11,嵌入式软件开发过程的阶段 项目计划、可行性分析、需求分析、概要设计、详细设计 程序建立 程序下载、程序调试 程序固化 程序测试,1 嵌入式软件的开发过程,源代码编写阶段的工作任务是使用适当的程序设计语言编写程序的源代码,比如说用
9、C语言,C+语言、汇编语言等。程序的源代码经交叉编译或汇编工具处理后产生出的是程序的目标文件。目标文件再经过链接工具的处理将产生一个“可重定位”的程序文件。对于通用计算机上的软件来说,到此为止建立程序的工作已经完成,但对于许多嵌入式软件来说,要使“可重定位”的程序文件变成可执行的程序文件还必须做一件事,那就是为它的代码和数据指定存储地址。指定存储地址这项工作就是定址阶段要完成的任务。,12,嵌入式软件开发过程的阶段 项目计划、可行性分析、需求分析、概要设计、详细设计 程序建立 程序下载、程序调试 程序固化 程序测试,1 嵌入式软件的开发过程,产生程序的可执行文件后,接着要做的工作是对这个程序进
10、行调试,检查它是否有错误并确定错误的位置。调试程序的方法有多种。例如,直接测试法、驻留程序法、插桩法、ROM仿真器法、在线仿真器法、在线调试器法、模拟器法等。在采用某些调试方法时,必须先将被调试的程序下载到目标机之上,而有些方法则是直接在宿主机上进行调试,不必下载程序。在需要进行下载时,一般是把程序下载到目标机的RAM上。当然,也可以采用某种仿真的方法,比如利用ROM仿真器。但是,无论是采用什么调试方法,嵌入式软件的调试都与通用软件有较大的区别。,13,嵌入式软件开发过程的阶段 项目计划、可行性分析、需求分析、概要设计、详细设计 程序建立 程序下载、程序调试 程序固化 程序测试,1 嵌入式软件
11、的开发过程,固化阶段的工作是将调试无误的可执行程序固化到目标机上,以便测试和运行。根据嵌入式系统的硬件配置情况,固化方式有多种。可以固化在EPROM中,也可以固化在闪存中。,14,嵌入式软件开发过程的阶段 项目计划、可行性分析、需求分析、概要设计、详细设计 程序建立 程序下载、程序调试 程序固化 程序测试,1 嵌入式软件的开发过程,固化在EPROM中的方法是使用EPROM编程器。EPROM编程器上有各种形状和大小的芯片插座。它可以通过接口与宿主机连在一起。在进行固化时,一般是先把EPROM芯片插入到EPROM编程器上某个大小合适的插座上,并通过软件选择芯片的型号,然后将被固化的程序文件传到EP
12、ROM编程器上。整个固化过程可能需要几秒钟到几分钟,这要看程序文件的大小和芯片的型号。在早期把可执行程序固化到EPROM中的情况比较普遍,目前一般是将其固化在闪存里面。在这种情况下固化的过程要简单许多。,15,嵌入式软件开发过程的阶段 项目计划、可行性分析、需求分析、概要设计、详细设计 程序建立 程序下载、程序调试 程序固化 程序测试,1 嵌入式软件的开发过程,与通用软件相类似,嵌入式软件也有白盒测试与黑盒测试两种测试方法。白盒测试是一种基于代码的测试,它的目的是检查程序的内部设计。进行这种测试一般要求测试人员对软件的结构和作用有详细的了解。测试的要求是能够覆盖尽可能多的程序代码。由于嵌入式系
13、统对安全性和可靠性的要求比通用计算机系统高,所以在对嵌入式软件进行白盒测试时,也要求有更高的代码覆盖率。,16,嵌入式软件开发过程的阶段 项目计划、可行性分析、需求分析、概要设计、详细设计 程序建立 程序下载、程序调试 程序固化 程序测试,1 嵌入式软件的开发过程,黑盒测试也称为功能测试。这种测试方法根据软件的用途和外部特征查找软件的缺陷,不需要了解程序的内部结构。它的最大特点是不依赖代码,而从实际应用的角度进行测试。因为黑盒测试与需求密切相关,所以通过黑盒测试可以发现白盒测试发现不了的问题。,17,2 嵌入式软件的建立及其工具,根据程序的详细设计文档建立程序的可执行文件的过程一般要经过4个阶
14、段: 源代码编写 编译 链接 定址,18,2 嵌入式软件的建立及其工具,在程序建立阶段要用到源代码编辑工具、交叉编译(汇编)工具、链接工具、定址工具等一系列工具。这些工具都在宿主机上运行,与目标机无关。,19,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题,源代码编写阶段的工作任务是使用适当的程序设计语言编写程序的源代码。比如说用C语言、C+语言、汇编语言等。在目前使C语言的情况最常见。,20,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题,在编写嵌入式软件的源代码的时候有许多问题与编写通用软件的源代码时有所不同,要特
15、别加以注意,否则就会带来一些意想不到的错误。源代码的可移植性问题和代码的共享与可重入问题就是其中的两个典型问题。,21,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题 1. 源代码的可移植性问题 2. 代码的共享与可重入问题,在嵌入式系统中,影响软件可移植性的因素远比通用计算机中多。若想使嵌入式软件有良好的可移植性,能适应多种硬件平台的要求,那么就要在编写程序时对一些细小的问题加以注意。,22,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题 1. 源代码的可移植性问题 实例之一 实例之二 2. 代码的共享与可重入问题,
16、嵌入式系统的处理器种类很多,8位、16位、32位的处理器都在使用。一个int型的变量在16位的处理器上占2个字节,在32位的处理器上则占4个字节。所以如果直接用int型的变量作位运算,在不同的硬件平台上就会产生不同的结果。,23,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题 1. 源代码的可移植性问题 实例之一 实例之二 2. 代码的共享与可重入问题,在通用计算机上,只要在编写源代码时使用标准的C函数(GB/T 15272定义的C函数)一般就能保证程序的可移植性。但在嵌入式系统上就有可能行不通,比如printf这个函数是将输出的内容送到标准输出设备上去。
17、在通用计算机上,标准输出设备是显示屏幕,但一个嵌入式系统的标准输出设备是什么并没有统一的规定。在不同的嵌入式系统上,标准输出设备并不见得相同。执行printf函数完全有可能产生不同的结果。,24,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题 1. 源代码的可移植性问题 2. 代码的共享与可重入问题 什么是共享代码和可重入代码 什么情况下要求代码可重入 编写嵌入式软件时应当注意可重入问题 怎样使代码可重入,被多个程序并发调用的代码称为共享代码。共享代码必须是可重入的。可重入代码满足以下的要求:它的执行过程可以被打断,并在被打断处继续执行,而代码的执行结果却
18、不受影响。当一段代码可被多个程序调用,并且调用它的程序并发运行的时候就要求这一段代码是可重入的,否则,当多个程序并发调用它的时候就会发生冲突,产生错误的结果。,25,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题 1. 源代码的可移植性问题 2. 代码的共享与可重入问题 什么是共享代码和可重入代码 什么情况下要求代码可重入 编写嵌入式软件时应当注意可重入问题 怎样使代码可重入,在编程的实践中主要有4种要求代码可重入的典型情况:其一,中断服务程序的代码必须是可重入的(因为在允许中断嵌套的情况下中断服务程序有可能被并发调用)。其二,在多线程环境中可能被多个线程
19、调用的函数必须是可重入的。(多进程条件下的应用程序代码不需要是可重入的,因为这些代码属于不同的进程,都是在自己的地址空间中运行,相互之间不会发生调用。)其三,动态链接库的代码必须是可重入的。其四,操作系统内核的代码必须是可重入的。,26,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题 1. 源代码的可移植性问题 2. 代码的共享与可重入问题 什么是共享代码和可重入代码 什么情况下要求代码可重入 编写嵌入式软件时应当注意可重入问题 怎样使代码可重入,因为在嵌入式系统中为了达到节约存储空间的目的,更需要一个子程序的拷贝被多个不同的任务(线程)调用,同时也有更多
20、的情况需要软件开发者编写中断服务程序。因此,在开发嵌入式软件的时候,特别是编写中断服务程序的时候,需要软件开发者对程序代码的可重入问题加以注意。,27,2.1 源代码编写阶段,源代码编写阶段的任务 编写嵌入式软件时可能会遇到某些特殊问题 1. 源代码的可移植性问题 2. 代码的共享与可重入问题 什么是共享代码和可重入代码 什么情况下要求代码可重入 编写嵌入式软件时应当注意可重入问题 怎样使代码可重入,在编程时使一个函数成为可重入函数的常用方法有3种。它们分别是使用局部变量、使用信号量保护全局变量或静态变量、使用任务变量。,28,2.1 源代码编写阶段,怎样使代码可重入 使用局部变量 使用信号量
21、保护全局变量或静态变量 使用任务变量,因为局部变量是在当前任务的堆栈中分配存储空间,函数的不同运行实例引用的是不同的地址。因此一个函数如果只使用局部变量就可以保证不会发生冲突,使代码可重入。,29,2.1 源代码编写阶段,怎样使代码可重入 使用局部变量 使用信号量保护全局变量或静态变量 使用任务变量,char sSIZE; char*ctime_a(const time_t* clock) .*/将字符串放入s中*/ return(s); 函数ctime_a( )的功能是将参数clock表示的时间转换成字符串,并返回这个字符串。它将将字符串保存在全局数组s中。由于在函数调用结束后,全局数组所占
22、用的存储单元不释放,原值仍然保留。因此,不同任务在调用函数ctime_a( )时,都将使这个函数修改同一数组的值,因此ctime_a( )不是一个可重入的函数。,30,2.1 源代码编写阶段,怎样使代码可重入 使用局部变量 使用信号量保护全局变量或静态变量 使用任务变量,char*ctime_b(const time_t* clock, char*s, int buflen) .*/将字符串放入s中*/ return(s); 函数ctime_b( )的功能与函数ctime_a( )相同,但它用函数的参数s作指向字符串的指针,实际的字符串缓冲区则由函数的调用者来分配,不同的调用者修改各自的缓冲区
23、,不会相互冲突。因此ctime_b( )是一个可重入的函数。,31,2.1 源代码编写阶段,怎样使代码可重入 使用局部变量 使用信号量保护全局变量或静态变量 使用任务变量,使用信号量保护全局变量或静态变量这种方法所采用的措施是使用P操作和V操作使访问全局变量或静态变量的代码段成为互斥代码段。,32,2.1 源代码编写阶段,怎样使代码可重入 使用局部变量 使用信号量保护全局变量或静态变量 使用任务变量,任务变量是操作系统提供的一种用于实现可重入函数的机制。使用这种机制的前提是嵌入式操作系统能支持这种机制。有许多嵌入式操作系统可以支持这种机制,例如VxWorks操作系统就支持任务变量,但也有不支持
24、这种机制的嵌入式操作系统。,33,2.2 编译阶段,编译阶段的任务 编译阶段常用的工具 编译阶段产生的结果,编译阶段要做的工作是用交叉编译或交叉汇编工具处理程序的源代码,产生目标文件。当宿主机和目标机采用同样类型的处理器时,没有“交叉”的问题。这是一个特例。此时编译阶段的工作要简单些。,34,2.2 编译阶段,编译阶段的任务 编译阶段常用的工具 编译阶段产生的结果,GNU C/C+(gcc)是一种目前比较常用的交叉编译器。它可支持非常多的宿主机/目标机组合。,35,2.2 编译阶段,编译阶段的任务 编译阶段常用的工具 编译阶段产生的结果,交叉编译器所产生的目标文件并不能直接运行。它里面的所包含
25、的内容像是一个很大的、灵活的数据结构。目前有不少有关目标文件格式的标准。比如“通用对象文件格式”(COFF)和“扩展的链接器格式”(ELF)。这两种格式GNU C/C+编译器都可以支持。大多数目标文件以一个描述后续段的头部开始,后面是各个段,如代码段、全局数据段等。,36,2.2 编译阶段,编译阶段的任务 编译阶段常用的工具 编译阶段产生的结果,通常在目标文件里还有一个符号表,它记录了源文件引用的所有变量和函数的名字以及位置。因为不是所有的变量和函数都总是在同一个文件里定义,同一个文件里引用,所以这个表的内容可能不完整,常常只是记录了在文件里引用了哪些变量和函数,而没有这些变量和函数的定义。要
26、一直到进行链接的时候才会解决这些不完整的引用。,37,2.3 链接阶段,链接阶段的任务 链接阶段产生的结果,交叉编译器所产生的目标文件是不完整的,它里面可能还有未定义的内部变量和函数引用。链接阶段的工作是用链接工具把目标文件组合到一起,使所有未定义的变量和函数在程序库或其它目标文件中找到它的定义。,38,2.3 链接阶段,链接阶段的任务 链接阶段产生的结果,链接阶段得到的结果是一个“可重定位”的可执行文件。其中包含了来自输入文件的所有代码和数据。链接工具通过合并输入文件里的代码段、数据段来完成这一工作。链接完成后,所有输入文件里的目标代码将出现在输出文件的代码段里,所有变量将出现在输出文件的数
27、据段里。如果在多个目标文件里都定义了同一个符号,链接工具将会报出错误信息。与此相反,如果所有目标文件都处理完之后还有找到某个符号的定义,链接工具将通过标准库来解决这个符号的引用问题。如果在标准库中仍未找到这个符号的定义,链接工具也将报出错误信息。,39,定址阶段的任务 定址阶段产生的结果 一部分嵌入式系统不需要在开发阶段进行定址,2.4 定址阶段,对相当一部分嵌入式系统来说,在软件的开发过程中要使链接工具输出的“可重定位”文件变成可以下载到目标机上面去执行的文件还必须做一件事,那就是为“可重定位”文件中的代码和数据指定存储地址。指定存储地址这项工作在定址阶段通过定址工具来完成。,40,定址阶段
28、的任务 定址阶段产生的结果 一部分嵌入式系统不需要在开发阶段进行定址,2.4 定址阶段,定址工具的输入是“可重定位”的可执行文件,输出是“绝对定位”的可执行文件。它们二者之间的转换由定址工具自动完成,但应用程序的开发者必须向定址工具提供有关目标机存储器的信息。定址工具将用这些信息来为“可重定位”文件里的每一个代码段和数据段指定物理存储地址。 定址工具所产生的“绝对定位”的可执行文件已经可以固化到目标机上去运行。到此为止,在幸运的情况下整个开发过程就已完成。但这几乎是不可能的,一个程序总要经过反复的调试才能得到正确的结果。,41,定址阶段的任务 定址阶段产生的结果 部分嵌入式系统不需要在开发阶段
29、进行定址,2.4 定址阶段,对于通用计算机系统来说,在开发阶段不需要做定址这一项工作。通用计算机系统的操作系统都能够支持程序的动态装载和动态重定位。为程序分配物理存储空间的工作在程序执行前由操作系统根据当时内存的使用情况动态完成。程序的逻辑地址到物理地址的转换则在程序执行时完成。,42,定址阶段的任务 定址阶段产生的结果 部分嵌入式系统不需要在开发阶段进行定址,2.4 定址阶段,目前虽然有一部分嵌入式操作系统像通用计算机的操作系统一样也能支持动态重定位,但也有一部分嵌入式操作系统不能支持这种功能。此外,还有一部分嵌入式系统上面根本没有操作系统。在嵌入式操作系统不能支持动态重定位的情况下,为代码
30、和数据指定物理存储地址的工作就只能在开发阶段完成。对于这些嵌入式操作系统来说,整个嵌入式系统的软件,包括操作系统在内,要静态地链接在一起,并确定存储地址,然后一起下载到目标机上去运行。对没有操作系统的情况就更需要由开发者为程序指定物理存储地址。,43,3 嵌入式软件的下载及其工具,程序下载阶段的任务 程序下载的常用工具 驻留程序及其程序下载,程序下载就是把在宿主机上生成的可执行文件放到目标机的RAM存储器或者闪存之中去,以便进行调试和运行。,44,3 嵌入式软件的下载及其工具,程序下载阶段的任务 程序下载的常用工具 驻留程序及其程序下载,程序下载的常用工具有ROM仿真器、在线仿真器、在线调试器
31、、调试器/调试监控器、目标机驻留程序等几种。前3种工具都是硬件设备,购买这些工具需要花费较多的资金。调试器/调试监控器是一个软件工具,价格相对低廉很多,有时还能免费获得。使用ROM仿真器、在线仿真器、在线调试器、调试器/调试监控器等工具下载软件的方法一般很简单,通常只要输入一两个命令就可以完成。具体命令在工具的使用手册中会有详细的说明。,45,3 嵌入式软件的下载及其工具,程序下载阶段的任务 程序下载的常用工具 驻留程序及其程序下载 什么是驻留程序 驻留程序的使用方式 使用驻留程序进行程序下载的步骤 驻留程序的其他功能,在用来开发嵌入式软件的开发评估板上都驻留有一些帮助进行软件开发的程序。只要
32、购买了开发评估板就自然地得到了这种程序。这种程序提供了进行程序下载、程序固化、程序调试等方面的功能。在很多文献资料上这种驻留程序被称为bootloader程序。,46,3 嵌入式软件的下载及其工具,程序下载阶段的任务 程序下载的常用工具 驻留程序及其程序下载 什么是驻留程序 驻留程序的使用方式 使用驻留程序进行程序下载的步骤 驻留程序的其他功能,bootloader程序需要有一个与之配合的宿主机端软件。这个宿主机端软件可以起到为bootloader程序提供人机交互界面的作用。bootloader程序在启动之后就等待和宿主机端软件进行连接。在这种连接建立之后,就可以通过宿主机端软件向bootlo
33、ader程序输入命令。bootloader程序一般都提供了一个处理的交互命令集,通过这个交互命令集中的命令就可以实现对目标机的控制。例如,可以输入go命令运行存储在闪存中的程序,输入fast命令提高目标机端的通信速率。,47,3 嵌入式软件的下载及其工具,程序下载阶段的任务 程序下载的常用工具 驻留程序及其程序下载 什么是驻留程序 驻留程序的使用方式 使用驻留程序进行程序下载的步骤 驻留程序的其他功能,在效果上目标机相当于是一台服务器,宿主机是一台终端。宿主机端软件和bootloader程序之间的通信方式没有统一的规定,一般由bootloader程序自己决定。但几乎所有的bootloader程
34、序都支持X-Modem协议,因此可以通过串口实现宿主机端软件和bootloader程序间的连接。许多bootloader程序并不需要专门的宿主机端软件,而是可以使用标准的终端程序作为宿主机端软件。比如使用Linux下的minicom、kermit或Windows下的“超级终端程序”做宿主机端软件。,48,3 嵌入式软件的下载及其工具,程序下载阶段的任务 程序下载的常用工具 驻留程序及其程序下载 什么是驻留程序 驻留程序的使用方式 使用驻留程序进行程序下载的步骤 驻留程序的其他功能,在宿主机上生成一个可执行文件之后,就可以使用bootloader程序将这个可执行文件下载到目标机上去。宿主机端软件
35、和bootloader程序一般是通过串口相互连接。当然也可以通过以太网相连接。在使用串口相连接时,下载程序的工作可分为以下几个步骤: (1) 用串口线连接宿主机和开发评估板的串口。 (2) 在宿主机上启动宿主机端软件。当使用以Windows为操作系统的PC机做宿主机时,通常以超级终端程序做宿主机端软件。,49,3 嵌入式软件的下载及其工具,程序下载阶段的任务 程序下载的常用工具 驻留程序及其程序下载 什么是驻留程序 驻留程序的使用方式 使用驻留程序进行程序下载的步骤 驻留程序的其他功能,(3) 在目标机上按复位键,重新启动目标机。目标机被重新启动后,将自动执行驻留在ROM中的bootloade
36、r程序。(一些开发评估板可以通过跳线选择系统重新启动后从不同的地址开始运行。) (4) 将宿主机的串口和目标机的串口设置为相同的传输速率。在设置时应选择尽可能高的速率,以节省程序下载所花费的时间。设置目标机串口传输速率的方法是通过超级终端程序输入相应的命令。,50,3 嵌入式软件的下载及其工具,程序下载阶段的任务 程序下载的常用工具 驻留程序及其程序下载 什么是驻留程序 驻留程序的使用方式 使用驻留程序进行程序下载的步骤 驻留程序的其他功能,(5) 在宿主机上通过超级终端程序输入bootloader程序的命令,将开发评估板设置为等待接收下载程序状态,并指定程序下载的位置。 (6) 在宿主机上发
37、出下载命令。开始进行程序下载。,51,3 嵌入式软件的下载及其工具,驻留程序的其他功能 (1) 初始化处理器 (2) 初始化必要的硬件 (3) 进行程序固化 (4) 启动已经下载到目标机上的程序 (5) 支持程序调试,初始化处理器指对处理器中的一些寄存器进行初始化。例如,如果需要CPU能够支持内存管理单元(MMU)的话,就必须对某些寄存器做适当的设置。,52,3 嵌入式软件的下载及其工具,驻留程序的其他功能 (1) 初始化处理器 (2) 初始化必要的硬件 (3) 进行程序固化 (4) 启动已经下载到目标机上的程序 (5) 支持程序调试,有一些硬件是下载和运行程序时所不可缺少的,例如内存、中断控
38、制器、串口、以太网接口等。Bootloader程序必须对它们进行初始化。,53,3 嵌入式软件的下载及其工具,驻留程序的其他功能 (1) 初始化处理器 (2) 初始化必要的硬件 (3) 进行程序固化 (4) 启动已经下载到目标机上的程序 (5) 支持程序调试,程序固化与程序下载很类似,都是把程序从宿主机上放到目标机上面去。但程序固化是把已经调试完毕的程序放到闪存或EPROM中,以便运行。而程序下载则一般指把程序存到RAM中,以便进行调试。当然,在调试程序时也可以把程序放到闪存中。不过一般不鼓励这样做,因为闪存有写入次数的限制,反复对其进行写入,将使它受到损坏。对大多数bootloader程序来
39、说,只要硬件条件允许,都提供了将宿主机上的程序写入到闪存中的命令。,54,3 嵌入式软件的下载及其工具,驻留程序的其他功能 (1) 初始化处理器 (2) 初始化必要的硬件 (3) 进行程序固化 (4) 启动已经下载到目标机上的程序 (5) 支持程序调试,使用bootloader可以对已经下载的程序进行初始化,启动它运行。在启动被下载的程序时,可以指定启动地址。被启动的程序可以在RAM中,也可以在闪存中。,55,3 嵌入式软件的下载及其工具,驻留程序的其他功能 (1) 初始化处理器 (2) 初始化必要的硬件 (3) 进行程序固化 (4) 启动已经下载到目标机上的程序 (5) 支持程序调试,将bo
40、otloader程序和宿主机端软件(例如Windows上的超级终端程序)相连接后,宿主机端软件对目标机来说就好比是一个终端,只要将串口定义为标准输出设备,目标机上的程序输出到标准输出设备上的内容就可以通过宿主机端软件显示出来。这样,只要在应用程序中将一些重要的信息用printf语句显示出来就可以帮助进行应用程序的调试。,56,4 嵌入式软件的调试及其工具,嵌入式软件的调试方法与通用软件有明显差异 嵌入式软件的常用调试方法,调试是软件开发过程中必不可少的重要环节。通用计算机系统与嵌入式系统的调试环境存在明显差异。对通用计算机来说,调试工具与被调试的程序位于同一台计算机上。调试工具可以直接控制被调
41、试的程序。而在嵌入式系统中,由于资源非常有限,不能在它上面运行调试工具,导致调试工具与被调试的程序无法在同一台计算机上面运行。所以不得不采用其它的方法来调试新开发的程序。,57,4 嵌入式软件的调试及其工具,嵌入式软件的调试方法与通用软件有明显差异 嵌入式软件的常用调试方法,在嵌入式软件的开发实践中,经常采用的调试方法有直接测试法、驻留程序法、插桩法、ROM仿真器法、在线仿真器法、在线调试器法、模拟器法等若干种。,58,4.1 直接测试法,直接测试法需要的条件和适应的情况 使用直接测试法开发嵌入式软件的基本步骤 直接测试法的特点,直接测试法是嵌入式系统发展早期经常采用的一种调试方法。原因是这种
42、方法需要的开发工具非常简单,只有编辑工具、交叉编译工具、EPROM编程器、紫外线擦除器等一些最基本的工具,比较适合当时的实际情况。,59,4.1 直接测试法,直接测试法需要的条件和适应的情况 使用直接测试法开发嵌入式软件的基本步骤 直接测试法的特点,(1)在宿主机上编写程序的源代码; (2)在宿主机上用交叉编译工具对程序的源代码进行编译,生成可执行程序; (3)将可执行程序固化到EPROM中; (4)将EPROM插到目标机的插座上; (5)在目标机上启动程序运行,若程序运行正确,则转到第(8)步; (6)在宿主机上修改程序的源代码,纠正错误; (7)转到第(2)步; (8)程序开发完成。,60
43、,4.1 直接测试法,直接测试法需要的条件和适应的情况 使用直接测试法开发嵌入式软件的基本步骤 直接测试法的特点,从其开发步骤可以看出,直接测试法基本无法监测程序的运行过程。虽然也有人针对这种方法提出了一些调试窍门,比如利用目标机上的LED指示灯来判断程序的运行状态等,但这些窍门的效力实在是太微不足道了。所以一个程序如果在运行时没有产生预想的效果,开发者就只能通过检查程序的源代码来发现问题。因此这种调试方法的效率很低下,开发人员也非常辛苦。但由于开发条件和开发工具的限制,在嵌入式系统的早期阶段,程序的开发只能采用这种方法。目前在开发一个全新的嵌入式系统的时候甚至还要采用这种方法。,61,使用驻
44、留程序法需要的条件 驻留程序法的工作原理 使用驻留程序法开发嵌入式软件的基本步骤 驻留程序法的优点,由于在用来开发嵌入式软件的开发评估板上一般都有驻留程序,可以用来做宿主机端软件的超级终端程序在Windows操作系统中也必备的软件。所以使用驻留程序法的条件很容易具备。但在使用这种方法之前,还需要做一些必要的设置。如果宿主机和开发评估板是通过串口相连接,那么就需要把串口定义为标准输出设备。如果宿主机和开发评估板是通过并口相连接,那么就需要把并口定义为标准输出设备。其它以此类推。各种嵌入式操作系统将某一设备定义为标准输出的方法不太相同,当目标机的操作系统是嵌入式Linux时,是在文件/etc/in
45、ittab中进行定义。,4.2 驻留程序法,62,使用驻留程序法需要的条件 驻留程序法的工作原理 使用驻留程序法开发嵌入式软件的基本步骤 驻留程序法的优点,完成上面的设置之后,通过宿主机端软件就可以输入控制目标机的命令。目标机上的程序输出在标准输出设备上的内容也可以通过宿主机端软件显示出来。这样,只要在被调试的程序中将一些重要的信息用printf语句显示出来就可以监测程序的运行过程。,4.2 驻留程序法,63,使用驻留程序法需要的条件 驻留程序法的工作原理 使用驻留程序法开发嵌入式软件的基本步骤 驻留程序法的优点,4.2 驻留程序法,(1)在宿主机上编写程序的源代码。在编写源代码时应根据需要插
46、入若干printf语句,目的是通过宿主机端软件显示某些变量的值,以便监测程序的运行过程; (2)在宿主机上编译程序的源代码,生成可执行程序; (3)将可执行程序的代码通过bootloader程序提供的功能下载到目标机的RAM之中; (4)通过bootloader程序提供的功能启动被调试的程序运行; (5)如果程序运行正确,则去掉插入在程序中的printf语句,重新编译后转到第(9)步;,64,使用驻留程序法需要的条件 驻留程序法的工作原理 使用驻留程序法开发嵌入式软件的基本步骤 驻留程序法的优点,(6)借助于用printf语句显示信息发现程序中的错误; (7)在宿主机上修改程序的源代码,纠正错
47、误; (8)转到第(2)步; (9)通过bootloader程序提供的功能将调试正确的可执行程序固化到目标机的闪存之中,程序开发完成。,4.2 驻留程序法,65,使用驻留程序法需要的条件 驻留程序法的工作原理 使用驻留程序法开发嵌入式软件的基本步骤 驻留程序法的优点 优点之一 优点之二,4.2 驻留程序法,驻留程序法是一种比较简陋的调试方法。调试环境只提供了一在程序运行过程中输出信息的基本途径。具体要输出哪些信息必须由程序开发者自己在程序中增加printf语句。其过程是比较繁琐的。但驻留程序法也有两个十分明显的优点。,66,使用驻留程序法需要的条件 驻留程序法的工作原理 使用驻留程序法开发嵌入
48、式软件的基本步骤 驻留程序法的优点 优点之一 优点之二,4.2 驻留程序法,相对于直接测试法,驻留程序法向程序的开发人员提供了一种在程序运行的过程中获取变量值的基本途径,使程序的开发人员有了监测程序运行过程的可能。,67,使用驻留程序法需要的条件 驻留程序法的工作原理 使用驻留程序法开发嵌入式软件的基本步骤 驻留程序法的优点 优点之一 优点之二,4.2 驻留程序法,采用驻留程序法时,需要的软件和硬件环境简单,建立调试环境的花费很低廉。目前多数的开发评估板上都这种驻留程序,而且宿主机端软件也很现成。当宿主机的操作系统是Linux时,可以采用minicom或kermit作为宿主机端软件,当宿主机的
49、操作系统是Windows时,可以采用超级终端程序作为宿主机端软件。完全不需要购置额外的软件工具。,68,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之五 插桩法的改进,插桩法又叫调试监控器法。采用这种调试方法时,在目标机的操作系统和宿主机的调试器上要分别添加一个功能模块。通过这两个功能模块的互通信就可实现对程序的调试。加在目标机操作系统上的功能模块叫“桩”,也叫调试监控器。它有以下两方面的功能:其一,监视和控制被调试的程序。其二,监视和控制与宿主机的通信。加在宿主机上的通信模块的作用是和调试监控器相通信。,4.3
50、 插桩法,69,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之五 插桩法的改进,在进行调试的时候,软件的调试人员可以通过宿主机上的调试器发出各种命令,实现读写目标机的内存和寄存器、下载程序、单步执行和设置断点等功能。调试监控器则监测目标机与宿主机之间的通信链路,对来自宿主机上的命令做出响应。来自宿主机的请求和调试监控器的响应都按照某种预先定义好的通信协议进行传递。,4.3 插桩法,70,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之
51、五 插桩法的改进,4.3 插桩法,(1)在宿主机上编写程序的源代码; (2)在宿主机上编译程序的源代码,生成可执行程序; (3)将可执行程序的代码下载到目标机的RAM上; (4)在调试器的控制下运行被调试的程序; (5)如果程序运行正确,则转到第(9)步; (6)在调试器的帮助下定位错误; (7)在宿主机上修改程序的源代码,纠正错误; (8)转到第(2)步; (9)将可执行程序固化到目标机上,程序开发完成。,71,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之五 插桩法的改进,4.3 插桩法,相对直接测试法而言,
52、插桩法明显地提高了程序调试的效率,减小了调试的难度,缩短了产品的开发周期,而且这的种方法的成本也比较低廉,基本上不需要专门的调试硬件支持。,72,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之五 插桩法的改进,4.3 插桩法,调试监控器本身的开发是一个难题。它与操作系统以及CPU密切相关,通常只能用直接测试法来开发。,73,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之五 插桩法的改进,4.3 插桩法,调试监控器要在目标机上占用一定
53、数量的资源,如:CPU时间、ROM和RAM空间、串口和网卡等通信设备。,74,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之五 插桩法的改进,4.3 插桩法,当调试监控器占用CPU时,应用程序不能响应外部中断。因此,不便采用这种方法调试有时间特性的程序。,75,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之五 插桩法的改进,4.3 插桩法,若目标机的CPU不支持设置硬件断点的功能,则调试监控器也无法提供设置断点的功能。,76,插桩法
54、的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 缺点之一 缺点之二 缺点之三 缺点之四 缺点之五 插桩法的改进,4.3 插桩法,在调试过程中,被调试的程序实际上是在调试监控器所提供的环境下运行。这个环境可能会与应用程序的最终运行环境有一定差异。例如,程序初始化部分的代码、内存空间的分配都与最终的运行环境不同。这种差异可能会导致调试通过的程序仍然不能在最终的目标环境中运行。,77,插桩法的工作原理 使用插桩法开发嵌入式软件的基本步骤 插桩法的优点 插桩法的缺点 插桩法的改进,4.3 插桩法,插桩法虽然有这样和那样的不足,但依然是目前使用最广泛的嵌入式软件调试方式之一。
55、为了克服它的缺点,人们又提出了若干办法来改良它的性能,采用ROM仿真器就是一个有效的方法。,78,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点,在开发嵌入式软件的过程中如果是把程序下载到EPROM中去调试和运行(在早期都是这样做),那么就需要反复地使用EPROM编程器和紫外线擦除器修改EPROM中的程序。使用EPROM编程器和紫外线擦除器是一个很费时间的工作。一个修改周期就需要几十分钟,对大型程序可能长达一个小时以上。ROM仿真器是一种可以替代目标机上ROM芯片的硬件设备。使用它可以实现程序的快速下载和擦除,缩短修改程序所需的时间。,4.4 RO
56、M仿真器法,79,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点,(1) 用于连接目标机ROM芯片插座的接口。 (2) 用于连接宿主机的接口。 (3) 用于代替目标机中的ROM的RAM。 (4) 用于控制ROM仿真器的处理器。由于ROM仿真器本身也是一个嵌入式系统,所以也需要有一个处理器。,4.4 ROM仿真器法,80,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点,从外部形状上看,ROM仿真器上面有两条电缆,一条电缆连接到宿主机的串口或以太网口上,通过这条电缆可以把程序下载到ROM仿真器上。另一条电缆
57、连接到目标机的ROM插座上。对于目标机,ROM仿真器就像一个ROM芯片。使用ROM仿真器时,目标机上完全可以没有ROM芯片。当目标机中的程序访问ROM时,实际上是访问ROM仿真器中的RAM。对于宿主机上的调试器,它又可起调试监控器的作用,监视和控制被调试的程序。,4.4 ROM仿真器法,81,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点,ROM仿真器的最主要用途是节省程序开发过程所需的时间。如果使用直接测试法或插桩法,在更新EPROM中的程序时,一般的过程是从目标机上取下EPROM,先用紫外线擦除器将EPROM中的原有内容擦除掉,然后再用EPRO
58、M编程器写入新的程序,最后,再插回到目标机上。反复这样做很麻烦,EPROM也很快会老化。而使用ROM仿真器时,可将程序通过ROM仿真器下载到目标机上运行,并可根据程序运行的情况很快地对程序进行修改,整个过程简单了许多。,4.4 ROM仿真器法,82,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点,从ROM仿真器的连接方式可以看出,它在目标机与宿主机之间建立了一条高速的通信通道。其典型应用是和插桩法相结合,形成一种功能更强的调试方法。与仅使用插桩法相比,使用ROM仿真器有如下几个优点。,4.4 ROM仿真器法,83,为什么需要使用ROM仿真器 ROM
59、仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点 优点之一 优点之二 优点之三 优点之四 优点之五,4.4 ROM仿真器法,ROM仿真器使软件开发人员可以快速地向目标机下载可执行程序并加以运行,大大缩短了程序的调试周期。,84,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点 优点之一 优点之二 优点之三 优点之四 优点之五,4.4 ROM仿真器法,使用ROM仿真器时,由于目标机是通过ROM芯片插座与宿主机相连,所以不必占用目标机上通常很有限的接口资源。,85,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点 优点之一 优点之二 优点之三 优点之四 优点之五,4.4 ROM仿真器法,使用ROM仿真器时,调试监控器是保存在ROM仿真器之中,所以不需要占用目标机上的存储空间来保存调试监控器。,86,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作用 ROM仿真器的优点 优点之一 优点之二 优点之三 优点之四 优点之五,4.4 ROM仿真器法,有了一个ROM仿真器的同时就得到了一个可以支持某种或某几种处理器的调试监控器,因此省去了为目标机开发(或购买)调试监控器的麻烦。,87,为什么需要使用ROM仿真器 ROM仿真器的组成与结构 ROM仿真器的作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 结核性风湿病篷塞病护理查房
- 航空考古遥感技术应用测验试题及真题
- 深度解析(2026)《GBT 35832-2018牙膏磨擦值检测方法》:技术内核、应用实践与产业前瞻
- 深度解析(2026)《GBT 35657-2017化学分析方法验证确认和内部质量控制实施指南 基于样品消解的金属组分分析》
- 深度解析(2026)《GBT 35506-2017三氟乙酸乙酯(ETFA)》
- 深度解析(2026)《GBT 35464-2017合成石材试验方法 盐雾老化测试》
- 《CHT 9005-2009基础地理信息数据库基本规定》(2026年)合规红线与避坑实操手册
- 初二语文课改教研工作计划
- 学校校长陪餐检查制度
- 算力基础设施硬件适配升级方案
- 2026届江苏省南京市高三二模英语试题(含答案和音频)
- 2026版公司安全生产管理制度及文件汇编
- 2026年中国铁路各局集团招聘试题及答案解析
- 湖北省2026届高三(4月)调研模拟考试 英语答案
- 2026中国养老服务市场需求分析与商业模式研究报告
- 2026年丝绸博物馆陈列设计岗面试作品集准备
- 2026年八年级信息技术考试试题库(答案+解析)
- 中国酒精使用障碍防治指南(2025版)
- 新版人教版八年级下册数学全册教案(完整版)教学设计含教学反思
- 装修临时施工方案(3篇)
- 安全行车教课件
评论
0/150
提交评论