我在标题中初始化数组时遇到了一个有趣的问题。
我有:
static u32 TxBuffer_Data[MAX_PKT_LEN_WORDS] = { 10 };
static u32 RxBuffer_Data[MAX_DMA_RX_FIFOMODE_WORDS] = { 0 };
现在,我希望两者都在嵌入式处理器的.data部分内,即在编译时分配并初始化,理想情况下为零。
现在,根据How to initialize all members of an array to the same value?,此处的语法是正确的。
当我运行我的代码时,我获取这两个缓冲区的地址,Txbuffer确实在.data区域内,但是RxBuffer在.bss内,它是为非初始化编译时分配的变量保留的。如果我将{0}更改为{10},则RxBuffer会正确放入.data部分。
为什么我不能将数据初始化为零并仍然将其定义为已初始化?
感谢。 编
答案 0 :(得分:2)
bss部分中的数据是零初始化的。将数组声明为:
static u32 RxBuffer_Data[MAX_DMA_RX_FIFOMODE_WORDS] = { 0 };
或
static u32 RxBuffer_Data[MAX_DMA_RX_FIFOMODE_WORDS];
实际上是一样的。在这两种情况下,数组都是零初始化的,很可能编译器会将数组放在bss中。