You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Trace32 CMM脚本sYmbol.NEW与Data.Set命令含义解析

Trace32 CMM 脚本片段逐行解析

这几行脚本是ARM Cortex-M架构嵌入式调试时,启动阶段手动构造基础向量表的典型写法,各命令含义和执行逻辑如下:

sYmbol.NEW 系列命令说明

sYmbol.NEW的作用是手动向Trace32的调试符号表新增自定义符号,不需要依赖编译产出的ELF/AXF文件加载符号,后续脚本可以用易读的别名代替硬编码地址,方便维护修改。

  • sYmbol.NEW _VectorTable 0x34000000:新增符号_VectorTable,绑定物理地址0x34000000,该地址通常是芯片启动时默认读取向量表的存储映射地址,多为QSPI Flash、NOR Flash的XIP映射基址或者片上SRAM起始地址。
  • sYmbol.NEW _ResetVector 0x34000020:新增符号_ResetVector,绑定地址0x34000020,对应复位中断服务函数的实际入口地址。
  • sYmbol.NEW _InitialSP 0x34000100:新增符号_InitialSP,绑定值0x34000100,该值是系统启动后要设置的初始栈指针地址。

Data.Set 命令规则、作用与执行逻辑

Data.Set是Trace32中最常用的目标内存写入命令,核心作用是控制调试器通过指定访问通路,向目标板的指定内存位置按要求写入数据,在启动调试、内存篡改、测试用例构造场景下使用频率极高。

基础语法规则

Data.Set <访问通路>:<起始地址> <宽度修饰符> <写入数据列表>
各参数定义:

  • 访问通路:指定调试器访问目标内存走的硬件通路,示例中EAXI是ARM架构Trace32的常见通路名,代表绕过CPU的MMU、MPU、Cache逻辑,直接通过AXI总线访问物理内存,适合上电初期MMU/缓存未初始化的阶段,避免因内存配置未完成触发访问异常。如果省略该参数,默认走CPU正常内存访问通路,会经过MMU地址映射、缓存策略判断。
  • 起始地址:内存写入的起始位置,支持直接写数值、绑定了地址的符号名。
  • 宽度修饰符:指定单个写入数据的位宽,示例中%Long代表单个数据为32位(4字节),常用的修饰符还有%Byte(8位)、%Word(16位)、%Quad(64位),不指定时默认使用当前CPU架构的默认访问位宽。
  • 写入数据列表:从起始地址开始,按指定宽度连续写入的数值序列,支持常量、符号名、符号算术运算,Trace32执行时会自动把符号替换为绑定的数值参与计算。

示例命令的实际执行逻辑

Data.Set EAXI:_VectorTable %Long _InitialSP _ResetVector+1执行时会完成两个32位数据的写入:

  1. 向物理地址0x34000000~0x34000003写入32位值0x34000100,对应Cortex-M架构向量表第一个表项的要求:存储初始栈指针值。
  2. 向相邻的物理地址0x34000004~0x34000007写入32位值0x34000021(即_ResetVector绑定的0x34000020加1)。这里加1是Cortex-M架构的硬性要求:Thumb指令集下跳转地址的最低位必须置1,用来标识CPU运行在Thumb状态,否则会触发用法fault导致跑飞,内核取到该值后会自动将最低位清零再跳转到复位函数执行。

整段脚本的最终效果是在启动阶段、正式固件还没运行前,手动在指定内存位置构造出符合Cortex-M硬件要求的最小向量表,保证CPU复位后能拿到正确的栈地址和复位入口,顺利跳转到调试代码执行。

内容的提问来源于stack exchange,提问作者Equation Solver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:49:15