что такое формат hex

Intel HEX

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

Intel HEX — формат файла, предназначенного для представления произвольных двоичных данных в текстовом виде. По историческим причинам является стандартом де-факто при прошивке разнообразных микросхем с памятью (микроконтроллеров, ПЗУ, EEPROM и т. п.). Соответственно большинство инструментов подготовки образов прошивки (компиляторы, редакторы, просмотрщики и т. п.) умеют работать с этим форматом.

Файл обычно имеет расширение HEX. Встречаются две модификации: intel-standart и intel-extended. Intel-standart поддерживает только 16 бит адрес (до 64 кБайт). Intel-extended имеет расширенный список типов записей и 32-бит адрес.

Достоинством формата (в отличие от простого двоичного) является возможность указывать только определенные области адресов (с точностью до байта). Многие микроконтроллерные архитектуры имеют несколько областей программирования с обширными пустотами в адресации между ними.

Содержание

Формат записи

Объяснение первое

Файл состоит из текстовых ASCII строк. Каждая строка представляет собой одну запись. Каждая запись начинается с двоеточия (:), после которого идет набор шестнадцатеричных цифр кратных байту:

Объяснение второе

Файл формата Intel HEX может состоять из любого количества записей. Каждая запись представляет собой ASCII-строку состоящую из нескольких пар 16-ричных цифр. Строка должна начинаться с символа двоеточия и оканчиваться парой символов CR и LF. Запись состоит из пяти полей следующего формата:
:LLAAAATTDD. CC
Каждая группа букв (LL, AAAA, TT и т. д.) представляет собой отдельное поле. Каждая буква — отдельную 16-ричную цифру (4 бита). Каждое поле состоит, как минимум, из двух 16-ричных цифр (байт). Ниже представлена расшифровка полей записи:

Запись адреса сегмента

Файл формата Intel HEХ может содержать записи для процессоров i8086, которые определяют адрес сегмента (иначе говоря — номер параграфа, один параграф — это 16 байт). Если используется директива H167, то этот тип записи заменяет запись расширенного линейного адреса. Номер параграфа используется как смещение адреса для всех записей данных, следующих за этой записью. Смещение представляет собой сдвиг адреса на четыре бита влево. Например, смещение равное 0x1234 даст реальный адрес 0x12340. Пример записи:
:020000021000EC где:

Запись расширенного адреса

Когда используется директива H167, файл формата Intel HEX возможно будет содержать записи расширенного линейного адреса. Этот тип записи определяет значения двух старших байт абсолютного адреса (биты 16-31). Эти два старших байта адреса будут применяться как смещение адреса для всех записей данных, следующих за этой записью. Пример записи:
: 0200000400FFFB
где:

Запись конца файла

Файлы формата Intel HEX должны иметь запись Конца Файла (EOF). Пример записи:
:00000001FF где:

Примеры

Пример 1

Начало записи Счётчик байт Адрес Тип записи Данные Контрольная сумма

Пример 2

Пример одной записи данных:
:10246200464C5549442050524F46494C4500464C33 где

Пример 3

См. также

SREC — формат файла используемый ф.Motorola

Источник

Формат файла hex, сокращённо от «шестнадцатеричный» или «base-16», является структурой необработанных данных, которой следуют все файлы, хранящиеся на вашем компьютере. Хотя буквально каждый документ хранится в этом формате, найти его на ПК практически невозможно. Хотя далеко не все знают, что возможность напрямую изменять необработанные биты и байты на ПК иногда может быть очень полезна.

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

Что обозначает расширение HEX

Система счисления, которую люди используют для подсчёта, называется десятичной (числа от 0 до 9), и была изобретена персами около 6000 лет назад. В 1950-х или 1960-х годах IBM формализовала шестнадцатеричную систему счисления, которая является коротким способом представления двоичных данных. Вместо использования цифр 0-9, шестнадцатеричное число использует цифры от 0 до F. Достигнув конца числовых «цифр», вы просто увеличиваете число влево на единицу, точно так же, как вы делаете это с системой счёта десятичных чисел.

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

Как открыть файл HEX

