Есть структура вида:
#pragma pack(1) typedef struct{ int a; int b; char c; }card_conf_t;
Ожидаю, что ее размер 9 байт и, действительно, sizeof() именно такое число и дает. А вот в ассемблерном листинге компилятор пишет:
// 19 card_conf_t card_conf; card_conf: DS8 12
Вопрос, почему он (компилятор) резервирует 12 байт?
Я пытаюсь разместить во flash впритык две структуры и получается, что они друг на друга наезжают
#pragma location=CONF_UDAT_ADDR __no_init card_conf_t card_conf; #pragma location=(CONF_UDAT_ADDR+sizeof(card_conf_t)) __no_init user_data_t user_data[3];
// 18 #pragma location=CONF_UDAT_ADDR ASEGN DATA_AN:DATA:NOROOT,0132a00H // 19 __no_init card_conf_t card_conf; card_conf: DS8 12
// 20 #pragma location=(CONF_UDAT_ADDR+sizeof(card_conf_t)) ASEGN DATA_AN:DATA:NOROOT,0132a09H <-- Правильный адрес, вычисленный при пом. sizeof() // 21 __no_init user_data_t user_data[3]; user_data: DS8 21692
Пользуюсь IAR EWARM v4.40А IAR C/C++ Compiler for ARM 4.40.1.201
|