我正在尝试为armv4t芯片编译这个内联代码,
asm ("LDR R2, =a1");
gcc回复说
无效的文字常量:池需要更近
我试图在功能附近移动a1,但仍然是同样的错误。
如何解决此错误?
答案 0 :(得分:0)
刚从ARM网站(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0041c/Babbfdih.html)窃取:
从pc到文字池中的值的偏移量必须小于4KB。您有责任确保范围内有文字池。有关更多信息,请参阅LTORG指令。
所以可能变量a1
被定义在这个4k之外的某个地方,这就是汇编程序认为无效的所以它会生成错误信息。
http://www.freertos.org/FreeRTOS_Support_Forum_Archive/February_2006/freertos_ARM_Error_invalid_literal_constant_pool_nee_1448037.html和ARM + gcc: don't use one big .rodata section
有更多信息其他一些来源(http://www.mikrocontroller.net/topic/68111 - 德语)建议将标志-ffunction-sections
添加到编译器中。