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

 
 
 
Reply to this topicStart new topic
> Выравнивание у ИАР для MSP430, - есть глюки
VAI
сообщение Nov 24 2004, 11:03
Сообщение #1


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Применяю в общих для ИАР и Борланда описательных файлах #pragma pack( 2 ). Раньше char-ов в структурах не было, все было ОК. Сейчас вылезло: Если несколько char-ов подряд в структуре, то выравнивание не работает, т.е. работает не так, как надо. Компилятор размещает char-ы с выравниванием по байтам, только последний нечетный выравнивает по слову.
Попробовал поставить #pragma pack( 8 ), 16. Я ожидал, что каждый элемент структуры будет выровнен по этому количеству байт. Хрен мне!
Короче решил не морочиться, и не разбираться, а ставить #pragma pack( 2 ) и char-ы выравнивать вручную добавлением неиспользуемых char-ов.
#pragma pack( 1 ) работает, но уж больно наворачивает компилятор кода на это дело...


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Axel
сообщение Dec 1 2004, 15:07
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Есть такая проблема. Но поскольку с лишними char-ами напряженка, я свожу все объявления в один файл, где сначала объявляю все "четные" типы, потом все "нечетные". Объявления дополняю макросом, позволяющим включать этот файл во все файлы программы, где требуются extern-ы
Go to the top of the page
 
+Quote Post
VAI
сообщение Dec 2 2004, 06:01
Сообщение #3


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



2 Axel
Для "внутреннего" использования - пусть как хочет, так и расставляет. А для корректной работы различного ПО на разных процессорах с одинакого описаными структурами данных, компиляторы должны одинакого воспринимать эти структуры.
Чего в нашем случае нету...
У меня тоже все типы данных, используемые разными платформами, сведены в один заголовочный файл, подключаемый в разных проектах.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Axel
сообщение Dec 2 2004, 06:24
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Я не спорю: у IARа не все здорово. Единственное уточнение - в один файл я свожу не описания типов (их как, правило, тоже, но в другие файлы), а сами переменные.
Go to the top of the page
 
+Quote Post
VAI
сообщение Dec 11 2004, 06:27
Сообщение #5


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



В общем заголовочном файле (для иара и борланда) я сделал так (привожу только проблемную структуру)
Код
#pragma pack( 2 )
typedef struct
{ int reset_status;                     // наличие и работоспособность градусников: биты соответствуют ERR_182x
  volatile unsigned int t_tick;         // при измерении температуры делает ++
  signed char term_f;                   // температура 1
#ifdef  __ICC430__
  signed char for_align0;
#endif  //__ICC430__
  signed char term_q;                   // температура 2
#ifdef  __ICC430__
  signed char for_align1;
#endif  //__ICC430__
  signed char term_m;                   // температура 3
#ifdef  __ICC430__
  signed char for_align2;
#endif  //__ICC430__
} termometer;
#pragma pack()

Теперь иар делает правильную структуру, а комп корректно обрабатывает полученые результаты.
А сами переменные у меня в другом файле, т.к., согласитесь, дело комповского программиста, где и как их объявлять. Мне лишь надо сделать, чтоб он без лишних заморочек, абсолютно не зная про иаровские проблемы, мог корректно обработать полученые данные.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Axel
сообщение Dec 11 2004, 07:12
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Все корректно, согласен. Только с лишними байтами в контроллере не всегда свободно.
Go to the top of the page
 
+Quote Post
VAI
сообщение Dec 11 2004, 08:22
Сообщение #7


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Ну всегда нужен индивидуальный подход, для экономии озу - #pragma pack( 1 )...


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Axel
сообщение Dec 11 2004, 09:43
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



А это как раз то, что в ИАРе не всегда работает
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 19:24
Рейтинг@Mail.ru


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