C 指针声明(非易失性内存)初始化(易失性内存)

C 指针声明(非易失性内存)初始化(易失性内存),c,arm,microcontroller,C,Arm,Microcontroller,考虑具有以下数据成员的结构: struct Data { unsigned int count; const char *Name; }; 类型为struct Data的变量稍后在代码中创建: PERSISTENT(struct Data log); 其中PERSISTENT()将变量映射到电池供电的SRAM内存空间 当以后在代码(log.Name=“Sensor1”)中指定了Name时,字符串“Sensor1”存储在何处。据我所知,指针名称存储在电池供电的SRAM中,但它

考虑具有以下数据成员的结构:

struct Data
{
   unsigned int  count;
   const char   *Name;
};
类型为
struct Data
的变量稍后在代码中创建:

PERSISTENT(struct Data log);
其中
PERSISTENT()
将变量映射到电池供电的SRAM内存空间

当以后在代码(
log.Name=“Sensor1”
)中指定了
Name
时,字符串
“Sensor1”
存储在何处。据我所知,指针
名称
存储在电池供电的SRAM中,但它指向的字符串是否存储在MCU内存中?如果是这种情况,如果MCU重新启动,字符串将丢失,但指针(存储在电池支持的SRAM中)仍然指向现在为空的地址。是这样吗


此代码在ARM7微控制器(具体为LPC2368)上运行。

字符串文字将存储在
.rodata
段所在的闪存中。

如果不参考特定的MPU,很难说。字符串本身是一个常量对象,因此如果存储在程序或非易失性内存中,则在再次通电时应有效。如果该值存储在其他位置,并在启动时复制到非备份内存中,并且位置可以更改,则该值当然无效。LPC2368。有多个字符串可以分配给*Name。如果在再次通电时分配相同的字符串,是否有保证在断电前它将位于相同的地址位置(存储在*名称中)?。我应该在MCU的数据表中寻找什么来找出正确的行为特征?在过去30-40年中制造的每个MCU工具链都在闪存/eprom中存储字符串文字…存储在*Name中的地址,是否属于闪存?Name将是指向存储在闪存中的字符串文字的指针。默认情况下,它将位于指定的节或.bss或.datA中