- •1. Цель работы
- •2. Структура проекта
- •3. Рекомендуемый путь и этапы создания проекта в vdsp
- •3.1 Пример и описание .Ldf файла
- •Search_dir() - определение путей к текущей рабочей директории и к директории lib.
- •3.2 Структура простейшего .Asm файла
- •Rti; nop; nop; nop; /* 0x0008: irql1*/
- •3.3 Компоновка проекта и создание исполняемого .Dxe файла
- •Rti; nop; nop; nop; /* 0x0008: irql1*/
- •Rti; nop; nop; nop; /* 0x0020: sport1 transmit*/
- •Rti; nop; nop; nop; /* 0x0028: Timer*/
- •4. Запуск и отладка проекта.
- •4.1 Запуск проекта Lab1
- •4.2 Отображение содержимого памяти
- •4.3 Отображение содержимого регистров
- •4.4 Построение графиков
- •5. Задание к лабораторной работе
- •1. Особенности и типы команд сигнального процессора
- •2. Используемые условия
- •2.1 Подробное описание регистров состояния и значения их битов
- •2.2 Логическое описание условий (cond), используемых с оператором if
- •2.3 Условия завершения цикла do until (term)
- •3. Многофункциональные инструкции
- •3.1 Операции alu/mac с одновременным чтением памяти данных и памяти программ
- •3.2 Чтение памяти данных и памяти программ
- •3.3 Вычисления с чтением из памяти
- •3.4 Вычисления с записью в память
- •3.5 Вычисления с пересылкой регистр-регистр
- •4. Инструкции alu, mac и shifter
- •4.1 Инструкции и стандартные функции
- •4.2 Инструкции и стандартные функции
- •4.3 Инструкции и основные функции
- •5. Команды пересылки данных
- •6. Инструкции управления исполнением программы
- •If eq jump my_label; call (i6);
- •7. Другие инструкции и команды не вошедшие в
- •8. Обобщённая таблица команд
Rti; nop; nop; nop; /* 0x0008: irql1*/
RTI; NOP; NOP; NOP; /* 0x000C: IRQL0*/
RTI; NOP; NOP; NOP; /* 0x0010: SPORT0 transmit*/
RTI; NOP; NOP; NOP; /* 0x0014: SPORT0 receive*/
RTI; NOP; NOP; NOP; /* 0x0018: IRQE*/
RTI; NOP; NOP; NOP; /* 0x001C: BDMA*/
RTI; NOP; NOP; NOP; /* 0x0020: SPORT1 transmit*/
RTI; NOP; NOP; NOP; /* 0x0024: SPORT1 receive*/
RTI; NOP; NOP; NOP; /* 0x0028: Timer*/
RTI; NOP; NOP; NOP; /* 0x002C: Power down*/
После объявления необходимых переменных и описания таблицы векторов прерываний в .ASM файле должен располагаться раздел кода программы.
Пример раздела кода программы:
.section/code program;
start:
/* тело программы */
end: IDLE;
JUMP end;
В данном разделе используется метка start, которая описана в таблице векторов прерываний и к которой осуществляется переход при запуске программы. После исполнения тела программы реализуется ожидание прерывания в бесконечном цикле. Команды ассемблера подробно описаны в приложении.
3.3 Компоновка проекта и создание исполняемого .Dxe файла
При создании исполняемого .DXE файла исходный текст подвергается с помощью собственно ассемблера трансляции, в результате которой получается промежуточная объектная программа. В процессе трансляции ассемблер обнаруживает синтаксические ошибки – нарушения правил языка – и выдает листинг трансляции, содержащий диагностическую информацию и сообщения об ошибках. При наличии ошибок необходимо вернуться к исходному тексту программы для ее коррекции. Объектные программы, полученные в результате трансляции, не привязаны к каким-либо определенным адресам памяти, т.е. они являются перемещаемыми и могут выполняться при размещении в разных местах памяти.
Следующим после трансляции этапом подготовки исполняемого .DXE файла является компоновка одного или, как правило, нескольких оттранслированных исходных файлов. Основным средством компоновки проекта является компоновщик, который решает следующую задачу: привязывает перемещаемые разделы объектной программы к абсолютным адресам памяти. При этом разделы размещаются именно в той памяти, тип которой указан идентификатором тип_памяти.
Компоновку проекта и создание исполняемого .DXE файла рассмотрим на примере. В примере создаются два массива: массив исходных данных и массив, соответствующие элементы которого являются квадратами элементов исходного массива.
Создадим проект, для этого необходимо:
создать папку Lab1 для хранения всех файлов, включаемых в проект;
из меню Пуск\Программы\VisualDSP запустить 21xx Environment, после чего на экране появится окно, изображенное на рис.1;
создать новый файл проекта – меню File\New, далее в окне “Новый документ” выбрать Project и нажать OK;
сохранить файл проекта в папке Lab1 под названием Lab1.dpj;
в окне Project options, вкладке Project, поле Processor выбрать тип процессора ADSP-2189 и нажать OK;
создать новый файл для текста программы на ассемблере – меню File\New, далее в окне “Новый документ” выбрать Editor File и нажать OK;
в появившемся окне (рис.1 – окно 2) ввести текст программы:
/* начало файла Lab1.asm */
#define N 19
.section/data data1;
.VAR x[N];
.VAR y[N];
.section/code interrupts;
__reset: JUMP start; NOP; NOP; NOP;/* 0x0000: Reset vector*/
RTI; NOP; NOP; NOP; /* 0x0004: IRQ2*/