之前的推文我们有介绍了ETM Trace功能的原理以及使用该调试功能的要求(可点击文字查阅),本文中我们将结合IAR提供的调试功能窗口进一步介绍ETM Trace指令跟踪提供的强大调试功能。借助ETM Trace,IAR提供了包括Trace指令记录、函数分析、代码覆盖率分析和Timeline时间线等调试功能。 (1)Trace窗口 进入调试界面后,通过I-jet->Trace选项打开如下界面,将显示通过Trace记录到的CPU上执行的所有指令,支持显示包含汇编代码和C语句的混合视图,便于掌握指令的执行情况。在该窗口中会包含一些高亮图标来指示不同的信息,如函数调用和返回用绿色三角形表示。 中断则以红色图标显示,在某些代码突然跑飞或者产生异常和中断时,我们能够根据这里的指令记录清楚的了解到该异常或者中断触发之前代码的执行情况,进而迅速定位问题原因。减少耗费在问题定位上的时间,能够有效减少项目开发时间。 图1:Trace窗口 为了便于找到关注的问题位置,在Trace窗口中右键即可打开Find搜索窗口,可以迅速跳转到源码关键函数的位置。 图2:Trace的查找功能 (2)Function Trace窗口 Function Trace跟踪窗口能够提供函数级别的函数调用和返回关系,在不想要关注函数内部细节进行问题分析的时候这个窗口非常有用。下图中用红框高亮了main函数的调用和返回位置,蓝色箭头则显示了DoForegroundProcess函数的调用和返回位置。可以通过该视图清晰的掌握在运行过程中函数的调用及返回顺序。 图3:Function Trace窗口 , p5 Q4 K9 u; @' S8 E$ f(3)Timeline时间窗口 除了上述形式的函数分析外,IAR还提供了Timeline视图,能够在时间轴上清晰的展现函数的执行情况,以及各子函数的执行时间,借助Timeline视图,可以清晰的了解函数的调用层级关系,以及函数时序和时间占用方面的信息。 Timeline的时间间隔可以进行调整,放大后可以清晰呈现所想要了解的函数的执行情况,下图中显示了printf函数在执行时子函数的调用层级及执行时间等信息,可以发现printf函数的执行过程中包含多个层级的函数调用,且最终执行的是__dwrite函数。 图4:Timeline窗口) n/ A) V" \, [ * W" m3 ^+ B& z0 @+ ?5 @( L(4)函数分析功能 通过I-jet->Function Profiling打开函数分析窗口,基于Trace记录的数据,可以分析得出执行最多次数的函数,即占用CPU运行时间最多的函数,针对性的对这些函数进行优化可以进一步提升系统性能。使用SWO Trace引脚和采样原理也可以实现该调试窗口,但是如果函数的执行次数很少,则可能由于未被采样到而结果为0。ETM Trace则能够完整记录CPU所执行的所有指令,执行次数较少的函数也能够被记录。 图5:Function Profiling窗口 8 P& v: z. P7 Z/ A1 n9 F* t2 d(5)函数覆盖率分析 在源码测试过程中,往往需要进行函数覆盖率分析,检查所有的函数是否有被执行到,IAR 函数覆盖率分析能够显示出整个工程、某个C文件和某一个函数内部的执行情况,若所有函数和指令都被执行到了,则显示为绿色,未执行到的部分则以红色显示,部分被执行的则是红绿混合。 通过函数覆盖率分析,可以进一步分析哪些函数分支未被执行到,测试团队可以参考函数覆盖率分析结果针对性的修改测试用例,保证源码的质量。 下图中红色显示的函数即未被执行到,点击跳转到对应源码位置进行进一步分析,可以发现此处为一个判断语句且该判断条件一直未成立。借助函数覆盖率分析功能,可以进一步提升代码的质量。 图6:代码覆盖率窗口7 a5 B t; P' ^/ w' F6 x0 j* c 9 y$ r! a' g3 X 总结 借助I-jet Trace及IAR提供的丰富的调试功能,可以帮助用户发现应用代码中的问题,提供代码质量。 * Q1 p1 `( p1 c( L! X |
意法半导体与高通达成无线物联网战略合作
【Hot!】STM32全系列开发板都支持Arduino开发,你知道吗?
STM32 以太网 MAC Loopback 的实现
【经验分享】STM32 HAL库移植FreeModbus详细步骤
《RT-Thread设备驱动开发指南》书籍学习记录
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
【STM32H7S78-DK评测】XIP模板问题处理与电机控制
ST 微控制器电磁兼容性 (EMC) 设计指南