Потребовалась мне утилитка, которая из обычного HEX-файла может сгенерировать массив констант, чтобы затем вставить его в программу на Си для микроконтроллера, и, как ни странно, найти ее в интернете я не смог. То ли искать не умею, то ли такое проблемы никого не заботят, то ли еще что помешало... Ну, что нам стоит дом построить? Нарисуем - будем жить! То есть я взял и написал сам такую утилитку.
Назвал ее я скромно D2T, то есть Data to Text converter - преобразователь данных в текст.
Утилитка работает в консольном режиме - это уже на мне начинает сказываться использование различных GNU-программ, а они родом из всяких "никсов", где командная строка - мать родная.
Утилита уже имеет довольно много возможностей:
Считывает любой файл, интерпретируя его как набор двоичных байтов (raw binary format)
Считывает файл в формате Intel HEX (стандарт для всех программаторов)
Может обработать любое количество файлов по маске
Может создавать массивы в форматах, принятых для программ Си, Pascal и ассемблер
Может обрабатывать не все данные в файле, а только выбранный участок
Может выводить результат работы прямо в консоль
Может создавать массивы байтов, 16-битных слов и 32-разрядных слов
Может представлять данные в двоичном, восьмеричном, десятичном (со знаком и без него) и шестнадцатеричном форматах
Имеет дополнительные возможности по изменению формата оформления массива
Я занимаюсь тем, чтобы научить ее обрабатывать и задуманные текстовые файлы типа "дамп памяти" (одно время в таких форматах было модно публиковать прошивки в жарнале Радио). Эта возможность - скорее для интересу, чем для пользы, но как знать - может и пригодится кому...
Интерфейс программы на английском, поэтому кратко опишу параметры командной строки для ее использования.
Опции контроля входного файлов:
-ib файл содержит двоичные данные (по умолчанию) -in имя задает имя входного файла. Можно указать как имя одного файла, в том числе с путем, так и маску для групповой обработки файлов, например, *.dat. Обратите внимание, что имя вводится через пробел от параметра -in
Опции контроля выходных файлов:
-ot NNзадает число данных в одной строке массива, NN указывается через пробел от параметра и может принимать значения от 1 до 32, по умолчанию 8 -ocформирование выходного массива в формате Си -oa формирование выходного массива в формате ассемблера -op формирование выходного массива в формате Pascal -oe .ext задает расширение выходных файлов. Расширение указывается вместе с точкой через пробел от параметра. -on имя задает имя выходного файла. Данная опция не может использоваться для обработки группы файлов. При использовании ее совместно с опцией -oe расширение, указанное в имени файла, будет заменено на указанное в опции -oe. Если вместо имени файла указать *, то для вывода будет использовано имя входного файла с новым расширением. Если в имени файла указан путь, то даже для имени * он будет использован. -ob START,LEN вывод в выходной массив части даных, длиной в LEN байт начиная с байта номер START. Обратите внимание, что между числами START и LEN обязательно должна быть запятая и не должно быть пробелов. Если после запятой не указать число LEN, то будут обработаны данные от указанного начала и до конца файла. Внимание! Отсчет данных ведется не от начала входного файла, а от начала действительных данных в нем! То есть для двоичного начало файла и начало данных это одно и то же, а вот для HEX-файла - нет.
Опции, изменяющие внешнее представление данных в массиве:
-fa str для ассемблерногот формата - начинать каждую строку массива со строки str. Эта опция позволяет изменить обычное .db на другую директиву ассемблера, например, .byte -fx XX для входного HEX-файла задает шестнадцатеричное значение ХХ (без превиксов, т.е. просто FF, например), которым будут заполнены "дыры" в адресах. По умолчанию заполнение ведется значением FF. -nd десятичное представление чисел -no восьмеричное представление чисел -nx шестнадцатеричное представление чисел -nb двоичное представление чисел -sb формировать массив байт со знаком -sw формировать массив 16-битных слов со знаком -sd формировать массив 32-битных слов со знаком -ub формировать массив байтов без знака -uw формировать массив 16-битных слов без знака -ud формировать массив 32-битных слов без знака
Опции для знакового представления чисел имею смысл только для десятичного формата. Если в командной строке не указаны никакие опции, кроме имени входного файла, то программа работает, как если бы были указаны следующие параметры: -on 8 -ib -oc -nx -ub -fa .db -oe .h -fx FF -ob 0, - это параметры по умолчанию.
Учтите, что если имя выходного файла не указано, программа выводит результат своей работы в консоль. Регистр опций роли не играет. Напомню, что если какие-либо строковые параметры, вводимые вами, содержат пробелы, то их обязательно надо заключать в двойные кавычки, иначе пробел будет воспринят как промежуток между опциями.