Далеко не все являются программистами, и иногда открыть файл с расширением HEX может понадобиться обычному человеку, чтобы посмотреть в нём некую информацию. На самом деле для такой простой задачи вполне достаточно обычного Блокнота – стандартного приложения, которое имеется в любой системе Windows. Ведь этот файл, по сути, является текстовым, просто в нём записана специфическая информация, но обычными символами.

Для этого достаточно кликнуть на файле правой кнопкой мыши, выбрать в меню пункт «Открыть» или «Открыть с помощью», затем «Выбрать из списка установленных программ», а далее просто выбрать стандартный Блокнот. Снимите галочку с пункта «Использовать выбранную программу для всех файлов этого типа» — вдруг вы его потом будете открывать другой программой. Можно просто открыть Блокнот, а файл в него перетащить, и он откроется.

Гораздо удобнее для открытия таких файлов подходит другая версия Блокнота – Notepad++. Скачать можно по этой ссылке. Эта программа также есть у многих, так как более удобна. Но она может к тому же распознавать многие языки программирования и файлы HEX в ней выглядят гораздо удобнее, так как есть выделение цветом. Notepad++ представляет собой как бы примитивный HEX-редактор, и этим можно пользоваться совершенно свободно.

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

Так выглядит HEX-файл, открытый в Notepad++. В стандартном Блокноте так же, но без цвета.

А теперь рассмотрим более подробно, для чего может понадобиться открывать, а тем более изменять файлы с шестнадцатеричным содержимым. Кстати, если вы собираетесь делать это часто, то лучше скачайте и установите специальный HEX-редактор – их в Интернете довольно много. Некоторые из них подробнее рассматриваются далее.

Взлом игр и файлов

Популярная причина, по которой вы можете использовать шестнадацтеричный редактор, – взлом игр. Вы можете загрузить документ сохранения игры и изменить сумму денег, например, от 1000 до 1000000 долларов. В более поздних играх всё сделано намного сложнее. Многие современные игры используют либо сжатие, либо шифрование, что во много раз затрудняет декомпиляцию состояния сохранения или игры. Тем не менее, некоторые игры по-прежнему позволяют редактировать определённые переменные, например, Sonic Spinball. В дополнение к просмотру файлов игры, из сохранённого файла иногда можно извлечь другую важную информацию, к которой у вас иначе не было бы доступа. Это сильно зависит от типа файла и того, какую информацию вы ищете, но использование шестнадцатеричного редактора полезно для определения того, что именно находится в документе.

Отладка и редактирование

Наконец, еще одна популярная причина, по которой вы можете использовать шестнадцатеричный редактор, – это если вы программист, и вам нужно отладить код. Вместо того, чтобы возвращаться к перекомпиляции кода, для проверки шаблона может потребоваться простое шестнадцатеричное редактирование. Но для начала обязательно убедитесь, что у вас есть резервная копия, прежде чем изменять какие-либо файлы с помощью шестнадцатеричного редактора.

Какие hex-редакторы использовать

Шестнадцатеричный редактор представляет собой софт, используемый для просмотра и редактирования бинарных файлов. Двоичный документ представляет собой документ, который содержит данные в машиночитаемой форме. HEX-редакторы позволяют изменять содержимое необработанных данных файла. Поскольку шестнадцатеричный редактор используется для редактирования двоичных файлов, их иногда называют двоичным редактором или редактором двоичных файлов. Если открыть документ с помощью шестнадцатеричного редактора, появится сообщение о том, что документ редактируется в шестнадцатеричном формате, а процесс использования шестнадцатеричного редактора называется шестнадцатеричным редактированием. Шестнадцатеричные редакторы отличаются от обычных текстовых рядом функций. Основой шестнадцатеричного редактора является то, что они отображают необработанное содержимое файла. Нет кодирования или перевода в текст – только необработанный машинный код. Во-вторых, номера строк вместо того являются адресом смещения от начала файла. Мы подобрали несколько лучших бесплатных программ для просмотра и редактирования документов HEX.

