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 значениями.

Другие вопросы по тегам