реклама на сайте
подробности

 
 
> Упаковка структур в Linux-64
inventor
сообщение Apr 8 2014, 09:09
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



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

CODE
/**
* Пакет данных на отправление - 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 проигнорирован
как все это правильно упаковать в этой операционке?

Все решено sm.gif
1) u32 у меня ошибочно был объявлен дефиницией как unsigned long, надо было uint32_t
2) структура внутри структуры то же должна быть с __attribute__((packed))
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 10:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.0136 секунд с 7
ELECTRONIX ©2004-2016