Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil для ARM и выравнивание в структурах
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
kosyak©
есть объявление структуры
Код
...
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.gif
esaulenka
Дурацкий вопрос: а что будет в памяти, если сделать

Код
struct TPackHead head;

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

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



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

Заинтересовался. Что тут в хелпе обещают? Выравнивание - по байтам, что-ли?
Цитата
Bitfield containers in packed structures have an alignment of 1.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.