Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Краткая теоретическая справка




Процесс подготовки исполняемых программ для сигнального процессора TMS320C50 можно разделить на четыре следующих этапа:

1) создание одного или нескольких модулей-файлов (имя файла).asm, с исходным текстом программы, написанным на языке ассемблера;

2) трансляция полученного файла (имя файла).asm программой DSPA.EXE и создание объектного файла (имя файла).obj и листинга (имя файла).lst. При этом, помимо перевода текста программы, производится проверка исходного текста программы на наличие синтаксических ошибок ассемблера, сообщения о которых приводятся в листинге;

3) написание командного файла компоновки (имя файла).сmd c указанием компонуемых программных модулей, порядка соединения секций и используемых областей памяти для размещения этих секций;

4) компоновка модулей и секций с помощью компоновщика DSPALNK.EXE и получение выходного файла (имя файла).out и файла (имя файла).map, позволяющего контролировать правильность распределения памяти и соединения секций, заданные в командном файле (имя файла).cmd.

Примером программы, на базе которой будут отрабатываться основные шаги по подготовке исполняемых программ для TMS320С50, является программа с именем SIM. Она представлена в файле sim.asm и состоит из нескольких частей, в каждой из которых реализуется некоторая операция.

В таблице 2.1 представлена карта размещения в памяти данных переменных, используемых в программе.

Т а б л и ц а 2.1

Переменная Адрес ячейки памяти данных (Hex) Начальное значение переменной (Hex)
Х
Y
Z
X1
Y1
Z1
X2 0a
Y2 0b
Z2

 

Ниже представлен полный текст программы SIM:

; Программа выполнения простейших операций на TMS320C50

  .version  
  .mmregs   ; Разрешение использования ;символьных ;имен регистров процессора.
         

; Задание значений переменных в памяти данных

  .data    
X .word ; Начальное значение Х  
Y .word ; Начальное значение Y  
Z .word ; Начальное значение Z  
X1 .word ; Начальное значение Х1  
Y1 .word ; Начальное значение Y1  
Z1 .word ; Начальное значение Z1  
X2 .word 0ah ; Начальное значение Х2  
Y2 .word 0bh ; Начальное значение Y2  
Z2 .word 0ch ; Начальное значение Z2  
           

; Резервирование области памяти размером 6 ячеек

  .bss M1,6 ; Символический адрес ;первой ячейки М1

; Таблица векторов прерывания

  .sect “ Vectors “
RESET B START ; Начальная строка таблицы ;векторов прерывания – ;переход к основной программе

; Основная программа

.text

START LDP #0 ; Указатель страницы памяти данных
  OPL #04h,PMST ; Задать значение регистра PMST
  CLRC OVM ; Запретить режим переполнения
  SPM ; Установить нулевой сдвиг PREG
L1:      
  LDP #X ;Указать на страницу памяти, хранящую Х
  LACC X ;Загрузить в АCC содержимое ячейки Х
  ADD Y ;Прибавить к АСС содержимое ячейки Y
  ADD #5 ;Прибавить к АСС непосредственное ;слагаемое
  SACL Z ;Сохранить содержимое младшего слова АСС в ячейке Z
  L2:      
  LDP #X1 ;Указать на страницу памяти, хранящую Х1
  LT X1 ;Загрузить в T-регистр содержимое ячейки ;Х1
  MPY Y1 ;Перемножить Х1 и Y1. Результат в РREG
  SPL Z1 ;Сохранить содержимое младшего слова ;PREG в ячейке Z1
L3:      
  LDP #X1 ;Указать на страницу памяти, хранящую Х2
  LACC Y1 ;Загрузить в АCC содержимое ячейки Х2
  SUB X1 ;Вычесть из АСС содержимое ячейки Y2
  SACL Z2 ;Сохранить содержимое младшего слова ;АСС в ячейке Z2
L4:      
  LDP #X ;Указать на страницу памяти, хранящую Х
  LACC Z1 ;Загрузить в АCC содержимое ячейки Z1
  SACL X ;Сохранить содержимое младшего слова ;АСС в ячейке X
