文字池太遥远了?

时间:2015-12-03 20:38:01

标签: assembly arm keil

我正在Keil uVision 5环境中的Freescale Freedom KL46Z板上用ARM汇编语言编写代码。我的代码非常冗长,但在代码的主要部分,每当我尝试加载(LDR)常量或变量时,我都会收到此错误: 错误:A1284E:文字池太远,使用LTORG在4KB内组装 我不知道这意味着什么或如何解决它。发生错误的位置都在类似的指令上。例如,第一个错误出现在以下指令上: LDR R1,=时间 其中Time定义为: Time SPACE 4 该实例是一个变量,但它也发生在已定义的常量上。任何人都可以帮我弄清楚如何解决这个错误吗?

1 个答案:

答案 0 :(得分:2)

错误消息或多或少地解释了您需要做什么。将LTORG directive插入到4096字节行内某处的汇编代码中,并给出错误消息。 LTORG语句必须与代码位于同一部分,并且不得位于可能执行的代码路径上。它会导致将常量(文字)插入到会导致崩溃的部分中,否则会导致行为异常。

一个好的地方是在函数结束之后(或在函数的条目标签之前)给出错误。如果它仍然超过4K,那么你需要在你的函数中找到一个无条件的分支或返回指令,你可以把它放在后面。如果没有这样的指令,那么你将不得不插入一个无条件的分支指令,它只会跳过代码中某处的LTORG语句。