Рис. 23.7
Данный проект содержит программу, предназначенную для сложения двух векторов (массивов) данных x_input[n] и y_input[n] и размещения результата по адресу ввода-вывода z_out. В программе иллюстрируется начальная инициализация входных массивов и настройка генераторов адреса. Среда разработки VisualDSP++ позволяет по шагам посмотреть процедуру инициализации массивов, выборки чисел из памяти и их сложения в цикле. Массивы имеют длину n=10, объявленную в самом начале программы с помощью оператора: #define n10. Результат сложения будет пересылаться в область ввода-вывода с адресом z_out=0x100, объявленным в программе с помощью оператора: #define z_out x100. Массив данных x_input[n] будет храниться в памяти данных процессора после загрузки из файла «xin.dat», что определено строками программы:
.section/data data1;
.VAR x_input[n] = "xin.dat";
Второй массив данных y_input[n] будет храниться в памяти программ процессора после загрузки из файла «yin.dat», что определяется строками программы:
.section/pm pm_da;
.VAR y_input[n] = "yin.dat";
Далее в программе размещаются векторы прерываний. Тело основной программы состоит из строк:
.section/pm program;
start: I2=x_input; /*pointer to x input buffer*/
L2=0; /*noncircular buffer*/
I6=y_input; /*pointer to y input buffer*/
L6=0;
M0=1; L0=0;
M5=1; L5=0;
CNTR=n-1;
AX0=DM(I2,M0), AY0=PM(I6,M5); /*Get first data*/
DO add_loop UNTIL CE;
AR=AX0+AY0, AX0=DM(I2,M0), AY0=PM(I6,M5);
add_loop: io(z_out)=AR; /*Write output*/
AR=AX0+AY0;
io(z_out)=AR;
IDLE;
Выполним данную программу в пошаговом режиме. Для этого вначале произведем компиляцию программы, нажав на клавиатуре клавишу F7. В результате программа будет скомпилирована, и отобразится окно, приведенное на рис. 23.8.
Рис. 23.8
Этот же результат можно получить, выполнив команду главного меню Project→Build project или нажав соответствующую ей кнопку на панели инструментов. Из рисунка видно, что стрелка, показывающая очередную выполняемую программу, располагается напротив строки с меткой «reset». Кроме того, справа автоматически открывается окно дизассемблированных команд программы. Выполнять программу в пошаговом режиме можно, нажимая клавишу F11, выполнив команду Debug→Step Into или нажав соответствующую ей кнопку на панели инструментов.
При каждом таком действии будет выполняться очередная строка команд. Результат работы программы можно наблюдать по изменению содержимого памяти и регистров процессора. Окна, отображающие память процессора, вызываются с помощью главного меню «Memory». Для отображения окон с содержимым регистров процессора используется кнопка главного меню «Register». Для отображения регистров удобно воспользоваться командой Register→Custom, которая позволяет выбрать только те регистры, которые необходимо видеть пользователю. При выполнении этой команды откроется окно, изображенное на рис. 23.9.