Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metoda_beta2_8.doc
Скачиваний:
5
Добавлен:
16.11.2019
Размер:
838.66 Кб
Скачать

Search_dir() - определение путей к текущей рабочей директории и к директории lib.

$ADI_DSP – макроопределение, указывающее путь к директории, в которую установлено VDSP.

$COMMAND_LINE_OBJECTSмакроопределение, при использовании которого компоновщик добавляет к имеющемуся списку файлов имена объектных и архивных файлов из командной строки.

$COMMAND_LINE_LINK_AGAINST – открытие списка исполняемых (.DXE или .SM) файлов из командной строки компоновщика.

$COMMAND_LINE_OUTPUT_FILEуказатель на имя выходного исполняемого (.DXE или .SM) файла, который описан в командной строке с ключом компоновщика – о.

3.2 Структура простейшего .Asm файла

Базовой единицей ассемблерных программ сигнальных процессоров является программный раздел. Программа состоит из нескольких разделов, выполняющих разные функции. Раздел включает символические инструкции процессора и директивы, управляющие процессом ассемблирования, компоновки и загрузки. Имена всех директив пишутся с точкой впереди, описание директивы, как и инструкции, завершается точкой с запятой. Внутри раздела используются директивы объявления и описания констант, переменных, инициализации переменных. Разделы начинаются с директивы .section и имеют следующую общую форму:

.section /тип_памяти имя_раздела ;

Идентификатор тип_памяти должен быть одним из стандартных:

  • data или dm, используемая память - память данных (DATA MEMORY);

  • code или pm, используемая память - память программ (PROGRAM MEMORY);

Идентификатор имя_раздела может быть произвольным сочетанием латинских букв, цифр и знаков, но должен быть описан в .LDF файле.

Например, директива:

.section/data data1; - объявляет раздел с именем data1, размещенный в памяти данных.

Переменные в ассемблере ADSP-21хx представляются одномерными массивами и объявляются директивой .VAR. Массив с одним значением соответствует простой переменной. Он задается своим именем и длиной. Его называют также буфером данных. Он может быть линейным или циклическим в зависимости от используемого режима косвенной адресации данных. Общее описание директивы .VAR следующее:

.VAR имя_переменной[длина_массива]=значение_переменной;

Идентификатор имя_переменной может быть произвольным, длина массива должна быть константой, значение переменной имеет следующие формы представления:

  • константа;

  • выражение;

  • имя файла с расширением .DAT, в котором хранятся значения переменной.

Примеры объявления переменных:

1)

.section/data data1;

.VAR y_input=50; - здесь объявляется простая переменная в десятичной системе исчисления у_input, которая размещается в памяти данных.

Объявление переменной у_input в шестнадцатеричной системе исчисления осуществляется следующим образом:

.section/data data1;

.VAR y_input=0x032;

2)

.section/pm pm_da;

.VAR x_input[n]=”x.dat; - эти директивы объявляют массив размерностью n, значения которого (массива) считываются из файла x.dat и размещаются в памяти программ. В этом случае константа n должна быть заранее объявлена.

Часто используемые в программе константы можно заменить осмысленными идентификаторами при помощи директивы #define. Синтаксис объявления констант следующий:

#define имя_константы значение_константы

Пример:

#define n 10 – следует обратить внимание на отсутствие “;” в конце строки.

Для того чтобы закрепить за аппаратными прерываниями DSP определенные программные действия, необходимо описать в .ASM файле таблицу векторов прерываний.

Пример таблицы векторов прерываний, осуществляющий переход на метку start при запуске программы:

.section/code interrupts /* --- таблица векторов прерываний ---*/

__reset: JUMP start; NOP; NOP; NOP; /* 0x0000: Reset vector*/

RTI; NOP; NOP; NOP; /* 0x0004: IRQ2*/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]