ImageVerifierCode 换一换
格式:PPT , 页数:34 ,大小:477.50KB ,
资源ID:2349049      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2349049.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第二讲 嵌入式系统开发过程(三).ppt)为本站会员(Facebook)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第二讲 嵌入式系统开发过程(三).ppt

1、23 实现阶段 231 选择开发平台嵌入式系统的开发平台包括四部分:硬件平台、操作系统、编程语言和开发工具。嵌入式系统开发一般先选择处理器,一旦确定了处理器,厂商会提供所需要的开发工具(原厂提供或第三方合作厂商提供)。开发工具包括交叉编译器、连接定位器、加载程序和调试器等。开发工具必须安装在桌面系统上(运行Windows或UNIX/Linux操作系统),即可开展开发工作了。嵌入式操作系统厂商也提供必要的开发工具,如基于EOS的API、调试器等。这些开发工具也安装在用于开发的桌面系统上,生成的代码可以在以后移植到嵌入式系统上。除此之外,可能还需要如下工具:, 编程器:用于对Flash、EPROM

2、等编程。如果处理器支持JTAG方式调试,则省去。 ROM仿真器:用于方便程序的调试,非必须。 内部电路仿真器。 指令集模拟器:一个软件,模拟目标系统的处理器和存储器,如ARMulator。如果有评估板或目标板,则省去。 测试仪器:示波器、逻辑分析仪、万用表等用于调试硬件。,2311 选择处理器无统一标准和特殊规定。对于大多数嵌入式系统的开发者来说,往往更愿意选择自己熟悉的处理器,节省时间,降低风险。但可能不是一个好的方案。理想的方案是根据用户的需求和项目的要求选择处理器。主要考虑:(1)处理速度。原则是应当让处理器的能力同项目的技术指标匹配,参考需求分析和系统设计文档资料。选择处理器的主要指标

3、是系统需要的速度、处理数据的字宽、是否需要浮点运算、外部接口的集成情况等。如32位的处理器有ARM系列、MIPS系列、PowerPC系列等。注意:处理器的性能指标需要满足系统的需要,并且考虑一定的余量;不要选得太高,成本高,开发难,配套外围电路的成本也高。够用即可。(2)熟悉程度。开发人员应权衡处理器成本和开发成本。当满足功能和开发人员熟悉程度对立的时候,优先考虑处理器的性能。嵌入式系统产品的生产数量可能很大,错误的选择可能会带来无法估量的损失。对于一个熟练的嵌入式产品开发者来说,用大约1个月左右的时间,熟悉一种嵌入式处理器的使用是不成问题的。,(3)I/O功能。尽量选择单芯片方案,所需要的I

4、/O功能已经集成在嵌入式处理器上,而不要外接,降低系统成本,提高可靠性。目前,大量外设可被集成到处理器上,如UART、以太网控制器、LCD控制器等,但并非所有I/O都被集成,不同型号有不同的定位,过多集成无用的部件,增加系统成本。应通过调研,根据系统需求,找到一种符合外设要求的嵌入式处理器是很容易的。 (4)软件支持工具。主要指嵌入式操作系统的支持。一种新的处理器并非所有的EOS都支持,还要考虑开发语言和交叉编译器的支持。,(5)调试支持。内置调试器/在线仿真器的选择问题。高速处理器的在线仿真器非常昂贵,应尽量选择具有内置硬件调试功能的处理器,如JTAG、BDM调试方式等。现在大多数嵌入式处理

5、器具备了集成的调试方式,价格增加不多。 (6)制造商技术支持。考虑制造商的供货能力、技术支持和开发水平,尽量选择大的处理器供应商,或者某一方面的专业处理器供应商,有成功案例的方案,避免错误的决策。通信类控制器可选择PowerPC系列,消费类可选择三星公司、Motorola公司的DragonBall(龙珠)系列,小型工业控制可选择Atmel公司的AT91系列,DSP可选择TI公司、Motorola公司、ADI公司等,移动设备选择ARM内核的处理器等。ARM内核的处理器的用途不断在扩展。,2312 选择硬件部件范围很广。包括单IC、单元电路板,甚至整个自成体系的系统,主要根据预算进行。考虑:(1)

