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

 
 
> Keil для ARM и выравнивание в структурах
kosyak©
сообщение Sep 3 2009, 09:37
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



есть объявление структуры
Код
...
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

Сообщение отредактировал kosyak© - Sep 3 2009, 09:50
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
esaulenka
сообщение Sep 3 2009, 09:45
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

Код
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.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

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

 


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


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