|
|
  |
Выравнивание структуры |
|
|
|
Apr 15 2015, 06:07
|
Частый гость
 
Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334

|
Доброе утро. У меня есть arm LPC2106. Я новичок. Подскажите как выровнять структуры по 1 байту. CODE struct as { char tm; int tmp; }
|
|
|
|
|
Apr 15 2015, 06:31
|
Группа: Участник
Сообщений: 10
Регистрация: 9-02-15
Пользователь №: 85 032

|
В keil я делаю так: CODE #pragma pack(push, 1) struct as { char tm; int tmp; } #pragma pack(pop)
|
|
|
|
|
Apr 15 2015, 08:19
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
WinARM это GCC, следовательно например вот так Код typedef struct { char tm; int tmp; }__attribute__ ((packed)) _t_as_;
_t_as_ as;
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Apr 15 2015, 08:47
|

Группа: Участник
Сообщений: 6
Регистрация: 23-03-15
Из: Москва
Пользователь №: 85 850

|
Еще можно так :
#pragma pack(push, 1) struct S { unsigned char a; void *p; unsigned char b; } #pragma pack(pop)
Это даёт транслятору команду запомнить текущие параметры упаковки и и переопределить на побайтную, а после, восстановить что были до того.
|
|
|
|
|
Apr 15 2015, 09:43
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Александр С @ Apr 15 2015, 10:47)  Еще можно так : WinARM это настолько древний gcc, что не знал еще такой прагмы и молча игнорировал ее. Появилась она совсем недавно. А автору вопроса можно заодно посоветовать заменить компилятор из WinARM на более современную версию.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 15 2015, 10:17
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(Сергей Борщ @ Apr 15 2015, 12:43)  WinARM это настолько древний gcc, что не знал еще такой прагмы и молча игнорировал ее. Появилась она совсем недавно. А автору вопроса можно заодно посоветовать заменить компилятор из WinARM на более современную версию. Launchpad потдерживает только Cortex.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|