Jump to content

    
Sign in to follow this  
inventor

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

Recommended Posts

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

 

/**
* Пакет данных на отправление - 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))

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this