Имеется упакованная структура, которая приходит/уходит по интерфейсу, т.е. от упаковки никуда не деться.
Код
typedef __packed struct {
uint16 params_len;
uint8 params_data[PARAMS_MAX_SIZE];
uint16 in_data_len;
uint16 out_data_len;
} pkt_type;
uint16 params_len;
uint8 params_data[PARAMS_MAX_SIZE];
uint16 in_data_len;
uint16 out_data_len;
} pkt_type;
При передаче в функию указателя как на поле структуры
Код
send_req(..., &input_pkt.params_data[0])
так и на саму структуру
Код
memset(&input_pkt, 0, PACKET_SIZE)
компилятор выдает ошибку
Error: C2906E: <argument x to 'xxxxx'>: implicit cast of pointer loses '__packed' qualifier
Т.е. при взятии адреса упакованной структуры или ее элемента упаковка не учитывается.

Как можно обойти такое поведение компилятора?
Я пока вижу только такой выход:
Определить массив
Код
uint8 raw_packet[PACKET_SIZE];
набор констант
Код
#define PARAMS_LEN_OFS 0
#define PARAMS_LEN_TYPE uint16
...
#define PARAMS_LEN_TYPE uint16
...
и обращаться к массиву
Код
params_len = (PARAMS_LEN_TYPE)raw_packet[PARAMS_LEN_OFS];
Может есть более изящное решение?
UPD:
При явном преобразвании к char *
Код
memset((char *)&input_pkt, 0, PACKET_SIZE)
ошибка пропадает