【发布时间】:2013-06-25 03:37:59
【问题描述】:
我正在用 C 语言编写嵌入式系统,我定义了一个包含两个常量成员“val”和“ptr”的结构。
typedef struct{
const u8 val;
u8 *const ptr;
}TEST;
如果我将这种类型变量声明为全局变量,该变量是放在 ROM 中还是 RAM 中?
TEST var;
谢谢
【问题讨论】:
-
为什么要存储在ROM中。内存分配在堆栈或堆中!!!请提及您使用的语言,因为内存分配因语言而异。
-
我正在用c语言编写嵌入式系统,我知道如果声明“u8 var”,所有变量都将放在RAM中,如果声明“const u8 var”,则放在ROM中。但是我不确定当我声明一个如上所述的全局结构变量时,具有常量成员的结构是否会将其成员放在 RAM 或 ROM 中。谢谢。
-
请在问题中添加适当的标签,以便适当的人指导您。
-
这取决于您的系统——阅读手册。初始化变量后,您将无法修改
TEST.ptr,因此它将始终为空指针(因为您没有提供任何显式初始化,所以它全为零)。这可能不是你的想法。变量不应该在 ROM 中;TEST.val可以在运行时修改。你的编译器可能有其他想法... -
由于您必须依赖于您的结构的完整实例可通过单个指针访问这一事实,因此您的 const 成员至少必须在与 const 成员相同的内存区域中可访问。为此,我假设如果一个成员在 ROM 中而另一个成员在 RAM 中,则内存管理器(如果有的话)不够聪明,无法确保正确的访问地址。
标签: c variables embedded system structure