Перейти к содержанию
    

Keil для ARM и выравнивание в структурах

есть объявление структуры

...
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 битной платформы...второй раз уже втыкаюсь :cranky:

Изменено пользователем kosyak©

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дурацкий вопрос: а что будет в памяти, если сделать

 

struct TPackHead head;

memset (head, 0, sizeof (TPackHead));

head.Signature = 0xFF;
head.Answer = 1;
...
head.PacketSize = 0xFFFF

 

 

Кейл как-то странно себя вёл с битовыми полями. Разбираться не стал, переделал под маски. Впрочем, в той ситуации подозреваю собственные кривые руки :)

 

Заинтересовался. Что тут в хелпе обещают? Выравнивание - по байтам, что-ли?

Bitfield containers in packed structures have an alignment of 1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...