6、产品的需求量。量越大,越值得自己设计和制备硬件,降低成本。量很小,设计费用太高,不值得自己做,应考虑从第三方购买成品的电路板。如常用的PC/104模块、配套的I/O板卡和模块等。(2)目标市场机会。如果需要尽快发售产品,从而获得竞争力,尽可能购买硬件,自制的越少越好。如果时间充裕,可以自己设计硬件,降低成本。(3)软件对硬件的依赖程度。如果软件必须尽早在硬件上进行开发,应购买成品的硬件。大多数嵌入式处理器的制造商提供评估板供用户使用,功能很全面,可以在评估板上进行软件开发,硬件设计者只需参考评估板进行定制设计即可。,2313 选择操作系统根据项目需要的操作系统的功能来选择操作系统产品。考虑:(

7、1)OS的功能。是否需要OS;需要OS全部还是部分功能,包括处理机管理、存储器管理等;文件系统、人机界面等;实时系统还是分时系统;是否可裁剪。(2)配套开发工具。有些实时OS只支持该OS供应商的开发工具。如果OS使用广泛并有第三方工具可用,则多些选择余地。(3)OS的移植难度。包括应用开发和板级支持包(BSP)的开发。BSP是OS运行在用户的目标板上所需的软件,一般OS的供应商会提供流行的标准板的BSP,但用户板可能与标准板有差异,因此需要进行BSP的开发。通常差别不大,厂商一般会提供一些移植的模板和范例供用户参考,不同OS的移植难度不同。,(4)OS是否包括特殊的调试支持。有些OS允许用户打

8、开特殊的调试层,深入OS内部去跟踪调用一些有助于解决应用程序问题的功能;有的OS提供源码。这些都便于用户的调试工作。注意:提供源代码的OS并不一定更方便用户的使用,因为用户开发的重点在于应用,而不是OS本身。提供功能强大的调试手段是必要的。 (5)OS的内存需求。OS需要的内存越多,则目标板需要设计的存储器越多,加大了系统的成本,降低了系统的运行速度,反过来又需要提高CPU的性能,又增加了成本。 (6)OS的熟悉程度。主要是指API。如果不熟悉,需要增加额外的时间学习并掌握。通常,各嵌入式OS的API各不相同,但差别也不大,大多数EOS的API符合POSIX标准。,(7)OS是否包括所有需要的

9、组件。如果没有,必须自己开发或购买,并集成进去。包括网络支持(TCP/IP协议支持等)、文件系统、快速文件系统、计算机板卡支持、CDROM支持、浮点仿真运算、人机界面以及串行I/O(RS232C、USB、1394)支持等。 (8)OS是否有目标硬件的驱动程序。针对某一种嵌入式处理器的OS,一般会提供处理器上的设备驱动程序。如果用户的设备没有驱动程序支持,则必须开发,一般OS会提供开发的模板代码。 (9)OS是否有可伸缩性。具有可伸缩性的OS具有使用的灵活性,用户可以方便地裁剪不需要的部分,降低对硬件的资源要求,不必要的系统功能会消耗系统内存资源。,2314 选择编程语言选择编程语言比较简单。大

10、部分的嵌入式系统开发使用C语言、汇编语言和C+语言,另外目前有可能选择JAVA语言。考虑:(1)选择开发人员最熟悉的语言。(2)选择使用最广泛的语言。C/C+是最广泛使用的开发系统软件和应用软件的语言,如果需要开发可移植性好的程序,或二次开发,也可使用JAVA语言。(3)语言的性能。越高级的语言,其编译器和运行库附加的开销越大,应用程序也越大、越慢。公认汇编语言是最高效的语言,能写出最小最快的程序,但开发时间长,可读性和可移植性差,难度大。,目前开发嵌入式系统普遍选择C语言和汇编语言混合编程的方式。几乎所有的嵌入式系统的开发工具都支持混合编程方式。因此,用户在开发项目时,大多数程序使用C语言开

11、发,时间关键部分和访问硬件部分可以使用汇编语言开发。使用C语言开发嵌入式系统软件通常不会带来系统性能上的损失。 如果EOS提供了JVM,也可以使用Java语言来编写应用程序,但要考虑性能问题,众所周知,Java语言的效率比较低。如果开发的是应用软件,可以考虑;如果开发的是网络应用程序,则是最佳选择。,2315 关于评估板为了方便嵌入式系统的开发,目前一般采用的方式是先使用评估板进行开发,当开发、调试、运行成功以后,再根据评估板使用的硬件,裁剪一般应用中不需要的硬件,最后做成产品板大量生产。嵌入式处理器厂商通常可免费提供评估板供用户使用。一般的开发平台都需要在评估板上提供微处理器、存储器芯片以及

