С файлами в формате Intel HEX сталкивается каждый радиолюбитель, которому приходится программировать микроконтроллеры, ППЗУ и другие микросхемы, содержащие энергонезависимую память. Этот формат разработан фирмой Intel и сложилось так, что сегодня он - фактический стандарт для хранения образов содержимого памяти подобных микросхем. Поэтому практически весь инструментарий, используемый при подготовке и загрузке информации в микросхему (компиляторы, программаторы), формирует и использует файлы этого формата. Такие файлы обычно имеют расширение имени .hex, а сам формат называют просто HEX-форматом.
Файл этого формата - обычный текстовый и состоит из строк (записей), содержащих нетолько информацию о содержимом памяти, но и об адресах ячеек, в которые эта информация должна быть записана. Система адресации позволяет работать с 32-разрядным адресным пространством. Однако зачастую такой необходимости нет, поэтому существуют разновидности HEX-формата для адресного пространства меньшего объёма:
- I8HEX, в котором можно адресовать 16-разрядное линейное адресное пространство, характерное для восьмиразрядных процессоров фирмы Intel;
- I16HEX, в котором можно адресовать 20-разрядное сегментированное адресное пространство, характерное для 16-разрядных процессоров фирмы Intel.
Более подробную информацию о формате Intel HEX можно найти, например, в [1].
Предыдущие версии программы CG-Edit формируют образ знакогенератора в виде массива на одном из языков программирования, который довольно просто вставить в исходный текст разрабатываемой программы. Откомпилировав этот текст, получают HEX-файл, который содержит и собственно программу, и знакогенератор. Его загружают в память программ микроконтроллера за один приём. Но знакогенератор занимает в этом случае часть объёма программной памяти, причём немалую. Наличие же отдельного HEX-файла знакогенератора позволяет загрузить его в другие области памяти, например, в EEPROM или в дополнительную внешнюю микросхему памяти. В последнем случае снимаются ограничения на объём знакогенератора.
Анализируя разрабатываемые радиолюбителями микроконтроллерные устройства, автор пришёл к выводу, что в большинстве из них EEPROM совсем не используется или же в нём занято всего несколько ячеек. А между тем EEPROM некоторых микроконтроллеров имеет довольно большой объём. Например, у микроконтроллеров серии Atmega32x - 1024 байта. Этого вполне достаточно, чтобы хранить знакогенератор кириллицы с размером знакоместа до 8x16 пкс включительно.
Создать отдельный HEX-файл знакогенератора может предлагаемая версия 2.55 редактора растровых шрифтов CG-Edit. Это дальнейшее развитие этой программы версии 2.52 [2]. В дополнение к возможностям последней она позволяет создавать и редактировать файлы знакогенераторов в формате I8HEX.
Каждая запись такого файла представляет собой строку символов кодовой таблицы ASCII и состоит из:
- признака начала записи (символа двоеточия);
- двух шестнадцатеричных цифр (первая - старшая, вторая - младшая), задающих число информационных байтов, содержащихся в записи;
- четырёх шестнадцатеричных цифр, следующих в порядке от старшей к младшей и задающих 16-разрядный адрес, начиная с которого должна быть записана содержащаяся в записи информация. В записи-признаке конца файла адрес нулевой;
- двух шестнадцатеричных цифр признака типа записи (00 - информация, 01 - конец файла);
- блока информации (в записи-признаке конца файла отсутствует). Каждый байт информации описывают двумя шестнадцатеричными цифрами в порядке старшая-младшая. Число байтов должно быть равно указанному в соответствующем поле записи. Первый байт записывают в память по указанному в записи адресу, остальные - по порядку в следующие ячейки;
- двух шестнадцатеричных цифр контрольной суммы - младший байт суммы байта длины записи, двух байтов адреса, байта типа записи, всех информационных байтов и байта контрольной суммы, который должен быть равен нулю.
Записи разделяют ASCI-кодами перевода строки (0D) и возврата каретки (0A). Признак конца файла не содержит изменяющихся полей и всегда выглядит одинаково
:00000001FF
Главное окно программы версии 2.55, показанное на рисунке, почти такое же, как в предыдущей версии. Одно из изменений - в выпадающий список "Формат строки" добавлена строка "Intel HEX". Её нужно выбрать для сохранения файла знакогенератора в таком формате. При этом возможность выбора формата чисел будет отключена, так как он жёстко задан. Справа от списка "Формат строки" появится поле ввода "Смещение", в котором нужно указать начальный адрес записи знакогенератора в микросхему памяти или в EEPROM микроконтроллера. Начиная с этого адреса, знакогенератор будет записан в виде непрерывной последовательности байтов. Интервал допустимых значений смещения - 0-32767. Это позволяет при максимальном значении смещения создавать HEX-файлы содержащих информацию объёмом до 32 кбайт, что более чем достаточно для описания знакогенераторов с размерами знакомест, с которыми работает программа.
Рис. Главное окно программы версии 2.55
Адрес в поле "Смещение" можно вводить в десятичном или шестнадцатеричном виде. По умолчанию программа предлагает нулевой адрес, при котором загрузка информации в программируемую микросхему начнётся с начала её адресного пространства. После ввода начального адреса выполняются обычные действия по сохранению файла.
Имя создаваемого HEX-файла программа формирует по тем же правилам, что и в предыдущей версии, добавляя в его конце через дефис заданное значение начального адреса в виде четырёхзначного шестнадцатеричного числа и расширение .hex, - например, Font16xl6v1p-0020H.hex. Адрес встраивается в имя файла для информирования пользователя об особенностях загрузки его содержимого в микросхему.
Как и в прежней версии, имя файла не содержит ключевой информации для программы и может быть изменено пользователем по своему усмотрению. Однако по расширению .hex программа распознаёт и правильно декодирует файлы этого типа, поэтому искажать его нельзя, можно лишь менять регистр букв (например, .Hex или .HEX).
Знакогенератор в формате HEX загружают в программу CG-Edit точно так же, как и любой другой. В процессе загрузки HEX-файла происходит подсчёт контрольной суммы каждой записи. При обнаружении их несоответствия программа устанавливает внутренний флаг ошибки, но продолжает дальнейшее чтение информации. По мнению автора, нет смысла, безусловно, отказываться от работы с файлом шрифта, содержащим ошибки, ведь после загрузки в редактор его содержимое во многих случаях можно проверить визуально и оперативно исправить искажённые символы.
Перед запуском процесса распознавания параметров шрифта из сбойного файла программа просто предупреждает пользователя о несоответствии контрольной суммы, чтобы он был готов как к поиску и корректировке искажённых символов, а также к возможным ошибкам в распознавании параметров шрифта.
Кроме возможности работы с файлами в формате Intel HEX, в программе CG-Edit версии 2.55 имеются ещё два новшества. Во-первых, появился новый инструмент редактирования знакоместа "Отразить по горизонтали" - экранная кнопка . Он зеркально отражает текущий редактируемый символ по горизонтали, помогая создавать зеркальные символы. Например, скобки различных видов или буквы R и Я. Чтобы создать, например, пару скобок, достаточно нарисовать одну из них, затем скопировать её на место другой и отразить по горизонтали.
Во-вторых, усовершенствована индикация наличия символов в образе знакогенератора. В версии 2.52 программы она действовала лишь в области символов с кодами 7EH-0BFH. Непустое знакоместо программа отмечала точкой в соответствующей ячейке области выбора символов. Теперь действие индикации наличия символов распространено на всю кодовую таблицу. В области 7EH-0BFH наличие символа, как и прежде, отмечает точка, а в других областях - цвет символа в соответствующей ячейке. При фактическом отсутствии символа он - серый, при наличии - чёрный. Например, из приведённого рисунка следует, что в текущем образе знакогенератора присутствуют только цифры 0-9, буквы кириллицы (за исключением ю) и три символа в области 7FH-0BFH. Проверка наличия символов в образе знакогенератора идёт не только во время загрузки шрифта из файла, но и в ходе любой операции редактирования.
В случае удаления всех элементов изображения символа щелчками по ним кнопкой мыши или с помощью инструмента "Ластик" факт очистки знакоместа будет отмечен только после перехода к редактированию другого символа. При этом сообщения, предупреждающего об удалении символа, не будет, так как считается, что выполнить такую последовательность действий можно только осознанно.
В главном окне программы несколько изменено расположение некоторых экранных кнопок, а все экранные кнопки с мнемоническими обозначениями получили всплывающие подсказки.
Программа не требует установки и может быть размещена в любом месте, в том числе на съёмном носителе. В одной папке с исполняемым файлом программы CGE-255.exe должна находиться папка Model с файлами t0.mod- t5.mod и v0.bmp-v3.bmp. Переносить эти файлы в другое место, удалять или переименовывать их недопустимо.
Программа CG-Edit версии 2.55 находится здесь.
Литература
1. Формат Intel-HEX. - URL: http:// spd.net.ru/Article/Intel-HEX.aspx (04.11.16).
2. Савченко А. Новые возможности редактора растровых шрифтов для ЖКИ. - Радио, 2016, № 10, с. 33-36.
Автор: А. Савченко, пос. Зеленоградский Московской обл.