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

 
 
> Работа с упакованными структурами (Си, ARM9)
Harvester
сообщение Nov 13 2013, 08:23
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



ARM9, компилятор ADS 1.2

Имеется упакованная структура, которая приходит/уходит по интерфейсу, т.е. от упаковки никуда не деться.
Код
typedef __packed struct {
  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
Т.е. при взятии адреса упакованной структуры или ее элемента упаковка не учитывается. sad.gif

Как можно обойти такое поведение компилятора?
Я пока вижу только такой выход:
Определить массив
Код
uint8 raw_packet[PACKET_SIZE];

набор констант
Код
#define PARAMS_LEN_OFS   0
#define PARAMS_LEN_TYPE  uint16
...

и обращаться к массиву
Код
params_len = (PARAMS_LEN_TYPE)raw_packet[PARAMS_LEN_OFS];


Может есть более изящное решение?

UPD:
При явном преобразвании к char *
Код
memset((char *)&input_pkt, 0, PACKET_SIZE)

ошибка пропадает

Сообщение отредактировал Harvester - Nov 13 2013, 09:32


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post



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

 


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


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