LINUX.ORG.RU

GCC little/big endian и константы


0

2

Пытаюсь решить одну проблему, работаю с GCC для MicroBlaze. При создании очередной конфигурации я выбрал little endian и только сейчас доперло что это может быть причиной зависания - виснет на сравнении с некоторыми константами внутри библиотек-драйверов для периферии.

Или иначе вопрос: должен ли код на Си, если он написан для big-endian - быть портирован для little-endian специальным образом?

Кроме того, не понятно, когда я меняю тип процессора с BE на LE, меняет ли XPS-генератор направление битов в статусных регистрах периферии? Вот кажется мне что с этим может быть связана проблема зависания, в то время как на BE всё стабильно работало...

Или иначе вопрос: должен ли код на Си, если он написан для big-endian - быть портирован для little-endian специальным образом?

Код на С не должен быть написан ни под BE, ни под LE. Все данные, что приходят извне, надо преобразовывать в нативный порядок байт.

Relan ★★★★★
()
Ответ на: комментарий от Relan

Код на С не должен быть написан ни под BE, ни под LE. Все данные, что приходят извне, надо преобразовывать в нативный порядок байт.

Не всегда. Пример тот же IP-стэк, socket'ы и так далее.

Работать с чужим byte-order'ом вполне можно, но осторожно. И вовсе не обязательно преобразовывать всё в нативный порядок (особенно когда данные будут нужны лишь для точного сравнения, или известные заранее маски, в таком случае работать можно с тем, что будет оптимальнее).

hexdump01010101
()

меняет ли XPS-генератор направление битов в статусных регистрах периферии?

А ты не можешь написать что-нибудь простенькое, читающее один статусный регистр, биты которого можно кнопочкой дёргать? Тогда вопрос легко решится.

ИМХО, в процессорах, которые могут «переключаться», может и не храниться информация о том, BE сейчас или LE. Если процессор читает и пишет всегда слова по 32 бита, какая ему разница, какой там порядок?

i-rinat ★★★★★
()

В микроблейз можно выбрать ендиан вручную? Я думал, что ендиан зависит от того, генерируешь ты под PLB или под AXI.

(Особого опыта работы с микроблейз не имею)

nocomer
()
Ответ на: комментарий от nocomer

так и есть... было PLB а стало AXI

думал вдруг они что-то не учли

капризная у Xilinx-а периферия под MicroBlaze

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.