HxD – это бесплатный шестнадцатеричный редактор, который может открывать и изменять компьютерный код. Это очень мощная утилита в правильных руках, которая может проверять, сравнивать и диагностировать файлы, диски, образы дисков, память и журналы, а также исправлять ошибки и восстанавливать структуру диска.

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

DeltaHex Editor

Один из лучших hex-редакторов на основе библиотеки deltahex. Используйте действие «Открыть как шестнадцатеричный» в главном меню «Файл» или в контекстном меню файлов проекта.

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

Free Hex Editor Neo

Free Hex Editor Neo – это самый быстрый бесплатный редактор двоичных файлов для платформы Windows. Алгоритмы обработки данных Neo Hex Editor чрезвычайно оптимизированы и тщательно настроены для обработки операций с большими файлами.

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

Функции и возможности утилиты:

Hex Editor Neo предоставляет базовые, расширенные и даже инновационные функции. Шестнадцатеричное редактирование теперь доступно каждому начинающему пользователю!

PSPad

Любимый шестнадцатеричный редактор большинства программистов. PSPad, помимо того, что он является отличным редактором текста и кода, предлагает опцию «Открыть в HEX Editor…», которая запускает специальный режим редактирования. Когда вы находитесь в этом режиме, вы можете увидеть местоположение и шестнадцатеричные значения каждого бита файла. У вас есть два варианта корректировки – вы можете редактировать шестнадцатеричные значения по местоположению, или справа у вас есть буквенно-цифровое представление этого значения, которое вы также можете редактировать.

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

XVI32

XVI32 также очень способный шестнадцатеричный редактор. Как и в PSPad, вы можете редактировать шестнадцатеричные значения напрямую или через отображение символов. В нём также есть несколько расширенных инструментов редактирования шестнадцатеричных кодов, таких как калькулятор адресов для проверки смещений и других специфичных для шестнадцатеричных данных параметров, которые могут помочь вам обойти шестнадцатеричный документ. Если вы, конечно, знаете, что делаете.

Знание того, как работает ваш ПК, становится всё более и более важным, поскольку техника становится всё проще и проще в использовании. Если у вас остались вопросы относительно редактирования шестнадцатеричных файлов, оставьте комментарий под этой статьёй.

Источник

Что такое формат hex

[Введение]

Этот документ описывает формат шестнадцатеричного объектного файла для 8-, 16- и 32-битных микропроцессоров Intel. Шестнадцатеричный формат подходит для входных данных программаторов PROM или аппаратных эмуляторов.

Примечание переводчика: поскольку формат Intel HEX давно стал стандартном де-факто, он применяется для хранения данных и кода почти для всех без исключения встраиваемых (embedded) архитектур микроконтроллеров и процессоров, не только для процессоров Intel x86.

Примечание переводчика: 8-, 16- и 32-битные форматы отличаются друг от друга только логической структурой, т. е. появлением в HEX-файле различных типов записей (типы записей см. далее). Общий формат HEX-файла и кодирование записей в нем при этом остается неизменными.

Шестнадцатеричное представление двоичного файла закодировано с помощью цифробуквенных символов ASCII. Например, 8-битное двоичное значение 00111111 соответствует шестнадцатеричному 3F. Чтобы закодировать это значение в ASCII, применяется 2 байта символов ASCII. Первый байт для нашего примера кодирования будет равен ASCII-символу ‘3’ (в двоичном виде это 00110011 или 033H) и второй байт будет равен ASCII-символу ‘F’ (01000110 или 046H). Для каждого значения байта порядок следования шестнадцатеричных цифр всегда такой, что старшая цифра идет первой. ASCII-представление двоичного кода всегда требует в 2 раза больше байт данных, чем двоичное представление данных.

Шестнадцатеричный объектный файл разбит на блоки записей (строки), каждая из которых содержит тип записи, длину, адрес загрузки в память и дополнительную контрольную сумму. Здесь заданы шесть (6) различных типов записей, однако не все типы записей имеют важное значение для каждого конкретного случая. Вот эти типы записей:

