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

 
 
 
Reply to this topicStart new topic
> GCC и endian при обращении к данным
Hexxx
сообщение Sep 10 2008, 09:51
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 49
Регистрация: 29-03-06
Пользователь №: 15 592



Портирую код с винды на AVR32. AVR32 - big endian (gcc), виндовый код - little endian(VS). Проблемы началась изза того, что виндовый код кишит наложением структур на данные. Т.е. получили массив данны, привели его к указателю на структуру, и пользуемся полями структуры. Данные в массиве тоже little endian, поэтому на винде все красиво работает через приведение к типу.
А если я AVR32 приведу little endian данные к указателю на структуру, компилятор будет считать, что там в структуре big endian данные и наступит хаос.
Есть ли какая-то возможность указать GCC endian для данных?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 10 2008, 09:56
Сообщение #2


Гуру
******

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



Цитата(Hexxx @ Sep 10 2008, 12:51) *
Есть ли какая-то возможность указать GCC endian для данных?
нет. Есть только макросы ntohs() и htons().


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Hexxx
сообщение Sep 10 2008, 10:46
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 49
Регистрация: 29-03-06
Пользователь №: 15 592



Цитата(Сергей Борщ @ Sep 10 2008, 12:56) *
нет. Есть только макросы ntohs() и htons().

http://gcc.gnu.org/ml/gcc/2004-07/msg01100.html а ведь была идея. Но... sad.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 10 2008, 11:06
Сообщение #4


Гуру
******

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



Цитата(Hexxx @ Sep 10 2008, 13:46) *
а ведь была идея. Но... sad.gif
Это прекрасный шанс для вас. Реализуйте. И свою задачу решите, и людям пригодится wink.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 11 2008, 04:09
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



А не проще перед приведением к типу указателя добавить вызов функции, инвертирующей порядок байт?
Go to the top of the page
 
+Quote Post
amw
сообщение Sep 11 2008, 12:47
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(Непомнящий Евгений @ Sep 11 2008, 07:09) *
А не проще перед приведением к типу указателя добавить вызов функции, инвертирующей порядок байт?

Это проще только если в структуре все поля одинакового размера.
А если поля разного размера, то это даже сложнее чем присвоение каждого поля с переварачиванием.

2 author
Такой функциональности, на сколько я знаю, нет ни в одном компиляторе.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 12 2008, 04:05
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(amw @ Sep 11 2008, 16:47) *
Это проще только если в структуре все поля одинакового размера.
А если поля разного размера, то это даже сложнее чем присвоение каждого поля с переварачиванием.


вы правы, не сообразил. Придется писать свой преобразователь для каждого типа...
Go to the top of the page
 
+Quote Post

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

 


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


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