Страница 1 из 1

Исследования hex файла

Добавлено: Пт авг 07, 2009 10:15:29
Moyo
Вопрос такой. У меня есть hex мне в нем надо изменить несколько кодов, но проблема следующая.
Если рассмотреть любую строку в hex файле полученном той же AvrStudio там видно что первые 8 символов это адрес в памяти, следующие 32 это данные, а последние 2 я подозреваю что это контрольная сумма, но чего, строки в которой стоит этот байт или чегото другого. Т.е. мне надо понять что это за 2 символа, и если это контрольная сумма то как она расчитывается.
Пробовал подсчитать, сложил все 32 символа в строке получил число, отбросил старшие полубайты так чтобы два младших осталось и не совпадает.

Добавлено: Пт авг 07, 2009 10:23:43
МитяРа
Она высчитывается сложением по модулю два..
Попробуй сложи все байты данных /в HEX конечно/, а потом прибавь контрольную сумму - должен получится 0...
..
Вот нашёл, посмотри, заодно и меня проверишь.. :) http://www.8052.com/tutintel

Добавлено: Пт авг 07, 2009 10:43:07
Student_X
... проще не извращаться, а перевести в бинарник там подправить, затем перевести обратно в hex. Для конвертации есть пара программ hex2bin и bin2hex.

Добавлено: Пт авг 07, 2009 12:36:35
otest
Вот маленькая прога которая позволяет написать изменить проверить НЕХ.

Добавлено: Пт авг 07, 2009 16:27:31
ARV
у меня на сайте в файловом архиве имеется описание на русском языке формата Intel-HEX - можете найти, скачать, прочесть и тогда все станет понятно.

Добавлено: Пт авг 07, 2009 19:07:32
Moyo
Спасибо всем за ответ. Я нашол как вычислять контрольную сумму.
Пример:

Имеем строку из hex файла.

:1001B00010001A0020001A001E001A001E001A006B


:1001B000 10001A0020001A001E001A001E001A00 6B

первые 4 байта служебные символы нистал подробно их разбирать, следующие 16 байт данные и последний байт контрольная сумма

Произведем расчет контрольной суммы следующим образом.

Суммируем все символы строки по байтно (4 байта служебных и 16 байт данных).

10+01+B0+00+10+00+1A+00+20+00+1A+00+1E+00+1A+00+1E+00+1A+00=0195

инвертируем результат,

0195 Not = FE6A

прибавляем единицу,

FE6A+1=FE6B

отбрасив старшие байты,получаем 6B что мы и видим выше в конце строки.

Добавлено: Сб авг 08, 2009 15:01:01
ARV
лучше бы все-таки прочли о формате файла... есть там тонкости...