· Data Record, запись для данных (8-, 16- или 32-bit форматы)
· End of File Record, запись для сигнала о конце файла (8-, 16- или 32-bit форматы)
· Extended Segment Address Record, запись для адреса расширенного сегмента (16- или 32-bit форматы)
· Start Segment Address Record, запись для начала сегмента (16- или 32-bit форматы)
· Extended Linear Address Record, запись для расширенного линейного адреса (только 32-bit формат)
· Start Linear Address Record, запись для начала линейного адреса (только 32-bit формат)

На рисунке показан пример содержимого HEX-файла.

что такое формат hex. Смотреть фото что такое формат hex. Смотреть картинку что такое формат hex. Картинка про что такое формат hex. Фото что такое формат hex

Примечание переводчика: для каждой отдельной архитектуры процессора могут понадобиться далеко не все записи. К примеру, для микроконтроллеров AVR реально используются только типы записей Data Record и End of File Record. Линкер GCC также добавляет в файл для AVR запись Start Segment Address Record (ближе к концу файла), но эта запись обычно никак не используется (не учитывается при прошивке микроконтроллера программатором).

[Общий формат записи (General Record Format)]

RECORD MARK
‘:’
RECLENLOAD OFFSETRECTYPINFO или DATACHKSUM
1 байт1 байт2 байта1 байтn байт1 байт

Каждая запись в HEX-файле (строка) начинается с поля маркера начала записи RECORD MARK, содержащего ASCII-код 03AH, символ двоеточия ‘:’.

Следующее поле каждой записи RECLEN, которое задает количество байт полезной информации, которая содержится в записи (эти байты идут за полем RECTYP). Помните, что один байт данных представлен двумя символами ASCII. Максимальное значение для поля RECLEN является шестнадцатеричное ‘FF’, т. е. полезных данных в записи может быть от 0 до 255 байт.

Следующее поле в каждой записи LOAD OFFSET, которое указывает 16-битный начальный адрес загрузки байт данных, так что это поле используется только для записей данных (Data Record). В других типах записей, где это поле не используется, оно должно быть закодировано четырьмя ASCII-символами нуля (‘0000’ или 030303030H).

Следующее поле в каждой записи RECTYP, которое обозначает тип этой записи. Поле RECTYP используется для интерпретации информации в записи. Вот как кодируются типы записей:

00‘ Data Record (запись, содержащая данные)
01‘ End of File Record (запись, сигнализирующая о конце файла)
02‘ Extended Segment Address Record (запись адреса расширенного сегмента)
03‘ Start Segment Address Record (запись адреса начала сегмента)
04‘ Extended Linear Address Record (запись расширенного линейного адреса)
05‘ Start Linear Address Record (запись адреса начала линейного адреса)

Примечание переводчика: для микроконтроллеров AVR в HEX-файле появляются только записи типа 00, 01 и 03. При этом запись типа 03 содержит абсолютный адрес старта программы в памяти, и не несет в себе никакого практического значения (эта запись обычно находится ближе к концу файла, перед записью 01 End of File Record).

Следующее поле в каждой записи переменной длины, поле INFO/DATA. Оно состоит из нулевого или большего количества байт (байт может быть от 0 до 255, в соответствии со значением поля RECLEN), где каждый байт закодирован как пара шестнадцатеричных цифр. Интерпретация этого поля зависит от значения поля RECTYP.

И наконец, каждая запись заканчивается полем CHKSUM, которое содержит шестнадцатеричное ASCII представление контрольной суммы (дополнение до двух, дополнительный код, two’s complement sum) от всех байт записи, начиная включительно от поля RECLEN, и кончая включительно последним байтом поля INFO/DATA. При этом контрольная сумма вычисляется не от самих символов ASCII, а от представления каждой пары HEX-символов ASCII как одного байта. Таким образом, сумма всех пар в записи после конвертирования каждой пары в двоичное представление, от поля RECLEN включительно до поля CHKSUM включительно, равна 0.

[Extended Linear Address Record (только для 32-битного формата)]

RECORD MARK
‘:’
RECLEN
’02’
LOAD OFFSET
‘0000’
RECTYP
’04’
ULBACHKSUM
1 байт1 байт2 байта1 байт2 байта1 байт

