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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:44:55