Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование структур в IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
YuryD
Господа!
Я просмотрел архив, но так и нашел понятного ответа, как взять адрес члена структуры, чтобы, при этом, не появлялся warning "use of address of unaligned structure member". Пример:

typedef struct _task
{
long data1[TOTAL_ID][4];
int data2;
int data3;
} TASK;

TASK task;

Теперь делаю операцию:

long *test = &task.data1[0][0];

И получаю указанный выше warning. Есть способ избавиться от него?
Спасибо.
zltigo
Цитата(YuryD @ Oct 5 2007, 13:20) *
И получаю указанный выше warning. Есть способ избавиться от него?

В данном конкретном случае или не использовать @pragma pack для этой структуры , ибо паковать для 32bit там просто нечего(даже если и есть чего, то во многих случаях скорость важнее), либо давить конкретный warning @pragma diag_suppress=
rezident
#pragma pack(4)
TASK task;
#pragma pack()

long *test = (long *)&task.data1[0][0];
YuryD
Спасибо. Заработало. Я разобрался. В одном из header я обьявил для структуры #pragma pack(1), а #pragma pack() после обьявления не сделал. И, видимо, все дальнейшие структуры данных компилятор честно упаковывал. Указание #pragma pack() сняло эту проблему.
zltigo
Цитата(rezident @ Oct 5 2007, 16:50) *
#pragma pack(4)
TASK task;
#pragma pack()

Только #pragma pack к описаниию структуры относится и спокойнее pragma c push/pop или чем-то аналогичным использовать, а не восстанавливать по умолчанию.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.