是否存在应将 const 数据加载到 RAM 而不是直接闪存访问的情况

Is there a case when const data should be load in RAM rather then direct flash access

我用过几种类型的微控制器。 当我这样写代码时:

const int var = 5;

通常var保存在flash中。我知道 const 变量并不总是只保存在闪存中。有时(取决于编译器、处理器、pic 等选项)它们在 main 之前从闪存加载到 RAM。有没有一种情况,什么时候最好将 var 加载到 RAM 中?

假设像 ARM Cortex 或 Microchip MIPS(以及许多其他)这样的微控制器架构,RAM 和闪存映射到内部地址的不同部分 space,就像一个巨大的数组。所以从 RAM 中读取的汇编命令与从 Flash 中读取是一样的。这里没有区别。

RAM 和闪存的访问时间应该相差不大,因此我使用过的任何控制器都不需要等待。

我能想到的唯一一种情况是,在写入闪存时,在闪存中存储常量变量可能会导致问题出现在某种引导加载程序应用程序中。当然,写入您正在执行的闪存范围是一个坏主意,并且会导致比覆盖 const 值更严重的问题。

很多微控制器都有统一的地址space,但有些(比如AVR)没有。当有多个地址 space 时,您可能需要使用不同的指令来访问这些 space 中的数据。 (对于 AVR,必须使用 LPM(加载程序存储器)指令来访问闪存中的数据,而不是普通的 LD(加载)指令之一。)

如果您想象一个指向 const 变量的指针,接收该指针的函数将无法访问数据,除非它知道该指针指向哪个地址 space。在这种情况下,您要么必须将数据复制到 RAM,即使它是 const,要么指针的用户必须知道使用哪条指令来访问数据。