得益于功能越来越强大的μP,嵌入式系统变得越来越复杂,嵌入式软件程序变得越来越大,程序越大,更难以调试。更重要的是,在大型嵌入式程序中捕获错误可能会对公司的工程资源造成负担。由于嵌入式系统的应用程序很大,程序员缺乏对代码中各种可执行模块的深入了解。此区域是软件分析的用武之地。该术语指的是可以收集有关程序中函数的执行时间,频率和调用模式的数据的软件。这种分析可能是优化代码的第一步。通过让您知道哪些功能非常耗时,它可以让您加快这些代码区域的速度。此外,它还可以让您知道执行程序是否在应用程序期间至少调用您编写的所有代码。
分析工具通常通过将额外的软件嵌入应用程序源代码的关键点来收集信息。或者,您也可以使用外部电路从系统总线捕获分析信息。您可以使用无辅助软件分析或外部硬件辅助软件分析。
C编译器通常为您提供分析开关(-p),对编译的代码起作用以生成分析信息。例如,自由软件基金会(www.gnu.org/fsf/fsf.html)Gnu C编译器为您提供了“-p”编译器开关,您可以使用它来准备目标代码以使用“gprof”收集分析数据“ 效用。当您调用-p开关时,编译器会在每个编译过程的开头添加额外的代码(清单1)。这个额外的“检测代码”可以调用运行时记录实用程序。该列表显示了典型过程的初始x86代码序列(在此示例中为lapinit())。该代码使用自由软件基金会的Gnu汇编语法,该语法具有操作代码,源和目标的一般指令格式。
当您输入每个过程时,检测代码会调用mcount()支持例程。然后,检测代码传递mcount()变量的地址,以支持记录执行程序的调用历史记录的数据结构。在程序执行结束时,检测代码调用(exit()并自动生成mon.out配置文件.mon.out文件包含呼叫发生信息和统计采样信息。操作系统收集统计数据。通过检查应用程序的程序计数器,计时器滴答(例如每10到20毫秒)。
操作系统的prof实用程序使用mon.out文件中的配置文件数据生成应用程序的执行配置文件。应用程序可执行文件的图像中的符号信息。对于图像文件中的每个过程符号,操作系统确定该符号与下一个符号之间的执行时间百分比。
分析信息很有用,因为它使您能够识别在程序中执行时间过长的过程。这些过程非常适合进一步优化。使用这种“源代码检测”,mcount()需要 很长时间。此外,此技术要求您重新编译应用程序软件以插入检测代码。
分析工具具有不同程度的复杂性 - 从命令行分析工具到基于图形用户界面的工具。例如,Cygnus的$ 2000/座(嵌入式)GNU-Pro C编译器和$ 299(用于Linux)CodeFusion IDE附带gprof和gcov命令行分析工具。
一些分析工具,例如Applied Microsystem Corp(AMC)的CodeTEST-Hardware-In-Ckt,提供了一个由硬件探测辅助的嵌入式测试平台(图1)。该工具使您可以在软件开发的最后阶段专注于嵌入式软件测试和分析。 CodeTEST-Hardware-In-Ckt比其他分析工具需要更少侵入性的仪器。此外,该工具进行非抽样测量。
您必须“检测”应用程序,并且此检测非常类似于prof实用程序所需的检测。但是,在这种情况下,检测是“轻量级的”(清单2)。这种方法不需要昂贵的调用mcount() - 类似的过程。相反,它只需要将识别值写入内存位置;该标识值出现在处理器的内存总线上。外部捕获硬件响应将数据放入示例__TAG_PORT地址的写入。当发生这些写入时,捕获硬件会将写入的标识值和时间戳记录到记录缓冲区中。
您还必须以与过程条目类似的方式检测过程的退出代码即结尾。唯一标识值“标签”与代码中的每个检测点相关联。写入的地址值(称为标记端口)解决了您选择此问题的方式。根据目标μP探头,只要目标系统或CPU终止总线周期,您就可以在目标存储器映射中的任何位置找到标签端口。您通常可以将标记端口放在目标RAM中,RAM设备本身会同步终止所有写周期,包括标记写入。
AMC规定您必须确保任何处理器的片上数据存储器不会将写入缓存到tagport或捕获地址。如果内存确实缓存了这些写入,那么直写而不是回写必须处理写入。此技术可确保在执行写入指令后,标签值很快出现在处理器总线上。不幸的是,写缓冲技术仍然会延迟标签信息的出现。
出于这个原因,硬件辅助分析比具有时间关键实时嵌入式系统的纯软件方法更受欢迎。您通常通过在编译之前处理源代码来插入检测。或者,工具提供程序不是使用编译器来检测代码,而是提供后处理工具,它可以检测已编译的模块。 AMC的LiveCODE工具是可执行代码检测的一个示例,它允许您在应用程序在目标系统中运行时执行交互式跟踪(图2)。 LiveCODE通过将特定于处理器的本机分支指令发送到内存中要在目标中进行所需检测的点来自动检测可执行文件。然后程序分支到内存中的另一个位置,该位置工具执行用户插入的语句。然后,LiveCODE将控制返回到分支点,并且编译的应用程序继续执行。
LiveCODE自动准备图像,以便程序将这些段的执行历史显示为已编译的子系统,模块和函数树视图格式的应用程序。交互式序列图显示了执行期间函数入口和出口的图形表示(图2)。您可以在执行跟踪中前进和后退。 LiveCODE可以节省宝贵的开发时间,因为您可以在程序执行时与程序进行交互,选择要跟踪的代码部分,插入调试代码语句,或者在不停止执行或不必重新编译应用程序的情况下修改变量。 LiveCODE支持PowerPC处理器体系结构,可用于Windows和Solaris主机系统。价格从4000美元起。 AMC计划在下一季度升级LiveCODE以处理其他处理器架构。
CodeTEST提供源代码执行的高级和实时可见性。例如,在跟踪执行功能期间,该工具会对嵌入式软件执行跟踪,而不是硬件。软件“instrumenter”实用程序准备用户的程序以进行在线验证。该实用程序读取程序源文件并将测试点指令插入代码中。指导者处理C和C ++源代码程序。
CodeTEST系列包括CodeTEST-Performance,可同时测量多达32,000个函数,从而监控大多数程序中每个例程的每次执行。因为它进行非抽样测量,所以该工具显示真实的最差和最佳情况时间,在任务,功能或分支级别显示结果。使用该工具的性能特征列表,您可以优化代码的选择部分。
CodeTEST还包括CodeTEST-Memory,它跟踪嵌入式程序中的动态内存分配。由于该工具为跟踪的每一行添加了时间戳,因此您可以确定函数中的循环执行所需的时间。使用CodeTEST/Statement Coverage工具,您可以识别在给定测试场景中将执行的代码部分。交互式XY图显示了工具在测试时间内实现的覆盖范围。
CodeTEST组的另一个元素包括CodeTEST-Decision Coverage工具,该工具显示指示执行期间执行的真/假状态的数据。程序流程。 CodeTEST-MCDC工具(修改后的条件决策覆盖范围)提供了对程序代码中每个决策点的每个条件的详细分析,以及强制更改代码以研究其行为的过程。此功能可帮助您生成满足美国联邦航空管理局规定的代码。
CodeTEST可在CodeTEST-HW-Ckt,CodeTEST-Software-In-Ckt和CodeTEST-Native版本中使用。当嵌入式硬件不可用时,CodeTEST-Native为桌面环境提供纯软件方法。硬件准备就绪后,CodeTEST-Software-In-Ckt工具使用本机阶段的工具,并将运行时精度引入嵌入式软件测试。最后,硬件辅助的CodeTEST-Hardware-In-Ckt工具提供了一个目标探测器,用于系统操作的真实实时目标测试。
CodeTEST-Software-In-Ckt和CodeTEST-Native都与设备无关。 CodeTEST-Software-In-Ckt的价格从跟踪,内存或报表覆盖模块的4000美元开始;决策覆盖模块7000美元;和MCDC模块的20,000美元。对于Trace,Memory或Statement Coverage模块,CodeTEST-Native的起价为2500美元。 CodeTEST在Windows和Unix工作站下运行。 CodeTEST支持英特尔(www.intel.com)8096CX,JX和HX; IBM(www.ibm.com)和摩托罗拉(www.motorola.com)PowerPC 603,740,750,823,821和850μs; MIPS(www.mips.com)4600,4700,4650,4300和3000μPs;英特尔/AMD的386和486;和竞争对手的68020,30,40,60,68332和68302。
竞争产品,Diab Data的纯软件RTA套件,结合了图形运行时分析工具,提供关键洞察力,最大限度地提高计划性能,提高嵌入式应用的可靠性和内存使用率。该工具套件依赖于Diab Data的D-CC和D-C ++编译器套件生成的信息,包括Visual Interactive Profiler(VIP),运行时错误检查器和Visual Link Map Analyzer工具(图3)。
VIP测量并分析程序的运行时行为。它首先在编译时检测程序。当检测程序执行时,它在目标上构建一个配置文件数据库,并从用户设置的中断标记中获得定时信息。测试完成后,它会将配置文件数据上传到主机,供VIP分析和显示。
虽然平面分析技术(如mcount()实用程序)只显示程序花费的执行时间。一个函数,分层分析还可以进一步显示程序在每个子进程中花费多少时间在一个函数上。因此,层次分析揭示了平面分析技术会遗漏的热点。 VIP在交互式图形显示中显示配置文件数据,使您能够快速发现嵌套的时序信息,以便集中有效的优化工作。
RTA Suite的运行时错误检查工具检测到很难识别的软件错误,因为它们在程序执行之前不会显示出来。使用运行时错误检查程序,您可以快速可靠地查找错误。这些错误包括内存泄漏,数组访问和边界外的其他数据结构,访问空闲或无效内存,多次释放内存,通过空指针访问以及堆栈溢出。
RTA Suite的Visual Link Map Analyzer允许您以交互方式轻松创建,可视化,编辑和优化内存映射设置。它还在高端μP中提供多种寻址技术。根据Integrated Systems Inc的pSOSystem产品软件开发总监N Rajan的说法,您不需要使用三条指令来访问数据区中的变量(x):
LoadHX,R3;加载高16位的地址;
LoadLX,Rs;加载低16位的地址;和
加载0(R3),R4;现在加载X的值为“0”偏移。
相反,您可以通过一条指令访问变量:
加载X(R3),R4,
其中偏移值可以是±32。
通过这种方式,RTA Suite允许您在链接模块时定义一个小数据区域,并在此部分中放置用户变量或数据。唯一的限制是数据区不能大于64千字节。此限制适合大多数应用。通过将R3寄存器指向此小数据区域部分的中间,您可以使用一条指令访问此部分中的任何变量,从而生成紧凑的代码,从而加快执行速度。
RTA Suite支持PowerPC,68K/CPU32,ColdFire和MCORE系列。 RTA Suite适用于D-CC和D-C ++编译器支持并适用于所有主要Windows和Unix主机的所有目标。
在选择软件分析产品时,请记住,尽管硬件测试工具,例如作为逻辑分析仪和在线仿真器(ICE),它们很适合调试硬件问题,它们无法深入了解软件代码的执行情况。
“使用传统的ICE是不可能的,因为处理器正在成为AMD的工程师David Mann表示,太快,采用复杂的封装技术,并且调试时系统总线活动较少。因此,他说,“微处理器供应商正朝着JTAG类型的控制方向发展,理想情况下,这种控制方式可以产生程序跟踪。”将来,软件配置将获得更强大的硬件辅助功能。 AMC经理Jay Gould表示,您可能会看到更多特定于处理器的分析工具。
片上硬件辅助软件分析
在线仿真器(ICE)广泛用于嵌入式软件开发。虽然ICE是低端到中端CPU的有效工具,但是模拟32位设备是令人生畏的。由于处理器的复杂架构,高时钟速度,片上高速缓存和封装,观察处理器总线很困难。这种情况促使处理器厂商加入片上调试电路,以简化ICE构建并推广替代硬件辅助软件开发方法。
两种这样的方法,摩托罗拉(www.motorola。 com)背景调试模式(BDM)和AMD的AMDebug端口值得注意。 BDM的在线仿真通过串行链路上的专用调试命令使处理器保持在后台模式。例如,摩托罗拉的ColdFire系列μP(MCF5202/3/4/6)支持JTAG IEEE 1149.1,并提供一组功能强大的调试工具。对于实时跟踪,ColdFire提供了一个并行输出端口,该端口分区为4位处理器状态[PST]和调试数据[DDATA]总线。 PST [3:0]允许μP发送处理器执行状态,DDATA [3:0]显示操作数数据。结合PST和DDATA可帮助您跟踪μP的动态路径执行情况,以实时调试硬件。
然而,BDM无助于软件分析程序执行,因为它要求您停止CPU和使用特殊调试寄存器负责程序控制。这些寄存器允许您设置程序计数器断点,地址断点,配置存储器和寄存器,然后使用Go命令重新启动CPU。因此,如果没有专门的硬件,就无法使用BDM来分析基于RTOS的应用程序。
“使用配备片上跟踪功能的处理器可满足许多嵌入式项目的主要工具要求,” David Mann,AMD工程师。 “鉴于跟踪数据可以由目标处理器本身访问或提供给控制目标的远程主机,因此可以很灵活地使用数据。”
AMDebug端口基于增强的JTAG接口,可在AMD的x86处理器上使用,并集成了片上跟踪缓存,您可以主要用于跟踪程序的指令流。但是,您也可以使用跟踪缓存来收集性能分析信息。跟踪缓存存储20位跟踪条目,包括4位跟踪代码和16位跟踪值。跟踪程序的执行时,压缩的跟踪条目会在执行过程中自动进入跟踪缓存。收集配置文件数据时,跟踪控制寄存器(很像断点控制寄存器)会启动新的跟踪条目的生成。
片上断点控制寄存器在程序停止程序执行时到达程序地址。跟踪控制寄存器选择执行跟踪应该开始和停止的程序地址。为了启用性能分析,这些跟踪控制寄存器还可以启动和停止计数器,该计数器测量已执行的执行时间。但是,要分析配置文件数据,您需要后处理软件工具。通过这种方式,AMDebug提供基本的性能分析。
全部0条评论
快来发表一下你的评论吧 !