12、其它的外围硬件等设备,在软件方面提供系统开发平台和下载工具,以及硬件上的Bootloader等工具。如果需要EOS,则还需要提供OS开发工具。,2316 关于板级支持包嵌入式系统的硬件平台差异较大,即使同一CPU,但片上配置也不同,因此EOS不可能适应所有的嵌入式应用。OS的提供商通常把OS分成两层,上层与硬件无关,下层与硬件有关。用户把OS运行到目标板上时,需要针对自己的目标板的特殊情况,编写目标板的支持OS运行的的代码,以适应OS的运行,这部分代码就称为板级支持包(Board Support Package,BSP)。BSP通常不会太复杂,大多数OS的供应商会提供BSP的开发方法和开发模板

13、。,232 软件开发过程 2321 嵌入式系统的软件开发过程嵌入式软件的开发主要包括4个步骤:建立交叉开发环境、交叉编译和连接、重定位和下载、联机调试。(1)建立交叉开发环境(Cross Development Environment,CDE)。只有嵌入式系统才需要建立CDE,因为主机和目标机体系结构不同,需要在主机上开发在目标机上运行的程序。目标机由于资源限制,不可能既是开发环境,又是运行环境,也不必要。交叉开发环境通常包括开放和商用两种类型。开放式CDE主要有GCC,支持多种交叉平台的编译器,由GNU负责维护,遵守GPL(Genernal Public License)规定。商用的CDE主

14、要有Metrowerks CodeWarrior,ARM Software Develoment Toolkit(ADT),SDS Cross Compiler,WindRiver Tornado等。按照使用方式,CDE主要分为使用Makefile和IDE两种类型。使用Makefile的开发环境需要制作Makefile来管理和控制项目的开发,可自己手写,也可借助某些自动化工具,这种开发工具是GCC,SDS Cross Compiler。而IDE具有友好的人机界面,方便管理和控制项目的开发,如CodeWarrior。有些开发环境既可以用Makefile管理项目,又可以使用IDE。,(2)交叉编译

15、和连接。使用建立好的交叉开发环境完成编译和连接工作。如ARM的Linux操作系统GCC交叉开发环境中,arm-linux-gcc是编译器,arm-linux-ld是连接器。可有多种编译和连接器。 (3)重定位和下载。编译连接后形成目标板的image(映象)文件,就可以通过相应的工具与目标板上的bootloader程序进行通信。可以使用bootloader提供的,或通用的终端工具与目标板相连接,一般通过串口在主机和目标板进行通信。Bootloader中提供下载等控制命令,完成在嵌入式系统正式在目标板上运行之前对目标板的控制任务。Bootloader指定image文件下载的位置。在下载结束之后,使

16、用Bootloader提供的运行命令,从指定地址开始运行嵌入式系统软件。 (4)联机调试。嵌入式系统的调试有多种方法和不同层次。如软件调试(软件仿真器)和硬件调试(仿真调试器);OS内核调试和OS应用程序调试,这些都需要目标运行平台和调试器的支持。,2322 在主机系统上验证软件不是必需的,一般用在目标系统的硬件没有完善的情况下的前期验证,因为最终结果仍需要在目标系统上验证。目前有些嵌入式系统的开发工具提供商提供了在开发主机上验证目标系统的手段。一般来说,在主机上验证目标系统的软件只能验证软件的一部分功能/性能,有些还难以实现。 2323 在目标系统上验证软件当软件在主机系统上测试过,就可以移

17、植到目标电路板,完成对功能和性能的完整测试。硬件和软件应同时测试。,2334 代码优化嵌入式系统软件开发的目标不仅要实现预定的功能,特别重要的是利用最优的代码完成需要的功能。包括代码长度最短和执行时间最短。有时两者是矛盾的,需要权衡,根据具体应用,确定优先级。如果嵌入式系统存储容量有限,而速度不是主要指标,则需按代码尺寸优化;如果需满足实时条件,则执行时间比代码尺寸重要。考虑:(1)去除冗余代码,即不执行或执行时无用的代码。如有些初始化过的变量从不使用。(2)去除调试代码。如调试用的printf语句。应使用条件编译程序设计方法,将调试状态和执行状态予以区分。(3)避免使用大型库例程。应使用专为

18、嵌入式系统建立的函数库。(4)避免使用递归例程。递归程序需要使用很大的堆栈,消耗大量内存,可能造成堆栈溢出,导致程序崩溃。,(5)避免浮点操作。如果无法避免,应转换成定点操作或使用具有浮点处理功能的CPU,尽量不要进行浮点仿真(代码容量大,速度慢)。许多浮点运算也可转换成整数运算或采用查表法进行。 (6)应用程序设计技巧来减少计算量。如乘法转换成移位和加法,除法转换成移位和减法等。 (7)将局部变量定义为寄存器变量或自动变量。 (8)尽可能使用无符号数据类型。 (9)采用汇编语言代码编写关键程序。 (10)应用开发工具的优化编译功能,将应用程序按需要的优化方式进行编译。,24 测试阶段嵌入式系

