Trace32 CMM脚本移位运算符报错求助:符号未找到
Trace32 CMM脚本 "symbol not found" 报错排查
原代码及报错信息
问题代码
&MY_DATA=Data.LONG(ANC:0x300007FF9C8ABC) &CHECK_VAL=&MY_DATA&(1<<&BITPOS) ;this should work IF (&CHECK_VAL==(1<<&BITPOS)) ;this should work
报错信息
IF (&CHECK_VAL==(1<<&BITPOS))
^符号未找到
问题原因
Trace32 CMM脚本不支持C语言风格的位运算符(<<、&),脚本会把这些符号识别为未定义的变量/符号,因此抛出"符号未找到"错误。
修正方案
使用Trace32内置的位操作函数替代C风格运算:
- 左移操作:用
SHL(数值, 移位位数)代替数值<<移位位数 - 按位与操作:用
BAND(数值1, 数值2)代替数值1&数值2
修正后的代码
&MY_DATA=Data.LONG(ANC:0x300007FF9C8ABC) &CHECK_VAL=BAND(&MY_DATA, SHL(1, &BITPOS)) IF (&CHECK_VAL==SHL(1, &BITPOS))
额外注意事项
- 确保
&BITPOS是已提前定义的数值变量(例如&BITPOS=3),否则也会触发符号未找到错误。 - Trace32 CMM脚本的运算逻辑依赖内置函数,所有算术、位操作都要使用对应命令,不能直接套用C语言语法。
内容的提问来源于stack exchange,提问作者Priyajit Ghosh
相关产品推荐
相关产品推荐

