Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ: Нашёл (+)

Отправлено rq3t14r3 05 мая 2008 г. 21:20
В ответ на: Ну чтоб прям в HEX-е указать "следующий блок данных размещать с ..." отправлено <font color=gray>rq3t14r3</font> 05 мая 2008 г. 17:27


Как в HEX-файл добавить кусок другого HEX-а?

Который должен начинаться с заданного адреса




Доделал пару "софт под 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-ти байтного сегмента и вуаля. Ничего конвертить не надо


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
умножьте 2 на три:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru