D2T - Конвертер файлов в массивы
Автор ARV   
20.10.2010 г.

Потребовалась мне утилитка, которая из обычного 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, - это параметры по умолчанию.

Учтите, что если имя выходного файла не указано, программа выводит результат своей работы в консоль. Регистр опций роли не играет. Напомню, что если какие-либо строковые параметры, вводимые вами, содержат пробелы, то их обязательно надо заключать в двойные кавычки, иначе пробел будет воспринят как промежуток между опциями.

Скачать программу можно в файлохранилище:
http://arv.radioliga.com/component/option,com_remository/Itemid,27/func,startdown/id,134/

Исходный текст программы так же доступен:
http://arv.radioliga.com/component/option,com_remository/Itemid,27/func,startdown/id,135/

Обсудить материал на форуме. (0 сообщений)

Буду благодарен за советы по совершенствованию или исправлению замеченных багов.

 


Добавить в любимые (0) | Просмотров: 11908

  Ваш коментарий будет первым

Только зарегистрированные пользователи могут оставлять коментарии.
Пожалуйста зарегистрируйтесь или войдите в ваш аккаунт.