реклама на сайте
подробности

 
 
> Неправильный размер упакованной структуры?, IAR EWARM
kichkine
сообщение Feb 27 2007, 11:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 3-11-06
Из: Kiev
Пользователь №: 21 933



Есть структура вида:

#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
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016