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

 
 
 
Reply to this topicStart new topic
> Как правильно выровнять внутри структуры ?
inventor
сообщение Apr 24 2012, 11:21
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Делаю проект внутри AVR Studio
что то мне говорит, что компилятор все выравнивает по 4 байта

у меня есть структура, описаная примерно так:

CODE
typedef struct {
u8 len; /* Длина пакета без контрольной суммы */
u32 sec;/* Таймер - время первого измерения */
u16 msec;/* миллисекунда первого измерения в пакете */

struct { /* Акселерометр - три координаты ускорений */
u32 acc_x;
u32 acc_y;
u32 acc_z;
} data[20];
u16 crc16;
} acc_pack;


не хочет он писать внутрь u16, гадит.
другие подобные структуры, где вперемешку идут u8 u16 u32 так же гадятся.
есть какое нибудь решение для этого компилятора, подобные #pragma pack(1)?

Go to the top of the page
 
+Quote Post
jasper
сообщение Apr 25 2012, 03:45
Сообщение #2


Народный чинитель
***

Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811



Компилятор все равно же GCC.
Пишите #pragma pack( 1 )
Go to the top of the page
 
+Quote Post
inventor
сообщение Apr 25 2012, 12:05
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(jasper @ Apr 25 2012, 06:45) *
Компилятор все равно же GCC.
Пишите #pragma pack( 1 )

не работает pragma pack
на avrfreaks.net подсказали:

Declare your structs like this:

Code:
CODE

typedef struct
{
...
....
...

}__
attribute__ ((packed)) tstSomeStruct;
Go to the top of the page
 
+Quote Post
piroman
сообщение Oct 27 2012, 15:20
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 27-09-12
Пользователь №: 73 712



Столкнулся с похожей проблемой в IAR. Тоже выравнивает структуру по 4 байта. Выход такой:
Код
__packed typedef struct
{
...
};
Go to the top of the page
 
+Quote Post
piroman
сообщение Oct 28 2012, 06:01
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 27-09-12
Пользователь №: 73 712



Цитата(piroman @ Oct 27 2012, 19:20) *
Столкнулся с похожей проблемой в IAR. Тоже выравнивает структуру по 4 байта. Выход такой:
Код
__packed typedef struct
{
...
};


Не, вот так :
Код
typedef __packed struct
{
...
};


Или #pragma pack(1)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 06:08
Рейтинг@Mail.ru


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