|
Битовые поля - есть ли способ поменять Little Endian на Big Endian, расположение битов |
|
|
|
May 30 2009, 22:21
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Осваиваю тут карты памяти, и возникла нужда поработать со структурами их регистров. К примеру: Код __packed struct CID { byte man_ID: 8; byte oem_ID[2]; byte product_name[5]; byte revision: 8; dword serial: 32; unsigned : 4; word man_date: 12; unsigned crc: 7; unsigned dummy: 1; }; Вроде бы всё хорошо, да только данные в такой структуре должны идти линейно сверху вниз - байт 0 - биты 31...24, байт 1 - биты 23...16 и т.д. (big endian). А компилятор (RealView) считает наоборот - сначала младшие биты (little endian). То есть читаем слово revision, в регистре должны быть данные вида 0x08070605 [31...0], а на деле имеем 0x05060708... Есть ли способ побороть такую досадную "однобокость"? Иначе придётся ручками обрабатывать все битовые сдвиги и маски...
|
|
|
|
|
 |
Ответов
|
May 31 2009, 06:55
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sonycman @ May 31 2009, 01:21)  А компилятор (RealView) считает..... Он 'считает', причем совершено обосновано, что у контроллера именно такая адресация. Причем, полагаю, Вам не скоро придется встретиться с big endian (они вообще померли, ну кроме одного легендарного и считающегося вечно живым динозавра  ), ибо для всего, что не является машинным словом получается чистой воды издевательтство ). И уж тем более не встретитесь с компилятором работающим 'наоборот' от архитектуры контроллера. Посему препешите структуру, "как положено", а не так, как кажется "правильным" в данный момент времени глядя с конкретной колоколенки и все. Цитата(sergeeff @ May 31 2009, 02:59)  Это одна их проблем переносимости программ. Практически этой проблемы уже нет.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 31 2009, 08:25
|

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

|
Цитата(zltigo @ May 31 2009, 09:55)  (они вообще померли, ну кроме одного легендарного и считающегося вечно живым динозавра  ), "Огласите весь список, пожалуйста" (с). В смысле, кто остался. Согласно википедии, большие индейцы (из более-менее популярных) у PowerPC, SPARK. Самсунговские ARMы S3Cxxxx, заточенные на коммуникации, работают в больших индейцах. Цитата(zltigo @ May 31 2009, 09:55)  Практически этой проблемы уже нет. "Как же так? Ж... - есть, а слова - нет?"  Сетевые протоколы используют больших индейцев, и с этим тяжелым наследием приходится бороться на остальных процессорах.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 31 2009, 08:38
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Сергей Борщ @ May 31 2009, 11:25)  "Огласите весь список, пожалуйста" (с). В смысле, кто остался. Согласно википедии, большие индейцы (из более-менее популярных) у PowerPC, SPARK. Самсунговские ARMы S3Cxxxx, PowerPC работают и так и так. ARM в базовой реинкарнации - тоже.... Цитата Сетевые протоколы используют больших индейцев, и с этим тяжелым наследием приходится бороться на остальных процессорах. Нет проблемы НЕ работать - эта проблема есть  и будет  , а нет проблемы портировать, по причине того, что портирования не потребуется почти никогда.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
sonycman Битовые поля - есть ли способ поменять Little Endian на Big Endian May 30 2009, 22:21 sergeeff Это определяется используемым компилятором и возмо... May 30 2009, 23:59 sonycman sergeeff
zltigo
Понятно, спасибо.
Так и думал, что... May 31 2009, 07:51 zltigo Цитата(sonycman @ May 31 2009, 10:51) Тут... May 31 2009, 08:18  sonycman Цитата(zltigo @ May 31 2009, 12:18) Нафиг... May 31 2009, 08:23 AirDevil Цитата(sonycman @ May 31 2009, 01:21) ...... May 31 2009, 07:54 sonycman Цитата(AirDevil @ May 31 2009, 11:54) Исп... May 31 2009, 07:57  Сергей Борщ Цитата(sonycman @ May 31 2009, 10:57) Что... May 31 2009, 08:13   sonycman Цитата(Сергей Борщ @ May 31 2009, 12:13) ... May 31 2009, 08:19    zltigo Цитата(sonycman @ May 31 2009, 11:19) Так... May 31 2009, 08:29    Сергей Борщ Цитата(sonycman @ May 31 2009, 11:19) Они... May 31 2009, 08:31     sonycman Цитата(zltigo @ May 31 2009, 12:29) Ужас.... May 31 2009, 08:34   zltigo Цитата(Сергей Борщ @ May 31 2009, 11:13) ... May 31 2009, 08:20 Rst7 ЦитатаARM в базовой реинкарнации - тоже....
Да та... May 31 2009, 10:26 zltigo Цитата(Rst7 @ May 31 2009, 13:26) 68k - с... May 31 2009, 14:31  VslavX Еще PowerPC очень неплохо себя в BE чувствуют. Ком... May 31 2009, 20:17
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|