Перейти к содержанию
    

Упаковка структур в Linux-64

Господа, подскажите как мне правильно сделать:

 

/**
* Пакет данных на отправление - 20 измерений акселерометра -  240 байт, упакован на 1!!!
*/
#pragma pack(1)
typedef struct {
   u8 len;			/* Длина пакета без контрольной суммы */
   u8 adc;			/* Номер работающих АЦП - четыре бита подряд */
   u16 msec;			/* Миллисекунда первого измерения */
   u32 sec;			/* UNIX TIME первого измерения */

   struct {			/* 3-х байтный пакет (* 4) */
unsigned x:24;
unsigned y:24;
unsigned z:24;
unsigned h:24;
   } data[NUM_ADS1282_PACK];

   u16 rsvd;			/* Выравнивание, чтоб по 4 байтному адресу все было */
   u16 crc16;			/* Контрольная сумма пакета  */
} ADS1282_PACK_STRUCT/* __attribute((packed)) */;

ни #pragma pack(1)

ни __attribute((packed))

не хотят работать. размер структуры 252 байт, при компиляции в Linux-64 пишет что 256

и ругается что мол атрибут packed проигнорирован

как все это правильно упаковать в этой операционке?

 

Все решено :)

1) u32 у меня ошибочно был объявлен дефиницией как unsigned long, надо было uint32_t

2) структура внутри структуры то же должна быть с __attribute__((packed))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...