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

 
 
 
Reply to this topicStart new topic
> Неправильная адресация полей в структуре efsl
Dog Pawlowa
сообщение Mar 27 2009, 13:59
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



IAR ARM 520
При чтении поля длины файла происходит неправильное вычисление адреса поля. Смещение на 8 байт, как будто бы при считывании компилятор думает, что структура упакована через 1 байт, а на самом деле она упакована через 4.
Разве так может быть в одной программе? Как компилятор может не знать, как упакована структура?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 27 2009, 14:03
Сообщение #2


Гуру
******

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



Цитата(Dog Pawlowa @ Mar 27 2009, 16:59) *
Разве так может быть в одной программе? Как компилятор может не знать, как упакована структура?

Ну, компилятор всегда можно обмануть, если сказать в одном месте одно, а в другом - другое.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 27 2009, 14:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(aaarrr @ Mar 27 2009, 18:03) *
Ну, компилятор всегда можно обмануть, если сказать в одном месте одно, а в другом - другое.


Я так и подозревал, но по моему мнению, фигня какая-то. Ну ворнинг при линковке можно бы предусмотреть?
А по умолчанию ARM IAR pack=4?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 27 2009, 14:19
Сообщение #4


Гуру
******

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



По умолчанию поля структуры упаковываются в соответствии с собственным размером.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 27 2009, 14:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(aaarrr @ Mar 27 2009, 18:19) *
По умолчанию поля структуры упаковываются в соответствии с собственным размером.

Тогда еще плз поясните отличия между data_alignment и pragma pack?
data_alignment действует на все объявления подряд, а pragma pack только на структуры ?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 27 2009, 14:42
Сообщение #6


Гуру
******

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



Цитата(Dog Pawlowa @ Mar 27 2009, 17:29) *
data_alignment действует на все объявления подряд, а pragma pack только на структуры ?

Не спец я по ИАРу, но по логике вещей alignment существует у любого объекта, а паковать можно только структуры.
Go to the top of the page
 
+Quote Post
IgorMarx
сообщение Apr 23 2009, 20:21
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268



Цитата(Dog Pawlowa @ Mar 27 2009, 18:29) *
Тогда еще плз поясните отличия между data_alignment и pragma pack?
data_alignment действует на все объявления подряд, а pragma pack только на структуры ?


IAR C/C++ Development Guide
Compiling and linking


#pragma data_alignment=expression
где expression = 1, 2, 4 и т.д.

data_alignment: "Используйте эту директиву для того, чтобы дать переменной более высокое (более строгое) выравнивание стартового адреса, которое в ином случае могло бы иметь место. Эта директива может быть использована для переменных static и auto".

"Примечание: обычно размер переменных пропорционален их выравниванию. data_alignment влияет только на стартовый адрес переменной, но не на её размер, и может, таким образом, использована создания ситуаций, когда размер не кратен выравниванию."

"#pragma pack влияет на структуры, декларированные после неё, до следующей #pragma pack или конца файла. Примечание: Может приводить к существенному увеличению и замедлению кода при доступе к элементам структуры."


Пардон за вольный перевод.
Go to the top of the page
 
+Quote Post

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

 


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


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