Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR объявление struct для ARM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Georg_M_B0
У меня IAR Embedded Workbench 5.4 микрокантролер AT91SAM9263.
Делаю вот такое объявление для работы с BMP файлом:

typedef struct _BITMAP
{
unsigned short bfType;
unsigned int bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int bfOffBits;
unsigned int biSize;
unsigned int biWidth;
unsigned int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
unsigned int biXPelsPerMeter;
unsigned int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
unsigned char data[1152000];
} BITMAP;


typedef union _BMPImg
{
unsigned char data[1152054];
BITMAP BMP;
} BMPImg;

BMPImg images;

При просмотре переменных получается картина, поле bfType занемает 4 байта вмета двух соответственно дальше всё сбвинуто, скриншот в файле.
Вопрос такой, это глюк или что то я неправильно делаю, или это связанно с выравниванием памяти?
prottoss
Цитата(Georg_M_B0 @ Mar 19 2011, 20:59) *
Вопрос такой, это глюк или что то я неправильно делаю, или это связанно с выравниванием памяти?
Связано с выравниваем. Если хотите использовать не выровненные структуры, используйте директиву #pragma

Код
#pragma pack(1) /* Выравнивание 1 байт */
typedef struct __MyStruct
{  
    UINT8 a;
    UINT16 b;
    UINT32 c;
    UINT64 d;
} MyStruct, *P_MyStruct;
#pragma pack() /* Выравнивание по умолчанию */
Georg_M_B0
prottoss, спасибо большое, всё заработало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.