1. 课程导入与TRACE32环境搭建
在嵌入式RTOS调试中,任务切换、中断嵌套、优先级反转、栈溢出等问题往往只在毫秒甚至微秒级的时间窗口内暴露。仅靠串口打印或GPIO翻转,很难还原“谁在什么时候抢占了谁、为什么中断延迟突然变大”这类时序因果。TRACE32(Lauterbach)作为硬件辅助调试工具,通过片上调试接口直接读写CPU寄存器、内存和跟踪缓冲区,能够在不改变目标程序运行逻辑的前提下,观察RTOS内核对象与中断控制器的真实状态。本课程后续所有任务分析、中断延迟测量、栈使用率统计,都建立在正确搭建的TRACE32环境之上。
1.1 TRACE32工具链的组成
TRACE32并不是单一软件,而是一套由硬件探针、主机软件和可选跟踪模块构成的调试系统。理解各部分的职责,才能在连接失败时快速定位问题出在哪一层。
核心组件包括:调试探针(Debug Probe),如PowerDebug、uTrace、CombiProbe等,负责将主机USB/Ethernet命令转换为JTAG、SWD、Aurora或TracePort等目标接口时序;TRACE32软件(PowerView),运行在Windows或Linux主机上,提供命令窗口、寄存器窗口、内存窗口、符号浏览器和脚本引擎;RTOS调试插件,即各类rtos_*.cmm或*.men扩展脚本,用于解析FreeRTOS、ThreadX、Zephyr、RT-Thread等内核的链表结构;跟踪模块,如TraceRecorder或ETM/PTM跟踪,用于记录指令流和时间戳,是分析中断延迟与任务切换的关键。
软件侧还包含调试符号文件(ELF/AXF/OUT)和目标初始化脚本(.cmm)。符号文件提供函数名、变量地址和结构体布局;初始化脚本负责复位目标、配置时钟、初始化SDRAM控制器,使调试器能在系统启动前接管CPU。
1.2 目标板连接配置
连接配置的核心是让探针与目标CPU的调试接口在电气和协议上匹配。以Cortex-M7目标板为例,典型配置流程如下。
首先确认目标板调试接口的参考电压VTref。多数探针通过VTref引脚检测目标I/O电平,若目标板未上电或VTref低于1.2V,PowerView会报“target power fail”。此时应检查目标板供电,而不是反复插拔探针。
其次选择接口类型。Cortex-M常用SWD两线制(SWCLK、SWDIO),Cortex-A/R常用JTAG四线制。在PowerView中通过SYStem.CONFIG命令族设置:
SYStem.CONFIG DEBUGPORT SWD ; 选择SWD接口
SYStem.CONFIG SWCLK 4000 ; SWCLK频率4MHz
SYStem.CONFIG VTREF 3300 ; 参考电压3.3V
SYStem.CPU CortexM7 ; 指定CPU内核
SYStem.Mode Attach ; 附加模式,不复位目标
若目标程序已在运行且不希望复位,使用Attach模式;若需要从复位向量开始调试,使用Up模式。对于RTOS在线分析,通常先用Attach接管运行中的系统,避免破坏已发生的任务状态。
1.3 调试符号加载与工程创建
符号加载是RTOS分析的前提。没有符号,TRACE32只能看到地址和十六进制数据,无法识别pxCurrentTCB、uxTopReadyPriority等内核变量。加载命令为:
Data.LOAD.Elf D:\project\build\rtos_demo.elf /NoClear
/NoClear表示加载符号时不擦除已设置的内存断点。加载成功后,可用sYmbol.List查看符号表,或用sYmbol.Browse打开符号浏览器。若符号文件与目标程序版本不一致,会出现函数名错位,表现为单步执行跳转到无关代码,此时必须重新编译并加载匹配的ELF。
工程创建建议按以下结构组织工作目录:
config/:存放target_setup.cmm、rtos_freertos.cmm等初始化脚本;symbols/:存放ELF/AXF符号文件;scripts/:存放任务栈分析、中断延迟测量等自定义脚本;logs/:存放TraceRecorder导出的跟踪数据。
在PowerView中通过DO config\target_setup.cmm执行初始化脚本,可将上述连接配置和符号加载固化为可重复的一键流程。
1.4 基本命令窗口使用
PowerView命令窗口是后续所有操作的入口。常用命令按功能分为四类:
| 类别 | 命令示例 | 用途 |
|---|---|---|
| 系统控制 | SYStem.Up / SYStem.Down | 连接或断开目标 |
| 运行控制 | Go / Break / Step | 启动、暂停、单步 |
| 数据访问 | Data.dump 0x20000000 | 查看内存 |
| 符号访问 | sYmbol.EXAMINE pxCurrentTCB | 查看变量地址与值 |
命令窗口支持PRINT输出和Var.View变量窗口联动。例如执行Var.View %Hex pxCurrentTCB,可在变量窗口中持续观察当前任务控制块指针的变化,为后续任务切换分析提供实时视图。
SYStem.Up反复复位一个正在运行RTOS的目标板。复位会清空内核链表和就绪位图,导致已捕获的任务状态丢失。在线分析优先使用Attach。完成以上四步后,可用一条组合命令验证环境是否就绪:sYmbol.EXAMINE pxCurrentTCB能返回有效地址,且Var.View中能看到任务名,说明探针、符号和RTOS插件均已正常工作。此时环境已具备后续任务栈分析、中断延迟测量和TraceRecorder跟踪的基础条件。