文字池太远?

Literal Pool too Distant?

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

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

一个好的地方是在给出错误的函数结束之后(或者在函数的入口标签之前)。如果距离仍然超过 4K,那么您需要在您的函数中找到一个无条件分支或 return 指令,您可以将其放在后面。如果没有这样的指令,那么您将不得不插入一个无条件分支指令,该指令除了跳过代码中某处的 LTORG 语句外什么都不做。