Шестнадцатеричный Intel


Шестнадцатеричный формат файла объекта Intel, шестнадцатеричный формат Intel или Intellec Hex — это формат файла, который передает двоичную информацию в текстовой форме ASCII . [7] Он обычно используется для программирования микроконтроллеров , EPROM и других типов программируемых логических устройств и аппаратных эмуляторов . В типичном приложении компилятор или ассемблер преобразует исходный код программы ( например, на C или языке ассемблера ) в машинный код .и выводит его в HEX-файл. Некоторые также используют его как формат контейнера, содержащий пакеты потоковых данных . [8] Общие расширения файлов, используемые для результирующих файлов: .HEX [1] или .H86. [2] [3] Затем HEX-файл считывается программистом для записи машинного кода в PROM или передается в целевую систему для загрузки и выполнения. [9] [10]

Шестнадцатеричный формат Intel был первоначально разработан для Intellec Microcomputer Development Systems (MDS) в 1973 году для загрузки и выполнения программ с бумажной ленты . Он также использовался для указания содержимого памяти Intel для производства ПЗУ. [11] В 1973 г. «программная группа» Intel состояла только из Билла Байерли и Кена Бёрджета, а также Гэри Килдалла в качестве внешнего консультанта. [12] [13] Начиная с 1975 года, формат использовался системами MCS Series II ISIS-II с использованием расширения файла HEX. [14] Многие устройства для программирования PROM и EPROM принимают этот формат.

Intel HEX состоит из строк текста ASCII , разделенных символами перевода строки или возврата каретки , или и тем, и другим. Каждая текстовая строка содержит шестнадцатеричные символы, которые кодируют несколько двоичных чисел. Двоичные числа могут представлять данные, адреса памяти или другие значения, в зависимости от их положения в строке, а также типа и длины строки. Каждая текстовая строка называется записью .

Байт контрольной суммы записи представляет собой дополнение до двух младшего значащего байта (LSB) суммы всех декодированных значений байтов в записи, предшествующей контрольной сумме. Он вычисляется путем суммирования значений декодированных байтов и извлечения младшего бита суммы (т. е. контрольной суммы данных), а затем вычисления дополнения до двух младшего бита (например, путем инвертирования его битов и добавления единицы).

Например, в случае записи : 03 0030 00 02337A 1E сумма декодированных значений байтов равна 03 .+00+30+00+02+33+= E2, который имеет значение LSB E2. Дополнение до двух E2равно1E , который представляет собой байт контрольной суммы, появляющийся в конце записи.

Достоверность записи можно проверить, вычислив ее контрольную сумму и проверив, что вычисленная контрольная сумма равна контрольной сумме, появляющейся в записи; ошибка указывается, если контрольные суммы отличаются. Поскольку байт контрольной суммы записи является дополнением до двух и, следовательно, аддитивной инверсией контрольной суммы данных, этот процесс можно свести к суммированию всех декодированных значений байтов, включая контрольную сумму записи, и проверке того, что младший бит суммы равен нулю. Применительно к предыдущему примеру этот метод дает следующий результат: 03+00+30+00+02+33++1E = 100, который имеет значение LSB 00.