есть объявление структуры
Код
...
typedef __packed struct
{
BYTE Signature:7;
BYTE Answer:1;
BYTE Owner;
BYTE Command;
BYTE Error;
BYTE PacketID;
WORD PacketSize;
} TPackHead;
...
и далее в коде
Код
...
if( RECV_SIZE == sizeof(TPackHead) )
{
if( ((TPackHead*)USART_BUF)->Answer == 0 )
{
...
Такая конструкция используетсяв 2-х проектах:
В одном проекте sizeof(TPackHead) == 7 (что есть правильно)
В другом sizeof(TPackHead) == 9 (о_О).
Я так понимаю что это компилятор насовал в структуру доп. элементы для выравнивания,
но вроде как деректива __packed при объявлении должна запретить ему такую самодеятельность...
Как заставить компилятор не выравнивать члены структур?!?!?!
Компилятор RealView MDL 3.24.
Всем спасибо вопрос снят!
Оказыватся WORD был объявлен как
Код
typedef unsigned int WORD;
эт все перекочевало с 8 битной платформы...второй раз уже втыкаюсь
Сообщение отредактировал kosyak© - Sep 3 2009, 09:50