(LBA + DRLO + DRI) MOD 4G

Где DRLO равно полю LOAD OFFSET в записи Data Record, DRI равен индексу байта в записи Data Record.

Когда запись Extended Linear Address Record задает значение LBA, оно может появиться в любом месте 32-битного шестнадцатеричного объектного файла. Это значение остается эффективным, пока не появится другая запись Extended Linear Address Record. Значение по умолчанию для LBA равно нулю, пока не появится запись Extended Linear Address Record.

Примечание переводчика: в HEX-файлах AVR запись Extended Linear Address Record не используется.

В отдельных полях записи имеется следующее содержимое:

RECORD MARK
Это поле содержит байт 03AH, символ двоеточия, закодированный шестнадцатеричным символом ASCII (‘:’).

RECLEN
Это поле содержит два байта 03032H, кодирующие шестнадцатеричными символами ASCII ’02’, что означает длину в байтах информации данных ULBA, содержащихся в этой записи.

LOAD OFFSET
Это поле содержит байты 030303030H, кодирующие шестнадцатеричными символами ASCII ‘0000’, поскольку поле не используется в этой записи.

RECTYP
Это поле содержит байты 03034H, кодирующие шестнадцатеричными символами ASCII ’04’, что задает тип записи Extended Linear Address Record.

ULBA
Это поле содержит 4 шестнадцатеричные цифры ASCII, которые указывают 16-битное значение Upper Linear Base Address. Старший байт в этом адресе находится в паре 10 и 11 символов записи, младший байт в этом адресе находится в паре 12 и 13 символов записи.

CHKSUM
Это поле содержит контрольную сумму полей RECLEN, LOAD OFFSET, RECTYP и ULBA.

[Extended Segment Address Record (16- или 32-битный формат)]

RECORD MARK
‘:’
RECLEN
’02’
LOAD OFFSET
‘0000’
RECTYP
’02’
USBACHKSUM
1 байт1 байт2 байта1 байт2 байта1 байт

SBA + ([DRLO + DRI] MOD 64K)

Где DRLO равно полю LOAD OFFSET в Data Record, DRI равен индексу байта в Data Record.

Когда запись Extended Segment Address Record задает значение SBA, оно может появиться в любом месте 16-битного шестнадцатеричного объектного файла. Это значение остается эффективными, пока не появится другая запись Extended Segment Address Record. Значение SBA по умолчанию равно 0, пока не появится запись Extended Segment Address Record.

Примечание переводчика: в HEX-файлах AVR запись Extended Segment Address Record не используется.

В отдельных полях записи имеется следующее содержимое:

RECORD MARK
Это поле содержит байт 03AH, символ двоеточия, закодированный шестнадцатеричным символом ASCII (‘:’).

RECLEN
Это поле содержит два байта 03032H, кодирующие шестнадцатеричными символами ASCII ’02’, что означает длину в байтах информации данных USBA, содержащихся в этой записи.

LOAD OFFSET
Это поле содержит байты 030303030H, кодирующие шестнадцатеричными символами ASCII ‘0000’, поскольку поле не используется в этой записи.

RECTYP
Это поле содержит байты 03032H, кодирующие шестнадцатеричными символами ASCII ’02’, что задает тип записи Extended Segment Address Record.

USBA
Это поле содержит 4 шестнадцатеричные цифры ASCII, которые указывают 16-битное значение Upper Segment Base Address. Старший байт в этом адресе находится в паре 10 и 11 символов записи, младший байт в этом адресе находится в паре 12 и 13 символов записи.

CHKSUM
Это поле содержит контрольную сумму полей RECLEN, LOAD OFFSET, RECTYP и USBA.

[Data Record (8-, 16- или 32-битный формат)]

RECORD MARK
‘:’
RECLENLOAD OFFSETRECTYP
’00’
DATACHKSUM
1 байт1 байт2 байта1 байтn байт1 байт

Запись Data Record предоставляет набор шестнадцатеричных цифр, в которых находится ASCII-код байтов данных, которые содержатся в порции данных образа памяти. Метод, используемый для вычисления абсолютного адреса (линейного в случае 8 и 32 бит и сегментированного в случае 16 бит) каждого байта описан в разделах Extended Linear Address Record и Extended Segment Address Record.

В отдельных полях записи имеется следующее содержимое:

RECORD MARK
Это поле содержит байт 03AH, символ двоеточия, закодированный шестнадцатеричным символом ASCII (‘:’).

RECLEN
Это поле содержит две шестнадцатеричные цифры ASCII, которые задают количество байт данных, находящихся в записи. Максимальное значение равно ‘FF’ или 04646H (что соответствует десятичному значению 255).

LOAD OFFSET
Это поле содержит четыре шестнадцатеричные цифры ASCII, представляющие смещение от LBA (см. раздел Extended Linear Address Record) или SBA (см. раздел Extended Segment Address Record), что задает адрес, куда будет помещен первый байт записи.

RECTYP
Это поле содержит байты 03030H, кодирующие шестнадцатеричными символами ASCII ’00’, что задает тип записи Data Record.

DATA
Это поле содержит пары шестнадцатеричных цифр ASCII, где каждая пара кодирует один байт данных.

CHKSUM
Это поле содержит контрольную сумму полей RECLEN, LOAD OFFSET, RECTYP и DATA.

[Start Linear Address Record (только 32-битный формат)]

RECORD MARK
‘:’
RECLEN
’04’
LOAD OFFSET
‘0000’
RECTYP
’05’
EIPCHKSUM
1 байт1 байт2 байта1 байт4 байта1 байт

Запись Start Linear Address Record используется для указания стартового адреса объектного файла, с которого начнется выполнение программы. Значение дает линейный 32-битный адрес для регистра EIP. Имейте в виду, что эта запись только задает адрес кода в пределах 32-битного линейного адресного пространства процессора 80386. Если начинается выполнение кода в реальном режиме (real mode) 80386, то вместо этого должна использоваться Start Segment Address Record, поскольку эта запись указывает содержимое обоих регистров CS и IP, что необходимо для real mode.

Запись Start Linear Address Record может появиться в любом месте 32-битного шестнадцатеричного объектного файла. Если такая запись отсутствует в шестнадцатеричном объектном файле, то загрузчик свободен в назначении адреса старта по умолчанию.

Примечание переводчика: в HEX-файлах AVR запись Start Linear Address Record не используется.

В отдельных полях записи имеется следующее содержимое:

RECORD MARK
Это поле содержит байт 03AH, символ двоеточия, закодированный шестнадцатеричным символом ASCII (‘:’).

RECLEN
Зто поле содержит 03034H, кодирующие шестнадцатеричными символами ASCII ’04’, что указывает длину, в байтах, содержимого регистра EIP в этой записи.

LOAD OFFSET
Это поле содержит 030303030H, кодирующие шестнадцатеричными символами ASCII ‘0000’, поскольку это поле не используется в записи.

RECTYP
Это поле содержит 03035H, кодирующие шестнадцатеричными символами ASCII ’05’, что задает тип записи Start Linear Address Record.

EIP
Это поле содержит восемь символов ASCII шестнадцатеричных цифр, указывающих содержимое 32-битного регистра EIP. Старший байт адреса находится в паре символов 10 и 11.

CHKSUM
Это поле содержит контрольную сумму полей RECLEN, LOAD OFFSET, RECTYP и EIP.

[Start Segment Address Record (16- или 32-битный формат)]

RECORD MARK
‘:’
RECLEN
’04’
LOAD OFFSET
‘0000’
RECTYP
’03’
CS/IPCHKSUM
1 байт1 байт2 байта1 байт4 байта1 байт

Запись Start Segment Address Record используется для указания стартового адреса объектного файла, с которого начнется выполнение программы. Дается значение 20-битного сегментированного адреса для регистров CS и IP. Имейте в виду, что эта запись задает адрес кода только в пределах 20-битного сегментированного адресного пространства процессоров 8086/80186.

Запись Start Segment Address Record может появиться в любом месте 16-битного шестнадцатеричного объектного файла. Если такая запись отсутствует в шестнадцатеричном объектном файле, то загрузчик свободен в назначении адреса старта по умолчанию.

