romez777 0 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Приветствую. Есть недопонимание big/little endian. Предположим я компилирую и линкую код, пусть в результате бинарник выглядит так на хосто-системе: 00000000 ea 00 00 12 e5 9f f0 14 e5 9f f0 14 e5 9f f0 14 00000010 e5 9f f0 14 e1 a0 00 00 e5 9f f0 10 e5 9f f0 10 ..... Означает ли, что если endiannes соблюдена правильно при компиляции, то именно так, как указано выше, бинариник и будет расположен на целевой система, причем как во флеш, так и в RAM? Буду признателен за пояснения. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Означает ли, что если endiannes соблюдена правильно при компиляции, то именно так, как указано выше, бинариник и будет расположен на целевой система, причем как во флеш, так и в RAM? Означает. Куда он денется-то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Означает. Куда он денется-то? спросил это потому, что jtag, которым я прошиваю чип, почему-то переворачивает байтики странным образом; если в образе вот так: ea000012 то во флеш вот так: 0012ea00 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба спросил это потому, что jtag, которым я прошиваю чип, почему-то переворачивает байтики странным образом; если в образе вот так: ea000012 то во флеш вот так: 0012ea00 А вы читаете словами или байтами? для little endian 0xEA 0x00 = 0x00EA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба А вы читаете словами или байтами? для little endian 0xEA 0x00 = 0x00EA я просматриваю память в отладочной среде, поставляемой с моим JTAG-ом. Неважно как смотреть - байтами или словами - результат перевернутый, и следовательно, считываемые во время отладки инструкции совсем не те, что предполагались. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба спросил это потому, что jtag, которым я прошиваю чип, почему-то переворачивает байтики странным образом; если в образе вот так: ea000012 то во флеш вот так: 0012ea00 Ну, почему странным образом? Endian и определяет порядок байтов в многобайтном числе. Если не ошибаюсь, в данном случае - PDP-endian. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Приветствую. Есть недопонимание big/little endian. Предположим я компилирую и линкую код, пусть в результате бинарник выглядит так на хосто-системе: 00000000 ea 00 00 12 e5 9f f0 14 e5 9f f0 14 e5 9f f0 14 00000010 e5 9f f0 14 e1 a0 00 00 e5 9f f0 10 e5 9f f0 10 ..... Судя по дампу вашего бинарника - это поток байтов, а он будет выглядеть одинаково и в LSB/MSB порядке. Означает ли, что если endiannes соблюдена правильно при компиляции, то именно так, как указано выше, бинариник и будет расположен на целевой система, причем как во флеш, так и в RAM?Судя по всему FLASH и RAM у вас НЕ байтовые, поэтому как в них будет располагаться ваша прошивка целиком зависит от того, как ваш JTAG прошивальшик будет трактовать исходный файл, если как LSB то получится 120000EA 14F09FE5 14F09FE5 14F09FE5 14F09FE5 0000A0E1 10F09FE5 10F09FE5 а если MSB то получится EA000012 E59FF014 E59FF014 E59FF014 E59FF014 E1A00000 E59FF010 E59FF010 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Судя по дампу вашего бинарника - это поток байтов, а он будет выглядеть одинаково и в LSB/MSB порядке. Это бинарник, полученный путем "objcopy -O binary image.elf image.bin" Судя по всему FLASH и RAM у вас НЕ байтовые, поэтому как в них будет располагаться ваша прошивка целиком зависит от того, как ваш JTAG прошивальшик будет трактовать исходный файл, если как LSB то получится выше по треду я уже пояснял, как в моем случае располагаются байты во флеш и памяти, LSB/MSB там не пахнет. Судя по всему FLASH и RAM у вас НЕ байтовые, поэтому как в них будет располагаться ваша прошивка целиком зависит от того, как ваш JTAG прошивальшик будет трактовать исходный файл гм, интересно получается. Исходный big-endian образ: 00000000 ea 00 00 12 e5 9f f0 14 e5 9f f0 14 e5 9f f0 14 00000010 e5 9f f0 14 e1 a0 00 00 e5 9f f0 10 e5 9f f0 10 .... Смотрим после прошивания JTAG-ом: 00000000 0012EA00 F014E59F F014E59F F014E59F 00000010 F014E59F 0000E1A0 F010E59F F010E59F ..... А теперь считываем содержимое флеша в файл: 00000000 00EA1200 9FE514F0 9FE514F0 9FE514F0 00000010 9FE514F0 A0E10000 ..... Я окончательно запутался :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба А теперь считываем содержимое флеша в файл: 00000000 00EA1200 9FE514F0 9FE514F0 9FE514F0 00000010 9FE514F0 A0E10000 ..... Я окончательно запутался :( А если побайтно разложить, как будет выглядеть считанный файл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Это бинарник, полученный путем "objcopy -O binary image.elf image.bin" Objcopy от native платформы или от toolchain'а, которым собирали elf? Могут быть разногласия :) выше по треду я уже пояснял, как в моем случае располагаются байты во флеш и памяти, LSB/MSB там не пахнет.Вам уже писали, что порядок похож на PDP - 16ти битные слова внутри 32х битного слова - в LSB, байты внутри 16ти битного слова - MSB гм, интересно получается. Исходный big-endian образ: 00000000 ea 00 00 12 e5 9f f0 14 e5 9f f0 14 e5 9f f0 14 00000010 e5 9f f0 14 e1 a0 00 00 e5 9f f0 10 e5 9f f0 10 .... Смотрим после прошивания JTAG-ом: 00000000 0012EA00 F014E59F F014E59F F014E59F 00000010 F014E59F 0000E1A0 F010E59F F010E59F ..... EA 00 00 12 -> EA00 0012 -> 0012EA00 А теперь считываем содержимое флеша в файл: 00000000 00EA1200 9FE514F0 9FE514F0 9FE514F0 00000010 9FE514F0 A0E10000 ..... Типичная LSB <-> MSB конверсия У JTAG прошивальщика нет опций для указания трактовки endianess'а файла? Кстати, он шьет именно бинарник, а не hex? В hex есть опция для упаковки по 16ти битным словам, может получится именно это Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Objcopy от native платформы или от toolchain'а, которым собирали elf? Могут быть разногласия :) конечно, objcopy от тулчейна. Типичная LSB <-> MSB конверсия Гм... флеш на таргете 16-битная, т.е. при прошивке данные берутся словами, как я понимаю - это приводит к конверсии в MSB, так? А считывая с флеш на little-endian компьютер, конверсия обратно в LSB? У JTAG прошивальщика нет опций для указания трактовки endianess'а файла? Кстати, он шьет именно бинарник, а не hex? В hex есть опция для упаковки по 16ти битным словам, может получится именно это Да, в JTAG выставляю порядок байт на таргете, подсовываю именно бинарник. Могут ли быть какие-то особенности сборки GNU-тым тулчейном? Хотя все вроде бы прозрачно - компилятору и линкеру указал сборку и линовку big-endian образа и, собственно все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 24 декабря, 2008 Опубликовано 24 декабря, 2008 · Жалоба Гм... флеш на таргете 16-битная, т.е. при прошивке данные берутся словами, как я понимаю - это приводит к конверсии в MSB, так? А считывая с флеш на little-endian компьютер, конверсия обратно в LSB?Похоже, что FLASH шьется 16ти битными big endian словами. Возможно что где то нестыковка при формировании из них 32х битного слова. Где именно нестыковка непонятно, возможно просто при показе, а FLASH на самом деле прошит правильно :rolleyes: Могут ли быть какие-то особенности сборки GNU-тым тулчейном?Могут, но мне они неизвестны :( Хотя все вроде бы прозрачно - компилятору и линкеру указал сборку и линовку big-endian образа и, собственно все.Могут быть баги и фичи big endian тулчейна на little endian хосте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 24 декабря, 2008 Опубликовано 24 декабря, 2008 · Жалоба Вам уже писали, что порядок похож на PDP - 16ти битные слова внутри 32х битного слова - в LSB, байты внутри 16ти битного слова - MSB Порядок байт в PDP был little endian, т.е. младший байт слова располагался по меньшему адресу, старший - по большему. Говорить же о расположении слов в 32-х разрядном слове нет смысла применительно к PDP, так как эта машина 16-разрядная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 24 декабря, 2008 Опубликовано 24 декабря, 2008 · Жалоба Порядок байт в PDP был little endian, т.е. младший байт слова располагался по меньшему адресу, старший - по большему. Говорить же о расположении слов в 32-х разрядном слове нет смысла применительно к PDP, так как эта машина 16-разрядная. Пардон, имелся в виду их потомок - VAX (кажется у него было нечто похожее) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться