为什么结构化内存使用随机字符来初始化? (嵌入式)

使用带有NXP MKL02Z16VFM4的MCUXpresso作为参考。

当我这样声明一个结构

typedef struct {
        uint8_t DATA :8;
} myStruct;
myStruct xxx __attribute__ ((section ("xyz")));

内存中的位置填充有随机字符。处理器是小端的,因此当我尝试访问该地址时,会得到那些随机字符和已写入该结构的数据。

//At address 0x1FFFFE84 : BD84D1E4

xxx.DATA = 0xAA; //Assign some numbers to struct

//Now,0x1FFFFE84 : BD84D1AA

我可以使用memset清除内存,但是我想知道为什么在声明结构时内存中充满了这些随机字符。

liran911 回答:为什么结构化内存使用随机字符来初始化? (嵌入式)

您已经在xxx节中明确地找到了xyz-该节对于编译器和默认启动代码而言是未知的,因此无需将零初始化为默认bss段将。对于大多数易失性内存技术,内存在加电时具有不确定的内容,因此在这种情况下显然是随机的。

如果您期望私有部分的初始化为零,则需要在链接描述文件和/或启动代码中明确添加。但是,围绕该结构的未使用存储器的内容或其中的任何对齐填充都是无关紧要的,并且明确地将其清除为某个已知值是不必要的。

,

在代码中使用结构变量之前,实际上需要初始化任何ANY变量。访问(读取)未初始化的数据会导致未定义的行为,这意味着不保证编译器将以可预测的方式运行。

大多数编译器设置为0未初始化的变量,但其他一些编译器(例如某些嵌入式编译器)则没有。这就是为什么您看到随机值的原因。

本文链接:https://www.f2er.com/3079349.html

大家都在问