Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно выровнять внутри структуры ?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > AVR32
inventor
Делаю проект внутри AVR Studio
что то мне говорит, что компилятор все выравнивает по 4 байта

у меня есть структура, описаная примерно так:

CODE
typedef struct {
u8 len; /* Длина пакета без контрольной суммы */
u32 sec;/* Таймер - время первого измерения */
u16 msec;/* миллисекунда первого измерения в пакете */

struct { /* Акселерометр - три координаты ускорений */
u32 acc_x;
u32 acc_y;
u32 acc_z;
} data[20];
u16 crc16;
} acc_pack;


не хочет он писать внутрь u16, гадит.
другие подобные структуры, где вперемешку идут u8 u16 u32 так же гадятся.
есть какое нибудь решение для этого компилятора, подобные #pragma pack(1)?

jasper
Компилятор все равно же GCC.
Пишите #pragma pack( 1 )
inventor
Цитата(jasper @ Apr 25 2012, 06:45) *
Компилятор все равно же GCC.
Пишите #pragma pack( 1 )

не работает pragma pack
на avrfreaks.net подсказали:

Declare your structs like this:

Code:
CODE

typedef struct
{
...
....
...

}__
attribute__ ((packed)) tstSomeStruct;
piroman
Столкнулся с похожей проблемой в IAR. Тоже выравнивает структуру по 4 байта. Выход такой:
Код
__packed typedef struct
{
...
};
piroman
Цитата(piroman @ Oct 27 2012, 19:20) *
Столкнулся с похожей проблемой в IAR. Тоже выравнивает структуру по 4 байта. Выход такой:
Код
__packed typedef struct
{
...
};


Не, вот так :
Код
typedef __packed struct
{
...
};


Или #pragma pack(1)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.