19、统软件的测试与应用软件的测试有许多共同之处,也有许多重要差别。嵌入式系统开发人员经常使用一般不会在应用软件开发中使用的、基于硬件的测试工具。另外,其测试计划也与众不同。 241 测试目的测试在开发阶段即已开始,包括软件测试、硬件测试、单元测试。硬件测试主要完成硬件电路的功能和性能指标的测试,功能在电路设计和实现中考虑,测试的重点在于性能指标。不同系统的指标要求不同。硬件测试还包括可靠性测试和电磁兼容性测试。硬件测试的关键是信号的测试,通过测试找出电路设计的不正确、不合理、不完整性方面。软件测试是嵌入式系统测试的另一重要方面,其重要性体现在: 通过测试找到错误(软件测试是唯一的方法); 降低系统

20、风险; 节约开发与维护成本; 提高性能。,2411 找到错误“停机定理”:计算机科学认为,不可能证明任何一个程序是正确的,只要给予足够的测试,就能证明一个程序是错误的。测试不能证明程序的“正确”,而只能找到错误,记住这一点非常重要!要知道程序中还有多少错误的惟一方法就是用经过精心设计和量化的测试计划来进行测试。错误的形成可能有这样一些方面: 应用软件程序员设计的程序错误; 系统软件错误。如OS错误。 开发工具错误。如编译器、连接器错误。 软硬件匹配错误。如时序问题,硬件反应问题等。不管是哪种类型的错误,都应找到,并设法采用变通、迂回、升级等方法修正错误。,2412 减少风险测试是为自己、公司及

21、客户最小化风险,测试的目标是证明系统与软件正如设计所要求的那样正常工作。有缺陷的产品流入市场最终会暴露出来,会给公司带来巨大的损失。 2413 开发关键性任务软件对于关键性的系统,关键性的软件模块尤其需要重视测试工作。如武器控制系统、工业自动化控制设备、医疗设备等。 2414 提高性能测试最优系统性能,找到并清除死代码及无效代码,帮助确认软件已经完全挖掘出硬件潜力,避免硬件重新设计。,2415 节约成本错误发现越早,修改费用越低,损失越小。见图。,242 测试时机嵌入式系统软件测试分布在系统开发的每个阶段,“测试无处不在”,越早开始越好。调试是测试的一种。测试通常包括单元测试、集成测试、系统测

22、试等。(1)单元测试。小模块的测试,采用白盒、黑盒相结合的测试方法。要做到完备测试非常困难,但应尽量使用足够多的测试用例来全面测试。(2)回归测试。只测试一遍是不够的。每次修改后都应当重新测试以确认这些修改会不会无意中影响一些看似与之无关的行为。,243 测试内容 2431 嵌入式软件与一般应用软件测试的区别 嵌入式软件必须在很长时间内稳定运行; 嵌入式软件一般不会频繁地由用户进行升级; 嵌入式软件有时使用在关键性的产品之中; 嵌入式软件必须与嵌入式硬件一起对产品故障负责; 真实世界事件一般是异步而且不可预测的,这就使模拟测试既困难又不可靠; 如果软件出错,可能会出现法律问题。,由于这些区别,

23、对嵌入式系统测试主要在以下方面不同于一般应用软件测试。 由于实时性与同时性很难同时满足,大多数测试集中于实时行为; 由于大多数实时系统有资源约束,应进行更多的性能与可用性测试; 可以使用一些实时跟踪工具测试代码的覆盖率; 对可靠性的测试级别要比一般应用软件严格得多。,2432 嵌入式软件的测试内容首先需要测试用例。测试用例来源包括标准用例集和用户自行设计。可通过功能测试和覆盖测试的方法来生成测试用例。两种测试方法都是必不可少的,功能测试是第一位的。考虑: 找出哪个函数没有被功能测试完全覆盖; 找出各函数的哪一段没有被执行; 找出需要哪一个附加覆盖测试; 运行附加测试; 重复以上步骤。,244

