У меня возникла интересная проблема, инициализирующая массив внутри моего заголовка.Инициализация массива в 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?.
Когда я запускаю свой код, я захватываю адреса этих двух буферов, Txbuffer действительно находится в области .data, однако RxBuffer находится в пределах .bss, который зарезервирован для неинициализированных переменных времени компиляции. Если я изменю {0} на {10}, то RxBuffer будет правильно помещен в раздел .data.
Почему я не могу инициализировать данные нулями и все еще определять их как инициализированные?
Спасибо. Ed
Какой компилятор вы используете? Какие флаги оптимизации у вас есть? Возможно, потому что вы инициализируете весь массив до нуля, а BSS также инициализируется до нуля, он сделал небольшую «оптимизацию», поставив массив в BSS? –
Лучше не помещать их в заголовок в любом случае, а в самом модуле, с объявлениями 'extern' в заголовке. –