CCS编译ARM汇编代码时出现[E0001]非法符号错误求助
ARM汇编在CCS中出现[E0001] Illegal symbol错误的解决
错误原因
你在ldr r4, =vector1这类语句中遇到的错误,本质是TI CCS使用的ARM汇编器不支持GNU汇编风格的ldr rX, =symbol伪指令语法。这种语法是GNU ARM汇编用来便捷加载符号地址的方式,但TI的ARM汇编器(TI ARM Assembler)有独立的语法规范,无法识别该写法。
解决方案
方案1:显式定义地址常量池(通用方法)
通过.ref伪指令显式引用全局数据符号,再在函数末尾添加常量池存储符号地址,最后用ldr加载:
dotProduct: .ref vector1, vector2 ; 显式引用全局数据段的符号,让汇编器识别它们 ldr r4, vector1_addr ; 加载vector1的地址到r4 ldr r5, vector2_addr ; 加载vector2的地址到r5 ; 后续的点积计算代码... ; 在函数末尾添加地址常量池,需按4字节对齐 .align 2 vector1_addr: .word vector1 ; 存储vector1的地址值 vector2_addr: .word vector2 ; 存储vector2的地址值
方案2:使用adr指令(符号在PC可达范围时适用)
如果vector1和vector2的存储位置与当前代码段在PC的寻址范围内,可以用adr指令直接生成PC相对地址,写法更简洁:
dotProduct: adr r4, vector1 ; 直接加载vector1的PC相对地址到r4 adr r5, vector2 ; 直接加载vector2的PC相对地址到r5 ; 后续的点积计算代码...
额外说明
确保.data段的vector1和vector2已经通过.global声明为全局符号,你当前的代码这部分是正确的,无需修改。
内容的提问来源于stack exchange,提问作者Boban Ljubicic
相关产品推荐
相关产品推荐