24、测试方法理想状态下,需要测试程序中的每一种可能行为,这意味着至少测试一次所有输入组合或所有可能的判定路径,但这是不切实际的,也是不可能的。功能测试与覆盖测试的组合提供了一个合理而又近乎理想的变通方法,其基本方法是选择最有可能揭露出错误的测试(一些属于功能测试,一些属于覆盖测试)。,2441 功能测试即黑盒测试。主要关心模块的输入是什么,输出应该是什么,不用暴露例子的内部细节和实现,也不知道输出与输出之间的算法到底是如何实现的。包括: 极限测试。测试中有意使输入信道、内存缓冲区、内存管理器等部件超载; 边界测试。输入表示特定输入范围边界的值(最大值、最小值、0/-1/+1等)以及使输出产生输出范

25、围边界的值。 异常测试。测试应当触发失败模式或异常模式。 错误猜测。基于以前进行软件测试及测试类似程序的工作经验。 随机测试。效率最低。适用于评估用户界面代码的健壮性。 性能测试。是产品需求的一部分。黑盒测试用例可以在系统需求分析工作完成以后马上开发,并与其它系统设计同时进行。在进行功能测试时,应当把功能测试设计成破坏性的,也就是要努力证明程序不能正常工作。,2442 覆盖测试即白盒测试/玻璃盒测试/路径测试,尽可能使每条代码语句、判定点或判定路径都至少执行一次,从而避免功能测试的弱点。它需要看到程序实现、执行细节,也就是要“看到盒子里边”。由于白盒测试依赖于具体的代码实现,只有代码编写完成后

26、才能开始测试设计工作。对于嵌入式系统而言,覆盖测试是测试方法中最重要的类型,测试结果可以很准确地预言测试人员马上要面对多少程序设计的错误。包括: 语句测试。选择的测试用例至少执行一次程序中的每条语句。 判定或分支覆盖。选择的测试用例使每个分支至少运行一次。 条件覆盖。选择的测试用例使每个用于判定的条件具有所有可能的逻辑值。,2443 灰盒测试白盒测试需要紧密联系到代码的内部细节,维护起来较困难;黑盒测试可以完成系统的功能测试,效率高一些,但是无法遍历代码实现的所有细节。灰盒测试是把二者的优点结合起来,达到既简化测试,又尽量遍历关键代码的目的。将灰盒测试与错误猜测结合起来时,就会成为非常有效的测

27、试方法。如果测试人员知道,至少猜到代码弱点所在,就能设计出针对这些弱点进行测试的方法,这种测试只覆盖代码中的特定部分,有可能会犯一些错误。灰盒测试对于需要将新功能集成到较稳定的老代码库中时非常有用。,245 性能测试性能测试是嵌入式系统设计中需要完成的最主要的测试活动之一,系统功能完成的怎样,只有性能测试才能回答。当系统性能下降时,可以通过分析测试代码找到性能下降的原因,进行改进(首先想到的是通过软件进行改进),而不是采用会增加成本、减少利润,并使产品缺少竞争力的更快处理器、更多更快的RAM/ROM来对系统进行升级设计。对于那些对成本有严格要求的嵌入式系统产品,更是应通过性能分析和评估,充分发

28、挥硬件的潜力,优化软件的设计,避免通过硬件的提升来提高系统的性能。,2451 如何测试性能在性能测试中,主要关心函数执行时间的长短。影响的因素很多,包括: 函数开始执行时,指令与数据是否在CACHE中; RTOS任务负载; 中断或其它异常; 函数数据处理要求; 函数中的分支跳转。通常测试函数执行时间的最小值、最大值和平均值。方法是在函数执行前设定一个时钟,执行完毕后再检查时钟,多次测量可以得到函数执行时间的最小值、最大值和平均值。,2452 性能测试与覆盖测试作用互补两者并非完全无关。覆盖测试不仅能发现执行中的代码数量,而且还能找出永远不会执行的死代码。应将死代码清除出去,减少代码映象的长度。有些计算机体系结构,死代码会使编译器产生更耗时的长转移和分支转移,长代码映象和频繁的转移会严重影响CACHE的性能。 2453 处理器硬件对性能测试的支持许多处理器硬件配备了性能监测计数器。片上集成的性能测试资源可与调试工具共同使用,从而在某些错误条件发生时产生中断。片上资源的明显优点在于它们不会受到片上CACHE的欺骗,也不会延长代码执行时间。,思考题1、假设你是“便携式血压计”产品的总设计师,请你运作这个产品的开发,直到把其从实验室推向市场。提示:嵌入式系统开发包括需求分析、设计、实现、测试等方面。在实现方面,你只需概括地描述软硬件需要完成的工作即可,不必把产品真的开发出来。,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报