面试题eembedded enineer1.什么是平衡二叉树编写一个删除的程序_第1页
面试题eembedded enineer1.什么是平衡二叉树编写一个删除的程序_第2页
面试题eembedded enineer1.什么是平衡二叉树编写一个删除的程序_第3页
面试题eembedded enineer1.什么是平衡二叉树编写一个删除的程序_第4页
面试题eembedded enineer1.什么是平衡二叉树编写一个删除的程序_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

tasktask3:1(实际上可能更来讲很重。很多前,一开发人为了对入有更的理解,向ace问了这样的一个题我怎么能知道懂得我系统到干些什么? rale对这问题有吃惊,因在当时有人这问过,同时代嵌式开发人问的最的大都绕“怎么才能使程跑的更”、什么编器最”等肤浅的题。所以面对这不同寻却异乎成问题,rae感欣喜回复他你的题很有深很成熟因为只不断地深入理解才可能不断提高水。并且rae为鼓励这位着的程员,把0条于嵌入式软件发测试秘诀告了他:重编译代码来消除bug,结果却无济于事。懒惰是因为他们习惯了使用printf调试最根本有效的调试方法。比如VxWorksTornaI提供的gdb就属于这一种。printf对正常的代码执行干扰比较大(一般printfCPU比较长的时间),需要慎重使用,最好设置打印开关来控制打印。ICE是用来仿真CPU的设备,它可以在不干扰运算器的正常运行情况下,实时的检测CPU的内部工作情况。像桌面调试软件所提供的:复杂的条件断点、先进的实时、性能分析和端口分析这些功能,它也都能提供。ICE一般都有一个比较特殊的CPU,称为外合(bond-out)CPU。这是一种被打开了封装的CPU,并且通过特殊的连接,可以到CPU的内部信号,而这些信号,在CPU被封装时,是没法“看到”联合使用时,ICEICE同样有一些缺点:昂贵;不能全速工作;CPUCPU的,从另一个角度说,这些外合CPU也不大可的被新出的CPU所更换。JTAG(JointTestActionGroup)虽然它最初开IC和电路连接,但是这种串行接口扩展了用途,包括对调试的支持。ADBlackfinVisualDsp++JTAG调试。RM器是一程序,留在嵌系统RM中,通过行的或络的连和运行在少量的存空间,不需其它任专的硬件。提供了下功能代码、运行控制断点、步步进以及观、修改寄和内存。为RM器是操软件CU下应用程,再次入RM器。.Data监视器[Data.OS监视器[OperatingSystem操作系统监视器可以显示诸如任务切换、信号量收发、中断等。一方面,这些监视器能够为你呈现之间的关系和时间联系;另一方面,还可以提供对信号量优先级反转、死锁可以用来测试CPU到底耗在那里。profiler工具可以让你知道系统的瓶颈在那里、CPU可以找到内存使用的问题所在,比如内存、内存碎片、内存等问题。如果发现系.运行[Execution要用于测试代码逻辑,可以在大量的中发现异常的那些。.GUI测试工具[GUI入响应时间进行的。GUI测试工具可以作为工具有开发环境中运试用例,其功能包括对操作的记录和回放、抓取屏幕显示供以后分析和比较、设置和管理测试过程(Rational公robotMercuryLoadrunner工具是杰出的代表)GUI,但常常可以对嵌入式设备进行插装来运行GUI测试,虽然这种方式可能要求对被测代码进行更本人曾经写的流录显具在测会数流向和变上帮了忙帮公司到了几u。内存问题危害很大,不容易排查,主要有三种类型:内存、内存碎片和内存。对于内存问题态度必须要明确,那就是早发现早“治疗”。在软件设计中,内存的“名气”最程老手有时后也会遭遇内存问题。有测试过内存的朋友估计都有深刻地体验,那就是内存问题一般隐藏很深,很难通过代码阅读来发现。有些内存甚至可能出现在中。有可能这本身是库中的bug,也有可能是因为程序员没有正确理解它们的接口说明文档在很多时候,大多数的内存问题无法探测,但可能表现为随机的故障。程序员们往往;这些工具通过查找没有或重复使用的代码块、内存收集、库等技术来发现内存泄该去测试内存的问题,做到防患于未然。由于动态内存管理的种种问题,在嵌入式应用中,很多公司干脆就禁用malloc/ 内存是内存使用最严重的结果,主要原因有数组越界、写已经释放的内存、指针计算错误、堆栈地址越界等等。这种内存造成系统故障是随机的,而且很难查找,目总之,如果要使用内存管理单元的话,必须要,并严格遵守它们的使用规则,比如谁讲到系统稳定性,人们地会想到实时性和速度,因为代码效率对嵌入式系统来说太重要了。知道怎么优化代码是每个嵌入式软件开发人员必须具备的技能。就象子减肥一profile(性IDE都提供这种内置的工具)能够记录各种情况比如各个任务的CPU占用率、各个任务的优先级是否分配妥当、某个数据被拷贝了多少次、磁盘多少但是,profile工具在分析实时系统性能方面还是有不够的地方。一方面,人们使用profile工具往往是在系统出现问题即CPUprofile工具本身对CPU占用较大,所以profile对这种情况很可能不起作用。根据Heisenberg效应,任何测试或多或少都会改变系统运行,这个对profiler同样适用!总之,提高运行效率的前提是你必须要知道CPU*bug的码,只他自己不要出这种代,否则一天同的其它可能同样会肯定是有人不或草率。所以你在怨针那么找的时,你是想过是自寻?c编程指南》或《关于C的08“”》。 和捕捉问题根源,我们可以设计比较全面的错误代码。怎么来做呢?尽可能对每个函数调用失败作出处理,尽可能检测每个参数输入输出的有效性包括指针以及检测是否过多或过少地调用某个过程。错误能够让你知道你成很多块,一块一块的找。对于模块独立的大型项目,使用方法往往是对付那些隐藏极bug的最后方法。如果问题的出现是间歇性的,我们有必要设法去重现它并记录使其重现的去重现问题,那么我们就可以着手去问题。怎么呢?我们可以用#ifdef把一些可能和可以使用工具获得函数调用的情况包括参数的传递;检查内存是否以及堆栈溢出的问迷路时可以根据这些标记找到出路。对过去代码的修改进行记录对将来出现问题之后的调试很有帮助。假一天,你最近一次修改的程序跑了很久之后忽然死掉了,那么你这时的上次的修改呢?SCSVCS(ConcurrentVersionControl,CVSVCS的演化版本)checkin下来后和当前测试版本比较。比较的SCS/VCS/CVS自带的diff工具或其它功能更强的比较工具,比如你怎么知道你的测试有多全面呢?覆盖测试(coveragetesting)可以回答这个问题。覆盖测试工具可以告诉你CPU20%到40%代码没有问题,而其余的可能存在bug。覆盖工具有不同的测试级别,用户可以根据自己deadcode,覆盖工具还是可以为你一些潜在的问题,看下面的代码:if(i>=0&&(almostAlwaysZero==0||(last=如果almostAlwaysZero0,last=i赋值语句就被跳过,这可能不是你所期望的。更糟糕的是你可能需要花费10-200倍的时间来找一个bug,而这个bug在开始的时候可能很容易就能找到。一个小bug可能让你付出巨大的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论