QUOTE (alt3857 @ May 11 2011, 15:10)

какие способы есть, чтобы структуры packed не использовать?
В общем случае задача не решается. Можно вручную создать по массиву описателей полей для каждого типа структур и по этому описателю упаковывать/распаковывать структуру во время обмена. Что-то вроде:
CODE
#include <stddef.h>
#include <stddef.h>
struct my_type
{
uint8_t Field_a;
uint_fast8_t Field_b; // !!!
uint16_t Field_c;
uint32_t Field_d;
};
struct field_descriptor
{
uintptr_t Offset;
size_t Size;
};
field_descriptor My_type_fields[] =
{
{ offsetof(my_type, Field_a), 1 },
{ offsetof(my_type, Field_b), 1 },
{ offsetof(my_type, Field_c), 2 },
{ offsetof(my_type, Field_d), 4 },
};
Можно по аналогии с offsetof() написать макрос определения размера поля. Но он не подойдет для типов вроде uint_fast8_t, для них придется указывать вручную. Можно написать макрос, заполняющий оба поля field_descriptor. Простор для творчества.