Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Упаковка структуры данных в PIC24
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
west329_
Контроллер PIC24FJ64GA002

Код
typedef struct PPP_Header {
  unsigned char        StartMarker;
  unsigned int         Framing;
  unsigned int              Protocol;
  unsigned char             Request;
  unsigned char             Id;
  unsigned int         Length;
  unsigned char             FirstOption;
  unsigned char             FirstOptionLength;
  unsigned char*     Data;
} T_PPP_Header;


Структура взята из 8 битных АВР, как оказывается неправильно работает на 16битных пик
Первый unsigned char StartMarker съедает 2 байта согласно архитектуре, последующие данные сдвигаются соответственено.
Можно ли как то обойти такое, и обращаться побайтно ?
Ruslan1
Цитата(west329_ @ Apr 4 2011, 22:56) *
Структура взята из 8 битных АВР, как оказывается неправильно работает на 16битных пик
Первый unsigned char StartMarker съедает 2 байта согласно архитектуре, последующие данные сдвигаются соответственено.
Можно ли как то обойти такое, и обращаться побайтно ?

что значит "неправильно" ? код хакерского вида не работает? Чего именно Вы хотите?
Если просто доступаться к данным, так используйте указатели на поля, преобразуя их в char*. но гораздо лучше каждое такое поле через union объявить еще и как массив чаров , так нагляднее.
Если сохранить как массив, то размер этой структуры выясняется через sizeof().
если все-таки хотите просто упаковать- так нужно смотреть компилятор, может и получится без выравнивания.
testerplus
Цитата(west329_ @ Apr 4 2011, 23:56) *
Можно ли как то обойти такое, и обращаться побайтно?

Почитайте в мануале про атрибут packed:
Код
typedef struct __attribute__((packed)) PPP_Header
{
    ...

Но в некоторых случаях при неаккуратной работе с такими структурами (например при попытке обращения к полям через указатель) можно нарваться на трап "ошибка адреса".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.