У меня есть следующиеЗаполните массив союзами со значениями в С
/* Size 16 bytes */
typedef struct __attribute__((packed)) {
uint16_t v1; // 2
uint16_t v2; // 2
uint16_t v3; // 2
uint16_t v4; // 2
uint8_t rsvd[6];
uint16_t crc; // 2
} heCell_t;
typedef struct __attribute__((packed)) {
heCell_t c0;
heCell_t c1;
heCell_t c2;
heCell_t c3;
} hePag_t;
typedef union {
hePag_t Page[32];
heCell_t Cell[128];
} heData_t;
Из-за предупреждения GCC: «Неправильная настройка раздел атрибутов .rodata $ Flash3»
для этой линии
const heData_t heData __RODATA(Flash3);
Я должен инициализировать heData с чем-то, что меня устраивает, до тех пор, как все значения будут все (вспышки по умолчанию стертых) 0xFF
const heData_t heData __RODATA(Flash3) = { 0xFF };
Но есть некоторые предупреждения
(near initialization for 'heData.Page[0]') [-Wmissing-braces]
'{0xFF}' будет инициализировать только первый элемент. И вы не можете инициализировать 'union' с помощью некоторого скаляра ... BTW, в чем смысл иметь некоторые неинициализированные данные только для чтения ??? Возможно, вы захотите сделать что-то еще. –
У вас может быть много причин, по которым вы не хотите инициализировать что-то во встроенных. Например. у вас есть большой буфер, который является пустой тратой времени при запуске MCU. Но здесь у меня есть переменная вспышки, и когда MCU стирается, я знаю, что вся область 0xFF. Поэтому нет необходимости инициализировать что-либо. – user1797147
@Eugene Sh. Я уверен, что '{0xFF}' будет инициализировать весь объект, первый с '0xFF', а остальное - с нулевым битом. В C. Частичная инициализация отсутствует. См. Http://stackoverflow.com/q/13104767/2410359 и C11 §6.7.9 21 – chux