|
Как в HEX-файл добавить кусок другого HEX-а?, Который должен начинаться с заданного адреса |
|
|
|
 |
Ответов
|
May 5 2008, 14:27
|

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

|
http://srecord.sourceforge.net/ обычно позволяет справиться с любыми проблемами. Ну а самый простой вариат воспользоватся допотопным и широко распространенным Код BIN2HEX Version 1.06 Copyright (c) 1993-1995 BITWARE. All rights reserved.
Syntax: BIN2HEX [/option] binfile [hexfile]
<binfile> is the binary input file <hexfile> is the Intel HEX file to create
<option> may be any of the following
/Ln Bytes to read from binary file /In Binary file starting offset /On Output file address offset (where HEX data starts) /M Merge data into existing HEX file /2 Generate HEX file using ext. segment address records (HEX86) /4 Generate HEX file using ext. linear address records (HEX386) /Q Quiet mode (no statistics are displayed) /T Exclude EOF record /A Append to end of existing HEX file И преобразовав предварительно в бинарники переклеить, как душе угодно. Moderator: Тему перенес, поскольку к AVR она не имеет отношения.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 5 2008, 17:29
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Проблему решил без всяких утилит благодаря Антону
"Доделал пару "софт под Win32"-"софт под ATMega128" до того, что уже пишет во FLASH в количестве "скока хочешь" слов (по два байта) по адресу "куда следует". И ни разу не ошибается!
И вот, когда уже вроде бы "всё пучком", ещё раз нарываюсь на грабли: в формате iHex НЕТУ никакой возможности адресовывать свыше 64 килобайт!!!
Я даже три книги купил, но там всё честно про формат написано - уже по-русски, чтобы быть уверенным. На адресацию отводится ровно 4 символа в формате HEX.
Анализ файла от ImageCraft выявил наличие в на границе перехода через 64k некоторой неоднородности в файле iHex: ______cut here ___________ :14FFA0009924AA24BB2441D0C1F044D0B1F0E8E2000F111F63 :14FFB400221F331F771C881C991CAA1CBB1C88169906AA0630 :14FFC800BB0628F0881A990AAA0ABB0A0395EA9559F726F40D :14FFDC00082D192D2A2D3B2D13C07A928A929A92AA92BA9228 :10FFF000CA92EA938A939A93AA93BA938B859C8523 :020000021000EC :14000000AD85BE85C32E0EF0CB260895C7FC17D0B991A991CC :1400140099918991E991C990B990A99099908990799024963A :140028000895E02FE12BE22BE32B0895E82FE92BEA2BEB2BFE :14003C00089500951095209530950F5F1F4F2F4F3F4F0895DA :1400500080959095A095B0958F5F9F4FAF4FBF4F0895689467 :1400640001C0E8942A93FA92EA92FF24EE2420E1000FFF1C26 ______cut here ___________
Вот такая вот беда...
Видимо он куски памяти подсчитывает и закончив одину 64-килобайтную секцию начинает писать в другую.
Мне это не очень нравится, потому что может стать источником ошибки: а вдруг мне сразу во вторую часть писать нужно?
И вот ведь в чём прикол: я уже и программатор отстроил на максимальную гибкость, а тут...
В общем, я весь в расстройстве. Помогите, кто знает!
Спасибо.
…… Учитывая немаленькое число просмотров, дам ответ... Ответ крылся в том самом неясном куске.
Если тип строки 00 - это данные. Если 01 - конец файла. А если 02 - это команда изменения сегмента.
Сегменты дробятся с кратностью 16 байт. За командой идёт адрес сегмента - два байта, старший сначала(!).
При открытии файла, если сегмент не изменялся, пишем в нулевой сегмент. Поэтому в коротких программах эта строка "тип 02" вообще не встречается.
В начале каждой строки данных следует относительный адрес записи - адрес, куда эти данные писать.
Абсолютный адрес записи - нужно учесть текущий сегмент. Достаточно его умножить на 16 и прибавить к относительному адресу.
Всё!
Я записал 70% проца ATMega128 из iHex, считал и всё совпало. Да и прога - тоже работала как часы.
Всем спасибо. С форматом iH вопрос ясен.
Антон."(С)
Т.е. просто перед блоком данных вставляем директиву задания номера 16-ти байтного сегмента и вуаля. Ничего конвертить не надо . И смещения в добавленном блоке будут отсчитываться от начала заданного Вами сегмента, а не от начала памяти
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
May 5 2008, 17:42
|

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

|
Цитата(Дон Амброзио @ May 5 2008, 19:29)  Я даже три книги купил, но там всё честно про формат написано - уже по-русски, чтобы быть уверенным. Навеное придется книги выбросить и просто в интернете взять стандарт в том числе описывающий и РАСШИРЕНИЯ первоначального варианта для сегментной и линейной адресации, и добавления стартовых адресов. Цитата(Дон Амброзио @ May 5 2008, 19:29)  Т.е. просто перед блоком данных вставляем директиву.. Надо было внятно сказать, что согласны руками каждый раз файл редактировать.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 5 2008, 17:48
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(zltigo @ May 5 2008, 21:42)  Надо было внятно сказать, что согласны руками каждый раз файл редактировать. Дык "руками" и быстрей и надёжней получиться: написать какую одну строку между блоками HEX-а это ИМХО более быстро и наглядно, чем юзать "вслепую" утилиты командной строки имеющие список из 30 и более параметров командной строки. Почему "вслепую"? Да потому что эти утилиты даже ГУИ человеческого не имеют. А не дай бог ошибёсся в циферке и они тебя наконвертят - век потом глюки будешь выискивать. А тут всё на виду. И блоки и адреса начальных сегментов этих блоков - ошибиться почти не возможно
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
Сообщений в этой теме
Дон Амброзио Как в HEX-файл добавить кусок другого HEX-а? May 5 2008, 13:06 galjoen Цитата(Дон Амброзио @ May 5 2008, 17:06) ... May 5 2008, 13:27 Дон Амброзио Цитата(galjoen @ May 5 2008, 17:27) А поч... May 5 2008, 13:34  galjoen Цитата(Дон Амброзио @ May 5 2008, 17:34) ... May 5 2008, 13:58 de__ как то такое я написал
http://kazus.ru/forum/topic... May 5 2008, 14:02     galjoen Цитата(Дон Амброзио @ May 5 2008, 21:48) ... May 5 2008, 18:28      Дон Амброзио Цитата(galjoen @ May 5 2008, 22:28) А воо... May 5 2008, 18:50       galjoen Цитата(Дон Амброзио @ May 5 2008, 22:50) ... May 5 2008, 19:15 zltigo Эко Вас носит между ГУЯ-ми и руками в редакторе В... May 5 2008, 17:51 Дон Амброзио Цитата(zltigo @ May 5 2008, 21:51) Эко Ва... May 5 2008, 18:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|