Примечание переводчика: в HEX-файлах AVR запись Start Segment Address Record используется, однако не несет в себе никакого практического значения. При этом значение CS равно 0, а значение IP равно байтовому адресу запуска программы firmware.

В отдельных полях записи имеется следующее содержимое:

RECORD MARK
Это поле содержит байт 03AH, символ двоеточия, закодированный шестнадцатеричным символом ASCII (‘:’).

RECLEN
Зто поле содержит 03034H, кодирующие шестнадцатеричными символами ASCII ’04’, что указывает длину, в байтах, содержимого регистров CS/IP в этой записи.

LOAD OFFSET
Это поле содержит 030303030H, кодирующие шестнадцатеричными символами ASCII ‘0000’, поскольку это поле не используется в записи.

RECTYP
Это поле содержит 03033H, кодирующие шестнадцатеричными символами ASCII ’03’, что задает тип записи Start Segment Address Record.

CS/IP
Это поле содержит восемь символов ASCII шестнадцатеричных цифр, указывающих содержимое 16-битного регистра CS и 16-битного регистра IP. Старший байт содержимого регистра CS находится в паре символов 10 и 11, младший в паре символов 12 и 13. Старший байт содержимого регистра IP находится в паре символов 14 и 15, младший в паре символов 16 и 17.

CHKSUM
Это поле содержит контрольную сумму полей RECLEN, LOAD OFFSET, RECTYP и CS/IP.

[End of File Record (8-, 16- или 32-битный формат)]

RECORD MARK
‘:’
RECLEN
’00’
LOAD OFFSET
‘0000’
RECTYP
’01’
CHKSUM
‘F’
1 байт1 байт2 байта1 байт1 байт

Запись End of File Record указывает конец шестнадцатеричного объектного файла. Это строка, в которой содержатся символы ‘:00000001FF’.

Примечание переводчика: в HEX-файлах микроконтроллера AVR эта запись также используется для обозначения конца файла.

В отдельных полях записи имеется следующее содержимое:

RECORD MARK
Это поле содержит байт 03AH, символ двоеточия, закодированный шестнадцатеричным символом ASCII (‘:’).

RECLEN
то поле содержит 03030H, кодирующие шестнадцатеричными символами ASCII ’00’. Поскольку эта запись не содержит никаких данных INFO/DATA, то длина равна нулю.

LOAD OFFSET
Это поле содержит 030303030H, кодирующие шестнадцатеричными символами ASCII ‘0000’, поскольку это поле не используется в записи.

RECTYP
Это поле содержит 03031H, кодирующие шестнадцатеричными символами ASCII ’01’, что задает тип записи End of File Record.

CHKSUM
Это поле содержит контрольную сумму полей RECLEN, LOAD OFFSET и RECTYP. Поскольку все поля статические (их содержимое неизменно), то контрольную сумму также можно вычислить статически, и её значение 04646H, кодирующие шестнадцатеричными символами ASCII ‘FF’.

[Алгоритм подсчета контрольной суммы]

Байт контрольной суммы CHKSUM для строки HEX-файла вычисляется так, чтобы байтовая сумма всех полезных данных строки и самой контрольной суммы с отбрасыванием переполнений равнялась нулю. При этом складываются не сами символы ASCII, а только данные, что они представляют. Упрощенный алгоритм подсчета контрольной суммы на псевдокоде для записи Data Record:

Чтобы было совсем понятно, разберем простой пример. Вот типичная строка HEX-файла прошивки микроконтроллера AVR (для наглядности поля помечены разными цветами):

: 10 3800 00 5CC000008FC0000073C0000071C00000 E9

Итак, контрольная сумма CHKSUM у нас получится, если сложим (отбрасывая перенос) байты данных начиная от поля RECLEN ( 0x10 ) до последнего байта поля DATA[RECLEN-1] ( 0x00 ), и затем вычтем из нуля полученную сумму (также отбрасывая перенос):

Если сложить все байты начиная от RECLEN до CHKSUM включительно (отбрасывая перенос), то получим ноль:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *