GCC:无效的文字常量:池需要更近

GCC:无效的文字常量:池需要更近,gcc,arm,Gcc,Arm,我正在为armv4t芯片编译内联代码 asm ("LDR R2, =a1"); 海湾合作委员会答复说 无效的文字常量:池需要更近 我试图将a1移到函数附近,但仍然出现相同的错误 如何修复此错误?刚刚从ARM站点()被盗: 从pc到文字池中的值的偏移量必须小于4KB。您负责确保范围内存在文字池。有关更多信息,请参阅LTORG指令 因此,变量a1可能是在这个4k之外的某个地方定义的,这是汇编程序认为无效的,因此它会生成错误消息 在和上有更多信息 一些其他来源(-German)建议将标志-ffu

我正在为armv4t芯片编译内联代码

asm ("LDR   R2, =a1");
海湾合作委员会答复说

无效的文字常量:池需要更近

我试图将a1移到函数附近,但仍然出现相同的错误


如何修复此错误?

刚刚从ARM站点()被盗:

从pc到文字池中的值的偏移量必须小于4KB。您负责确保范围内存在文字池。有关更多信息,请参阅LTORG指令

因此,变量
a1
可能是在这个4k之外的某个地方定义的,这是汇编程序认为无效的,因此它会生成错误消息

在和上有更多信息


一些其他来源(-German)建议将标志
-ffunction sections
添加到编译器中。

a1
是寄存器名;你能试试另一个标签看看是否有效吗?您是指标签还是值
0xa1
?您可以使用,
asm(“ldr r2,=a1\nb 1f\n.ltorg\n 1:\n”)
,它应该总是可以工作的,但通常您不需要它。既然您使用的是gcc,那么使用扩展asm并将a1作为输入如何?谢谢大家的帮助。到目前为止,添加-ffunction节标志对我来说是有效的,但是.ltorg不起作用。