1. 课程导入与TRACE32环境搭建
实时系统性能分析与任务诊断,关注的不是“程序有没有跑通”,而是“任务在时间维度上是否按预期运行”。在汽车电子、工业控制、通信设备等典型实时系统中,一个任务晚到几毫秒、一次中断被长时间屏蔽、一次优先级反转,都可能造成控制环路失稳或通信超时。TRACE32 作为 Lauterbach 的硬件辅助调试与跟踪工具链,能够在不改变目标系统运行行为的前提下,观察任务切换、中断响应、函数执行时间与总线访问,是这类问题定位的核心手段。
本课程的目标可以概括为三层:第一层是“看得见”,即通过 JTAG/SWD 建立稳定的调试连接,能够暂停、单步、读写内存与寄存器;第二层是“看得清”,即通过 ETM/ETB 等跟踪通道获取指令流与时间戳,还原任务与中断的真实执行序列;第三层是“说得准”,即基于跟踪数据计算任务响应时间、CPU 占用率、最大关中断时间等指标,并据此判断系统是否满足实时性约束。本章先完成从工具链认知到工程可用的环境搭建,为后续分析建立可靠底座。
TRACE32 工具链的组成
TRACE32 并不是单一软件,而是一组协同工作的组件。理解它们的分工,才能正确选择连接方式与配置项。
- PowerView(TRACE32 主界面):运行在主机上的调试前端,提供命令、窗口、脚本与 API。所有调试与跟踪操作最终都通过它下发。
- 调试探针(Debug Probe):如 PowerDebug、µTrace 等硬件,负责把主机命令转换为目标芯片可接受的调试时序,并接收跟踪数据。
- 目标接口与协议:JTAG、SWD、cJTAG 等用于调试访问;ETM、ETB、ETM 引脚跟踪等用于指令跟踪;部分芯片还支持通过 Aurora、HSSTP 等高速串行跟踪。
- 跟踪存储与回读:片上 ETB/ETR 缓冲区,或外部跟踪存储器,决定可保存的跟踪深度。
- 目标描述与脚本:芯片初始化脚本、外设寄存器描述、RTOS 感知脚本(如针对 FreeRTOS、AUTOSAR OS 的菜单与符号),决定能否按任务视角查看系统。
需要特别区分“调试连接”和“跟踪连接”。JTAG/SWD 只保证能停住 CPU、读写内存;ETM 等跟踪通道才提供“不停机”的时间序列。若只做断点调试,SWD 足够;若要做任务级性能分析,必须确认芯片是否具备 ETM/ETB,以及探针是否支持对应跟踪协议。
调试连接方式的选择与配置
连接方式的选择取决于“要观察什么”。若只需要设置断点、查看变量,SWD 两线即可完成,接线简单、占用引脚少,适合大多数 Cortex-M 目标。若目标为多核 SoC,或需要访问扫描链上的多个 TAP 控制器,JTAG 更合适。若要做任务级时间分析,则必须启用 ETM:Cortex-M 通常通过 ETM 指令跟踪输出到片上 ETB 或 ETR,再由探针回读;Cortex-A/R 则可能使用 ETM 配合外部跟踪存储器。
实际配置时,一个常见问题是“能连上但跟踪无数据”。这通常不是探针故障,而是跟踪时钟、跟踪引脚复用或 ETB 容量配置不匹配。建议按以下顺序排查:先确认芯片的调试口未被禁用(部分芯片有 Debug Disable 熔丝或选项字节),再确认 SYStem.JtagClock 不高于目标允许值,然后检查 ETM 是否使能、ETB 是否分配了足够空间。若使用 SWD 且引脚复用为 GPIO,还需在初始化脚本中先把调试引脚切回调试功能。
许可证配置与工程创建流程
TRACE32 的许可证通常与探针硬件绑定,通过 License 文件或授权服务器提供。启动 PowerView 后,可用 LICENSE.List 查看当前已授权功能。若缺少 ETM 跟踪或 RTOS 感知选项,相关菜单会灰显或提示未授权。对于团队环境,建议把许可证集中管理,避免每台主机单独维护。
工程创建的核心是“让 TRACE32 知道目标是什么、代码在哪里、如何初始化”。一个可复用的最小流程如下:
; 1. 选择 CPU 与调试接口
SYStem.CPU CortexM7
SYStem.CONFIG DEBUGMODE.JTAG ; 或 SWD
SYStem.JtagClock 10MHz
; 2. 加载目标初始化脚本(时钟、看门狗、引脚复用)
DO ~~/target_init.cmm
; 3. 建立连接并复位
SYStem.Up
SYStem.Mode Go
; 4. 加载符号文件
Data.LOAD.Elf demo.elf /NoClear
; 5. 配置跟踪
Trace.METHOD ETM
Trace.CONFIG.ETB 32768
Trace.ON
; 6. 查看许可证与跟踪状态
LICENSE.List
Trace.STATistic
上述脚本中的频率、ETB 大小和文件名均为示例,实际值需按目标芯片手册与工程配置替换。执行 SYStem.Up 后,若返回错误,应优先检查供电、复位状态和调试口是否被占用。连接成功后,可用 SYStem.Mode Go 让目标运行,再通过 Trace.STATistic 观察是否已产生跟踪数据。
DO 执行。这样既减少重复操作,也保证不同人员使用一致的配置,避免“同一块板子在不同电脑上表现不同”的假象。环境可用性的判断标准
环境搭建是否完成,不能只看“能连上”。建议用四个可观察结果确认:其一,SYStem.Up 成功且能读写内存;其二,Data.LOAD.Elf 后能在符号窗口中看到任务函数名;其三,Trace.ON 后 Trace.STATistic 有非零指令计数;其四,若使用 RTOS 感知,任务列表能正确显示任务名与状态。四项都满足,才具备后续做任务响应时间与 CPU 占用分析的条件。