指针声明(非易失性存储器)初始化(易失性存储器)
Pointer declaration (non-volatile memory) initialization (volatile memory)
考虑具有以下数据成员的结构:
struct Data
{
unsigned int count;
const char *Name;
};
稍后在代码中创建类型为 struct Data
的变量:
PERSISTENT(struct Data log);
其中 PERSISTENT()
将变量映射到电池供电的 SRAM 存储器 space。
后面在代码中给Name
赋值时(log.Name = "Sensor1";
),字符串"Sensor1"
存放在哪里。据我了解,指针 Name
存储在电池供电的 SRAM 中,但它指向的字符串是否存储在 MCU 内存中?如果是这种情况,如果 MCU 重新启动,字符串会丢失,但指针(存储在电池供电的 SRAM 中)仍然指向现在为空的地址。会是这样吗?
此代码在 ARM7 微控制器(具体为 LPC2368)上 运行。
字符串文字将存储在.rodata
段所在的FLASH内存中。
考虑具有以下数据成员的结构:
struct Data
{
unsigned int count;
const char *Name;
};
稍后在代码中创建类型为 struct Data
的变量:
PERSISTENT(struct Data log);
其中 PERSISTENT()
将变量映射到电池供电的 SRAM 存储器 space。
后面在代码中给Name
赋值时(log.Name = "Sensor1";
),字符串"Sensor1"
存放在哪里。据我了解,指针 Name
存储在电池供电的 SRAM 中,但它指向的字符串是否存储在 MCU 内存中?如果是这种情况,如果 MCU 重新启动,字符串会丢失,但指针(存储在电池供电的 SRAM 中)仍然指向现在为空的地址。会是这样吗?
此代码在 ARM7 微控制器(具体为 LPC2368)上 运行。
字符串文字将存储在.rodata
段所在的FLASH内存中。