• Simulators (симулятор). Позволяет отлаживать программы путем имитации работы сигнального процессора в памяти персонального компьютера. Интерактивный пользовательский интерфейс симулятора поддерживает полное символическое ассемблирование и дизассемблирование эмулируемых команд. Симулятор полностью эмулирует конфигурацию аппаратного обеспечения, описанную с помощью файла архитектуры. Он обеспечивает покомандное выполнение ассемблерного кода ADSP-2181 и позволяет отображать на экране монитора внутренние регистры и память процессора.
• Splitter («сплиттер» — распределитель). Эта программа-утилита по выходным данным компоновщика формирует файл для прошивки ПЗУ, из которой автоматически может производиться загрузка программы в память процессора через порт BDMA.
Из описания кросс средств, изложенного выше, становится понятно, что при трансляции программ, написанных на языке ассемблера, можно исключить операции системного конфигуратора программы и компилятора языка Си.
Полный пакет кросс средств можно приобрести вместе с отладочным комплектом EZ-Kit Lite у представителей фирмы Analog Device. Облегченную версию кросс средств, для сигнального процессора ADSP-2181 под управлением операционной системы DOS, можно скачать с сайта www.xxivek.narod.ru. В качестве отладочного средства при этом можно использовать тестовую плату, описанную в гл. 3.
Установка полного пакета на компьютер не вызывает сложностей. Его необходимо инсталлировать на диск С в корневой каталог ADI_DSP. Облегченная версия кросс средств с сайта www.xxivek.narod.ru просто распаковывается и копируется в каталог C:\ADI_DSP. После этого необходимо создать рабочий каталог для ваших будущих рабочих программ на любом диске. Для каждого нового проекта лучше всего создавать отдельный каталог или подкаталог, это позволит упорядочить все проекты.
После установки средств разработки, в каталоге ADI_DSP должны находиться подкаталоги с файлами транслятора, библиотеками и другими служебными файлами. Основные исполняемые файлы располагаются после инсталляции пакета в каталоге C:\ADI_DSP\21XX\BIN\. Перечень исполняемых файлов и их назначение приведены в табл. 6.2.
Таблица 6.2
| Имя файла | Назначение |
|---|---|
| bld21.exe | Системный конфигуратор (построитель) программы |
| cc1.exe, g21.exe | Компиляторы языка Си |
| asm21.exe | Компилятор ассемблера |
| asmpp.exe | Ассемблер препроцессор |
| asm2.exe | Ассемблер |
| ld21.exe | Компоновщик (редактор связей) |
| Iib21.exe | Библиотекарь (программа для работы с библиотеками программ) |
| spl21.exe | Разделитель программ для программирования ПЗУ (сплиттер) |
| sim2181.exe | Симулятор программ для процессора ADSP-2181 |
| hexbin2.exe | Преобразователь HEX кода в двоичный формат |
При инсталляции пакета кросс средств, в файле автозагрузки автоматически создаются служебные строки, определяющие пути к каталогам пакета и некоторые переменные среды окружения операционной системы. Подобные записи создают многие инсталляционные пакеты. В результате чего может произойти переполнение служебной области памяти компьютера, и некоторые программы не будут работать.
Для того чтобы избежать подобных неприятностей, можно воспользоваться другим способом. Независимо от того, были ли произведены записи в файл автозагрузки или нет, можно включить все необходимые служебные строки в собственный командный файл, с помощью которого в дальнейшем выполнять автоматическую трансляцию программ. Дело в том, что при выполнении командного файла операционная система автоматически запускает новый сеанс программы command.com, в котором можно определить новые пути поиска файлов и переменные среды с помощью соответствующих команд. На практике это делается следующим образом.
Создается командный файл, в начале которого записываются строки определения пути поиска файлов и установки переменных среды, а далее записываются строки команд для автоматизации необходимого процесса трансляции. После запуска такого командного файла, с именем файла транслируемой программы в качестве параметра, произойдет полная трансляция файла программы, с получением всех необходимых файлов для загрузки в процессор. Ниже приведен текст такого командного файла, специально созданного мною для облегчения и ускорения трансляции программ для сигнального процессора ADSP-2181. Данный командный файл позволяет выполнять трансляцию файлов программ, начиная с компилятора, минуя операции построителя системы System Builder и трансляции программы с языка Си.
@echo off
set path=c:\adi_dsp\21XX\bin
set adi_dsp=c:\adi_dsp
if %1 == goto no_file
echo Компиляция...
asm21 %1 -2181 -l
if not exist %1.obj goto error
echo ...завершена успешно pause
echo Компоновка...
ld21 %1 -a adsp2181 -e %1 -x -g
if not exist %1.lda goto next1
del %1.lda
:next1
ren %1.exe %1.lda
if not exist %1.lda goto error2
echo ...завершена успешно pause
echo Сплиттинг...
rem для загрузки через BDMA
spl21 %1.lda %1 -loader -2181 > %1.msg
echo ...завершен успешно
pause
echo Преобразование в бинарный файл...
hexbin2 %1.bnm %1.bin m 0 > %1.msg
echo ...завершено успешно
pause
goto end
:error
echo Ошибка компиляции!
pause
goto end
:error2
echo He найден файл %1.lda !
pause
goto end
:no_file
echo Используйте: asmdsp.bat имя файла без расширения
pause
:end
Введите текст этого файла с помощью любого текстового редактора с кодировкой DOS в компьютер и сохраните в файле с именем asmdsp.bat или скопируйте с компакт-диска, прилагаемого к книге. Он позволит автоматизировать процесс трансляции файлов с программами для сигнального процессора. Если просмотреть строки этого командного файла, то нетрудно понять что он делает. В первой строке командного файла находится команда запрета отображения командных строк на экран. Далее следуют две строки для установки пути к рабочему каталогу с файлами трансляции и переменной adi_dsp. Затем проверяется, было ли введено имя файла в командной строке при запуске данного файла. Если имени задано не было, производится переход на метку с названием no file, после которой на экран отобразится подсказка о правильном использовании командного файла. Команда pause выводит строку «Нажмите любую клавишу…» и ожидает соответствующее действие от пользователя. Если имя файла для трансляции было задано в строке при запуске командного файла, то переход на метку не производится и начинается процесс компиляции файла с программой. Все процессы трансляции предваряются соответствующим сообщением. Компиляция выполняется командой asm21 %1 -2181 -l. Здесь после вызова программы компилятора asm21.exe с именем файла из командной строки %1 используется ключ -2181 для задания типа процессора и ключ -I для генерации листинга программы. Список всех ключей для конфигуратора bld21.exe, компилятора asm21.exe, компоновщика ld21.exe, распределителя spl2.exe и симулятора sim2181.exe можно получить, запустив отдельно соответствующую программу без параметров или с ключом -help. Переведенный текст этих сообщений приведен в табл. 6.3.
Таблица 6.3
| bld21.exe [-ключ] имя_файла | |
|---|---|
| -c | Установить чувствительность к регистру символов |
| -help | Вывести на экран справку о программе |
| asm21.exe [-ключ_1] [-ключ_2] … [-ключ_N] имя_файла | |
| -Dvar[=exp] | Определить идентификатор для Си препроцессора, например -dten=10 |
| -c | Установить чувствительность к регистру символов |
| -cp | Включить Си препроцессор |
| -I | Создать файл листинга программы |
| -i [глубина] | Раскрыть содержимое включенных файлов в листинге с указанной глубиной |
| -m [глубина] | Раскрыть макросы в файле листинга с указанной глубиной |
| -p | Использовать только препроцессор |
| -s | Отменить семантическую проверку много функциональных инструкций |
| -o имя_файла | Переименовать выходной файл |
| -2181 | Поддержать специальные ассемблерные инструкции для процессора ADSP-2181 |
| -help | Вывести на экран справку о программе |
| ld21.exe имя_файла1 [имя_файла2] … [имя_файлаN] [-ключ_1] [-ключ_2] … [-ключ_N] | |
| -i имя_файла | Указать командный списочный файл |
| -e имя | Присвоить выходным файлам новое имя (по умолчанию 210x.exe) |
| -a имя_файла | Указать файл описания архитектуры |
| -user имя_файла | Поиск библиотечного файла, созданного утилитой построителя библиотеки Iib21.exe |
| -s размер | Задать размер динамической памяти |
| -dir путь | Указать пути каталога для поиска файлов библиотек |
| -lib | Компоновать программу с библиотекой Си |
| -g | Создать файл таблицы символов *.sym |
| -pmstack | Переместить стек в память программ (PM) |
| -rom | Использовать ПЗУ версии библиотечных программ Си |
| -c | Создать стек для компилированных Си программ (DM) |
| -dryrun | Быстрый запуск для теста на ошибки без создания файла загрузки |
| -x | Создать файл распределения памяти *.map |
| -p | Поместить копию библиотечной подпрограммы на загрузочных страницах |
| -group file | Использовать файл групповых модулей |
| -help | Вывести на экран справку о программе |
| spl21.exe входной_файл выходной_файл [-ключ_1] [-ключ_2] … [-ключ_N] | |
| -dm | Распределить только память данных DM |
| -pm | Распределить только память программ РМ |
| -bm | Распределить только память загрузки BM |
| -bs # | Установить размер загрузочной памяти (2048, 1024, 512 или 256 байт) |
| -bb # | Установить размер границы загрузки (2048 или 1024 байт) |
| -u | Формат выходного файла Motorola S (по умолчанию) |
| -i | Формат выходного файла Intel Hex |
| -us | Формат Motorola S1, байтовый (только с ключами -pm или -dm) |
| -us2 | Формат Motorola S2, байтовый (только с ключами -pm или -dm) |
| -ui | Формат Intel Hex, байтовый (только с ключами -pm или -dm) |
| -loader | Создать загрузочный файл |
| -bp # | Большие загрузочные страницы, где # как HEX адрес |
| -bi # | Большие загрузочные страницы, где # как HEX величина |
| -flag | Большие загрузочные страницы с использованием выходных флагов |
| -Id | Использовать специальный загрузчик |
| -2181 | Создать код для процессора ADSP-2181 |
| sim2181 [-a имя_файла] [-c] [-e имя_файла] [-h] [-k имя_файла] [-v] [-w имя_файла] | |
| -a имя_файла | Считывать при запуске файл архитектуры |
| -c | Установить чувствительность к регистру символов |
| -e имя_файла | Загрузить при запуске входной файл с расширением exe (lda) |
| -h | Вывести на экран справку о программе |
| -k имя_файла | Загрузить и выполнить файл командных строк |
| -o имя_файла | Генерировать файл с сообщениями об ошибках |
| -v | Избыточность |
| -w имя_файла | Запустить симулятор с загрузкой ранее созданного файла конфигурации окон с расширением win |
После компиляции программы будет создан файл с именем программы и расширением obj. Однако если на этапе компиляции будут обнаружены ошибки, этого не произойдет и с помощью команды if not exist %1.obj goto error будет осуществлен переход на метку error, для выдачи соответствующего сообщения. При успешной компиляции трансляция программы продолжится.
Компоновка программы выполняется с помощью командной строки: ld21 %1 -a adsp2181 -e %1 -x -g. Здесь после команды вызова компоновщика ld21.exe с именем файла из строки запуска командного файла %1, следует несколько ключей с параметрами. Ключ -a adsp2181 указывает имя файла архитектуры процессора adsp2181.ach. Данный файл создан с помощью построителя программ System Builder и входит в поставку пакета кросс средств. Он состоит из пяти следующих строк:
$2181
$ADSP2181
$0000 3FFF paxINT_PM_USER t
$0000 3FDF dadINT_DM_USER t
$
Этот файл содержит данные, определяющие тип процессора и структуру его памяти, и всегда должен находиться в том же каталоге, где находится файл транслируемой программы. Ключ -е %1 назначает имя выходного файла. Ключи -x и -g предназначены для генерации файла карты памяти *.map и файла с таблицей символьных имен *.sym соответственно. Эти файлы можно использовать в дальнейшем для анализа распределения памяти процессора. Файл с расширением sym необходим, кроме того, для отладки программы с помощью симулятора sim2181.exe. В результате компоновки будет получен файл с именем программы и расширением exe. Этот файл уже можно использовать для загрузки в симулятор или непосредственно в процессор, например через интерфейс IDMA. Формат данного файла приведен в табл. 6.4.
Таблица 6.4
| Символ | Описание назначения |
|---|---|
| ←←i | Признак начала загрузочного файла |
| @PA | Признак блока памяти программ РМ |
| 0000 | Адрес загрузки кодов в память РМ |
| Символ | Описание назначения |
| 123456 | Первый код команды |
| 789abc | Второй код команды |
| def012 | Третий код команды |
| … | и т.д. |
| #123XXXXXXXX | Признак конца блока команд с контрольной суммой |
| @DA | Признак блока памяти данных DM |
| 0000 | Адрес загрузки данных в память DM |
| 1234 | Первое слово данных |
| 5679 | Второе слово данных |
| … | и т.д. |
| #123XXXXXXXX | Признак конца блока данных с контрольной суммой |
| ←←o | Признак конца загрузочного файла |
X — контрольная сумма адреса и данных.
Позже мы подробно рассмотрим способ его загрузки в процессор через интерфейс IDMA. Несмотря на то, что этот файл имеет расширение exe, он не имеет ничего общего с исполняемыми файлами для персональных компьютеров. Тем не менее, случайный его запуск на компьютере может привести к непредсказуемым результатам. Непонятно, чем руководствовалась фирма Analog Device, давая такое расширение этому файлу при разработке кросс средств. Для устранения таких неприятных моментов в командный файл включены следующие четыре строчки:
if not exist %1.lda goto next1
del %1.lda
:next1
en %1.exe %1.lda
Эти строки предназначены для переименования нежелательного расширения загрузочного файла с расширением exe в файл с нейтральным расширением lda. Это делается в последней командной строке. Первые три строки предназначены для проверки наличия файла с расширением Ida от предыдущей трансляции и его удаления, в случае обнаружения, для генерации нового файла.
При успешной генерации загрузочного файла будет выведено соответствующее сообщение и осуществлен переход к группе команд для формирования файла прошивки для ПЗУ, из которого может производиться автоматическая загрузка процессора через интерфейс BDMA. Данный процесс называется «сплиттингом» (распределением) и осуществляется командой: spl21 %1.lda %1 - loader-2181 > %1.msg.
Здесь после команды вызова сплиттера sp21.exe с именем файла из командной строки с расширением Ida, следует несколько ключей и команда перенаправления вывода сообщений, с помощью символа >, в файл с расширением msg. Ключ -loader предназначен для добавления в выходной файл кода загрузчика, а ключ -2181 позволяет формировать код загрузки для процессора ADSP-2181. О коде загрузки я расскажу чуть позже.
В результате работы сплиттера будет создан файл прошивки для ПЗУ, с расширением bnm HEX формата Motorola. На практике, для программирования микросхем памяти чаще пользуются бинарным форматом файлов. Поэтому в командном файле добавлено еще несколько строк, осуществляющих преобразование файла bnm в бинарный файл с расширением bin. Для этого используется распространенная программа hexbin2.exe. Эту программу также можно найти на компакт-диске.
Теперь, когда мы познакомились со всеми процедурами трансляции, выполняемыми с помощью командного файла asmdsp.bat, можно начать транслировать нашу программу. Не забудьте, что вместе с программой в каталоге проекта должен находиться файл описания def2181.h, файл архитектуры adsp2181.ach и созданный и описанный выше командный файл asmdsp.bat.
Выполните трансляцию программы mem_clr.dsp с помощью командной строки asmdsp.bat mem_clr. Обратите внимание на то, что в качестве параметра для командного файла используется имя нашей программы без расширения. Оно будет автоматически подставляться вместо символов %1 командного файла. В результате работы командного файла на экране должны последовательно появиться сообщения:
Компиляция...
...завершена успешно
Нажмите любую клавишу...
Компоновка...
...завершена успешно
Нажмите любую клавишу...
Сплиттинг...
...завершен успешно
Нажмите любую клавишу...
Преобразование в бинарный файл...
...завершено успешно
Нажмите любую клавишу...
По завершении работы командного файла в каталоге с программой должны появиться файлы с именем программы и расширениями int, lst, obj, lda, map, sym, msg, cde, bnl, bnm, bnu и bin. Описание назначения данных файлов проекта в краткой форме приведено в табл. 6.5.
Таблица 6.5
| Расширение | Описание |
|---|---|
| bat | Командный файл |
| sys | Исходный файл системной архитектуры |
| ach | Файл описания архитектуры |
| dsp | Файл ассемблерного модуля (текст программы) |
| lst | Файл листинга |
| int | Файл инициализации |
| obj | Объектный файл |
| cde | Файл кода |
| dat | Файл инициализации данных кода |
| exe (lda) | Файл загрузки образа памяти |
| map | Файл распределения памяти |
| sym | Файл символов |
| bnu | Выходной файл разделителя программ. Содержит старшие байты |
| bnm | Выходной файл разделителя программ. Содержит средние байты |
| bnl | Выходной файл разделителя программ. Содержит младшие байты |
| bin | Файл для программирования ПЗУ в двоичном формате |
| msg | Файл сообщений |
Итак, с помощью приведенного выше командного файла мы получили необходимые нам файлы с расширениями lda и bin для непосредственной загрузки в память процессора и для прошивки ПЗУ соответственно. Файл с расширением sym понадобится нам для отладки программы с помощью программы симулятора sim2181.exe.
Остальные перечисленные выше файлы в каталоге с программой являются вспомогательными, которые после их просмотра и изучения можно смело удалить для очистки каталога. Например, файл с расширением lst содержит листинг программы с нумерацией всех строк программы и машинными кодами процессора, соответствующими ассемблерным командам программы. С его помощью можно увидеть соответствие ассемблерных команд машинным кодам сигнального процессора.
Для автоматического удаления этих файлов я рекомендую создать и использовать еще один командный файл asmclr.bat, состоящий из строк:
del *.map