出现下述错误时,是由于“LDR R0, OSIntExIt”中的地址范围超过了4K(0xfff)!解决的方法有两种。
1> 是将LDR指令改成LDR大范围的地址读取伪指令“LDR R0, =OSIntExIt”(我选择了这种),另外其它没有出现错误的这种指令也改成这种形式。
注:前者的LDR是ARM的装载寄存器指令,而后者的LDR是ARM汇编语言伪指令。
2> 用“OS_IntExIt DCD OSIntExIt”指令将OSIntExIt的常数地址放在数据缓冲区中,再将原来的改成“LDR R0, OS_IntExIt”指令,读取常数地址。其实第1种方法如果超出了4K的地址范围时,也会生成这种形式的指令,详情请参考ARM体系结构等方面的书。
Error : L6286E: Value(0x3e48) out of range(0 - 0xfff) for relocatIon #19 (wrt symbol OSIntExIt) In OS_CPU_A.o(OS_CPU_A)
Error : L6286E: Value(0x3ecc) out of range(0 - 0xfff) for relocatIon #24 (wrt symbol OSIntExIt) In OS_CPU_A.o(OS_CPU_A)
另外以前做MTK时也遇到过这种报错,当时是没有包含头文件,加上头文件之后就可以编过了