私のヘッダー内の配列を初期化するのに面白い問題があります。Cの配列の初期化
は私は:
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?のとおりです。
私は自分のコードを実行すると、これらの2つのバッファのアドレスを取得します.Txbufferは実際には.data領域内にありますが、RxBufferは初期化されていないコンパイル時に割り当てられた変数のために予約されています。 {0}を{10}に変更すると、RxBufferは.dataセクションに正しく挿入されます。
なぜデータをゼロに初期化できず、初期化済みとして定義されているのですか?
ありがとうございました。 Ed
どのコンパイラを使用していますか?どのような最適化フラグがありますか?たぶん、配列全体をゼロに初期化し、BSSもゼロに初期化するので、配列をBSSに入れて小さな「最適化」をしましたか? –
ヘッダーには入れない方がいいですが、ヘッダーに 'extern'宣言を付けてモジュール自体に入れてください。 –