【发布时间】:2019-11-18 16:32:01
【问题描述】:
将 MCUXpresso 与 NXP MKL02Z16VFM4 一起使用以供参考。
当我这样声明一个结构时
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来清除内存,但是我想知道为什么在声明一个结构体的时候,内存会被这些随机字符填满。
【问题讨论】:
-
C 标准中没有任何内容需要初始化内存,程序员负责。
-
地址
0x1FFFFE84有什么意义?那一定不是xxx.DATA的地址。 -
如果您陈述了您的期望和原因,会更容易回答您的问题。目前尚不清楚您需要向您解释什么 - 您引用了一个案例,该案例完全符合人们的期望,但不清楚您想要解释什么。
-
@yano : 没有初始化器的静态存储类的数据需要进行零初始化。鉴于
__attribute__,这似乎是一个全局声明,因此是静态的。或许这就是“惊喜”的来源?部分分配将破坏零初始化。 -
@Clifford 啊,是的,这是有道理的,可能是。
标签: c memory embedded nxp-microcontroller