реклама на сайте
подробности

 
 
> Как в HEX-файл добавить кусок другого HEX-а?, Который должен начинаться с заданного адреса
Дон Амброзио
сообщение May 5 2008, 13:06
Сообщение #1


Местный
***

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



Нужно добавить в прошивку программы, сгенерированную AVR Studio, некий внешний блок данных (имеется в виде HEX-файла), который нужно разместить во FLASH по заданному адресу.

Т.е. нужно объединить два HEX-файла так, чтобы данные второго файла размещались в объединённом файле по некоторому заданному адресу


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение May 5 2008, 14:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 5 2008, 14:47
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(zltigo @ May 5 2008, 18:27) *
Ну а самый простой вариат воспользоватся допотопным и широко распространенным
И преобразовав предварительно в бинарники переклеить, как душе угодно.

Я пробовал такой способ, но если исходный HEX-файл с "дырками", то, полученный таким методом, - подряд. Хотя "дырки" можно любыми байтами заполнять. Или это у меня руки кривые - не разобрался? Но в любом случае - написать програмку проще и быстрее, чем разбираться.
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение May 5 2008, 17:29
Сообщение #4


Местный
***

Группа: Участник*
Сообщений: 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-ти байтного сегмента и вуаля. Ничего конвертить не надо . И смещения в добавленном блоке будут отсчитываться от начала заданного Вами сегмента, а не от начала памяти


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 5 2008, 17:42
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение May 5 2008, 17:48
Сообщение #6


Местный
***

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



Цитата(zltigo @ May 5 2008, 21:42) *
Надо было внятно сказать, что согласны руками каждый раз файл редактировать.

Дык "руками" и быстрей и надёжней получиться: написать какую одну строку между блоками HEX-а это ИМХО более быстро и наглядно, чем юзать "вслепую" утилиты командной строки имеющие список из 30 и более параметров командной строки. Почему "вслепую"? Да потому что эти утилиты даже ГУИ человеческого не имеют. А не дай бог ошибёсся в циферке и они тебя наконвертят - век потом глюки будешь выискивать.

А тут всё на виду. И блоки и адреса начальных сегментов этих блоков - ошибиться почти не возможно


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Дон Амброзио   Как в 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 09:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.38421 секунд с 7
ELECTRONIX ©2004-2016