L5:      
  LDP #Y2 ;Указать на страницу памяти, хранящую Y
  MAR *,AR0 ; Сделать активным регистр AR0
  LAR AR0,Y2 ;Загрузить в АR0 содержимое ячейки Y2
L6:      
  LDP #Z ;Указать на страницу памяти, хранящую Х
  LAR AR6,#Z ;Загрузить в АR6 адрес ячейки Z
L7:      
  LDP #Y2 ;Указать на страницу памяти, хранящую Y2
  LACC #07fffh ;Загрузить в АCC число 7fff (Hex)
  SACL Y2 ;Сохранить содержимое младшего слова ;АСС в ячейке Y2
  SACB   ;Сохранить содержимое АСС в ACCB
  SAMM AR1 ;Сохранить содержимое АСС в регистре ;AR1
  B L9 ;Безусловный переход к фрагменту ;программы с меткой L9
L8:      
  LDP #X ;Указать на страницу памяти, хранящую X
  ZAP   ;Обнулить АСС и регистр PREG
  LT X ;Загрузить в регистр Т переменную X
  MPY X1 ;Умножить X на X1 результат в регистре ;PREG
  LTA Y ; Загрузить в регистр Т переменную Y, ;предыдущее произведение из PREG ;добавляется в ACC
  MPY Y1 ; Умножить Y на Y1 результат в регистре ; ;PREG
  LTA Z ;Загрузить в регистр Т переменную Z, ;предыдущее произведение из PREG ;добавляется в ACC
  MPY Z1 ; Умножить Z на Z1 результат в регистре ;PREG
  APAC   ;предыдущее произведение из PREG ;добавляется в ACC
  SACL X2 ;Сохранить содержимое младшего слова ;АСС в ячейке X2
  B START ;Переход к началу программы для ;повторения
  .end   ; Конец программы

Для компоновки представленной выше программы используется командный файл sim.cmd, в котором задается одно из возможных распределений памяти, используемое в работе по изучению симулятора и представленное ниже.

-v0 /* версия (цифра 0) */

-e RESET

-m sim.map /* Задание имени файла с таблицей компоновки *.мар* /

-o sim.out /* Задание имени выходного файла *.out (буква о) */

sim.obj /* Компонуемый объектный файл, сформированный программой dspa.exe */

MEMORY

{

PAGE 0: /* Память программ */

/* Блок для векторов прерываний в памяти */

VECS: origin = 0x0000, length = 0x02

/* Блок для размещения программ в памяти процессора */

PROG: origin = 0x0040, length = 0x0200

PAGE 1: /* Память данных */

/* Размещения регистров процессора, отраженных на память в памяти процессора */

REGS: origin = 0x0000, length = 0x0060

/* Блок для размещения данных в памяти данных процессора */

BLOCK0: origin = 0x0800, length = 0x0200

}

SECTIONS

{

Vectors : {} > VECS PAGE 0

.text : {} > PROG PAGE 0

.data : {} > BLOCK0 PAGE 1

.bss : {} > BLOCK0 PAGE 1

/* Секции .data и .bss будут размещаться в памяти данных, начиная с адреса 800h подряд непосредственно друг за другом, занимая количество ячеек в соответствии со своими реальными размерами */

}

Таким образом, на основе объектного файла SIM.OBJ, полученного после трансляции, и под управлением SIM.CMD, программой компоновщика DSPLNK.EXE формируется выходной файл SIM.OUТ, который будет использоваться при работе с программой симулятора. Программа компоновщика формирует также таблицу реально полученного распределения памяти SIM.MAP. Этот файл позволяет контролировать инициализацию начальных адресов и количество ячеек памяти, используемых для хранения программы и данных в процессоре, а также правильность расположения и соединения секций программы.





Рекомендуемые страницы:




Читайте также:


Воспользуйтесь поиском по сайту:



©2015- 2021 megalektsii.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.