C Инициализировать структуру с помощью = { { '?', '?', '?', '?' } };
То, что я пытаюсь сделать, это инициализировать структуру с большим количеством шестнадцатеричных данных, хранящихся в отдельной части памяти устройства, в конечном итоге эти данные будут записаны в память другими способами, но сейчас я хочу вручную инициализировать структуру для использования в моем проекте.
Проект, над которым я работаю, имеет следующие строки кода (которые компилируются в студии Atmel).
typedef struct configData_t
{
uint8_t version[4]; // ASCII
uint8_t numIn;
uint8_t numOut;
uint8_t numKey;
uint8_t numTest;
uint8_t numAuto;
controlModuleConfig_t homeConfig;
inputModuleConfig_t inConfig [MAX_IN];
outputModuleConfig_t outConfig [MAX_OUTPUT];
keypadModuleConfig_t keyConfig [MAX_KEY];
notificationConfig_t testConfig [MAX_TEST];
autoFunctionConfig_t autoConfig [MAX_AUTO];
precheckConfig_t precheckConfig;
sleepConfig_t sleepConfig;
uint16_t audioCrc16;
uint16_t configCrc16;
}
configData_t;
const __attribute__((__section__(".application_footer_data")))
configData_t theConfigData = { { '?', '?', '?', '?' } };
__attribute__ ((section(".application_footer_data")))
const unsigned char configBuffer[28672] = { /* Lots of data e.g. 0x31, 0x30, 0x33,...*/}
Я не видел структуру, инициализированную таким образом, как инициализируется структура theConfigData с помощью { { '?', '?', '?', '?' } }
заявление?
2 ответа
Линия
configData_t theConfigData = { { '?', '?', '?', '?' } };
будет инициализировать каждый элемент version
член данных в значение ASCII '?'
, Остальная часть члена структуры будет инициализирована как "0".
Внешний набор скобок обозначает инициализатор для структуры. Поскольку первый элемент структуры является массивом uint8_t
второй набор фигурных скобок инициализирует элементы этого массива.
Остальные элементы, которые не имеют явного инициализатора, неявно инициализируются всеми 0 значениями.