ЛР2 > Визуализация данных в среде Code Composer Studio на примере выполнения логических и арифметических операций

Тема: Знакомство со встроенными средствами визуализации данных среды разработки программного обеспечения для цифровых сигнальных процессоров Code Composer Studio

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

 

Задание 1.

 

    Шаг 1. Создайте в рабочей директории новый проект. Назовите его Test2.

    Шаг 2. Создайте исходный файл проекта. Текст программы приводится ниже.

 

    unsigned int A,B,C,D,E,F;

 

void main(void)

{

    unsigned int i;

    A=0X000F;

    B=0X00F0;

    C=0X0F00;

    i=0;

    while(i<256)

        {

                D=A&i;

                E=B&i;

                F=C^i;

                i=i+1;

        }

}

 

Сохраните программу под именем Test2.c в рабочей директории проекта. Данная программа описывает выполнение простых логических операций над переменной i. Переменная i изменяет свои значения в диапазоне от 0 до 255. Константы А, В и С представляют собой маски (имеют фиксированное значение), в которых только четыре бита имеют значение логической «1» а все остальные биты – логического «0». Переменные D и E – результат наложения масок А и В на переменную i (операция логическое «И»). Переменная F является результатом логической операции «исключающее ИЛИ» над переменной i и маской С.

    Шаг 3. Добавьте файлы в проект. Файл Test2.c находится в рабочей директории проекта. Командный файл компоновщика (линкера) EzDSP_RAM_lnk.cmd – находится в папке Solutions. Подключите библиотеку функций языка С rts2800_ml.lib (этот файл располагается в папке …\CCStudio_v3.1\c2000\cgtools\lib\ ). Для подключения библиотеки можно воспользоваться настройками установок компоновщика (линкера). Запустите проект на компиляцию. Укажите размер стека.

    Шаг 4. Если проект скомпилировался без ошибок, загрузите программу в ЦСП. Перейдите к программной метке «main». Вызовите окно просмотра переменных Watch Window, и добавьте в него переменные A, B, C, D, E, F и i. Измените формат представления этих переменных на шестнадцатеричный. В результате всех проделанных операций внешний вид среды проектирования Code Composer Studio должен выглядеть так, как показано на рисунке 1.

 


    Рисунок 1. Внешний вид среды Code Composer Studio

 

Убедитесь, что программа работает. Запустите ее на выполнение с помощью команды Run. Через некоторое время остановите выполнение программы командой Halt. Обратите внимание на изменения в окне просмотра переменных. Установите процессор в исходное состояние с помощью последовательности команд Reset CPU, Restart и Go Main.

Шаг 5. Среда Code Composer Studio предоставляет возможность просмотра состояния внутренних регистров процессора при выполнении программы. Для того, чтобы открыть окно просмотра состояний внутренних регистров, выполните следующую команду View Þ Registers Þ CPU Registers. Окно состояний внутренних регистров процессора показано на рисунке 2.


    Рисунок 2. Окно состояний внутренних регистров процессора

 

    В этом окне отражается состояние следующих регистров:

    – АСС – аккумулятор;

    – Р – регистр результата перемножения;

    – ХТ – регистр первого сомножителя;

    – XAR0-XAR7 – восемь вспомогательных регистров-указателей;

    – РС – программный счетчик;

    – RPC – регистр хранения адреса возврата из подпрограмм;

    – ST0 – регистр статуса 0;

    – ST1 – регистр статуса 1;

    – DP – регистр-указатель текущей страницы памяти;

    – SP – регистр-указатель текущего адреса стека;

    – IER – регистр масок прерываний;

    – IFR – регистр флагов прерываний;

    – DBGIER – отладочный регистр масок прерываний;

    – DPRANGE – указатель диапазона адресов текущей страницы памяти;

    – PMSHIFT – величина и направление сдвига данных регистром, расположенным между регистром результата перемножения и аккумулятором.

    Шаг 6. Все переменные, используемые в программе, хранятся в области памяти данных процессора. В среде Code Composer Studio существует возможность просмотра состояния внутренних ячеек памяти. Для того, чтобы узнать в каких ячейках памяти хранятся наши переменные, необходимо открыть файл Test2.map. Этот файл представляет собой карту памяти, создаваемую в процессе компоновки проекта. С помощью команды File Þ Open… (укажите тип файла – Memory Map Files (*.map)) откройте файл Test2.map (он находится в рабочей директории проекта, в папке Debug). В данном файле найдите место, где указано расположение внутренних переменных в области памяти данных (рисунок 3).

 


    Рисунок 3. Фрагмент файла Test2.map

 

В нашем примере они располагаются в ячейках с адресами с 0х008084 по 0х008089. Неинициализированные переменные (в нашем примере – это i) располагаются в области стека, которая начинается с адреса 0х0400. Для просмотра нужных областей памяти выполните команду View Þ Memory… В открывшемся диалоговом окне укажите область памяти, которую необходимо отображать. Для этого в окне Title укажите Variables (переменные). В окне Address укажите адрес первой отображаемой ячейки – 0х00008084 (точный адрес может отличаться от указанного в примере! Смотрите внимательно файл карты памяти!). В окне Page (область отображаемой памяти) укажите Data (обычно – это значение указано по умолчанию). Если все настройки сделаны (как на рисунке 4), нажмите ОК. Откройте еще одно окно отображения области памяти с названием stack и начальным адресом 0х00000400. Закройте файл Test2.map. Если все сделано правильно, то внешний вид среды проектирования должен выглядеть так, как показано на рисунке 5.

    Установите режим просмотра исходного файла одновременно на языке С и ассемблере. Установите точку останова (breakpoint) в строке исходного файла с кодом i=i+1. Запустите команду на выполнение с помощью команды Run. После остановки программы в точке останова обратите внимание на изменения, которые произошли с переменными. Все значения, которые были изменены на данном шаге работы программы, отображаются в окнах красным цветом (рисунок 6). На рисунке видно, что внутренняя переменная i хранится в ячейке памяти данных по адресу 0х00000405.

    Последовательно запуская программу на выполнение, проверьте правильность вычисления логических функций. Обратите внимание на значения, которые находятся в аккумуляторе и каким образом они получаются (для этого выполните несколько команд в пошаговом режиме).


    Рисунок 4. Настройки отображаемой области памяти

 


 Рисунок 5. Внешний вид среды Code Composer Studio с окнами просмотра содержимого памяти данных

 

    После окончания проверки функционирования программы перейдите к исходному файлу. Обратите внимание как реализуются логические функции на языке ассемблер. Если необходимо получить подсказку по одной из ассемблерных команд – установите курсор в поле мнемонической записи

 

    Рисунок 6. Отражение изменений переменных при работе программы

 

команды (например XOR или MOV) и нажмите клавишу F1. Откроется встроенный справочник по командам языка ассемблер с подробным описанием выбранной команды.

    На этом первая часть нашей работы закончена. Для закрепления материала попробуйте самостоятельно изменить реализуемые логические функции и проверить их работоспособность.

 

Задание 2

 

    Перед тем, как приступить к выполнению второго задания, закройте предыдущий проект с помощью команды Progect Þ Close. Закройте все открытые окна.

 

    Шаг 1. Создайте в рабочей директории новый проект. Назовите его Test22.

    Шаг 2. Создайте исходный файл проекта. Текст программы приводится ниже.

 

#include “Test22.h”

 

int inp_sig[SIZE];

int out_sig[SIZE];

int buff[SIZE];

 

int gain=KOFF;

 

int offset=OFF;

 

void main()

    {

    unsigned int i;

 

while(1)

 

    {

puts(” программа работает\n”);

          for(i=0;i<=SIZE;i++)

            {

                    out_sig[i]=(gain*inp_sig[i])+offset;


            }

    }

     }

 

Сохраните программу под именем Test22.c в рабочей директории проекта. Данная программа описывает выполнение простых математических действий. Выходной массив переменных out_sig[SIZE] получается путем умножения элементов входного массива inp_sig[SIZE] на постоянный коэффициент gain с добавлением постоянного смещения offset. В процессе работы программы в окно сообщений будет выводиться строка «программа работает».

    Шаг 3. Создайте вспомогательный файл (файл включений), в котором будут задаваться размеры массивов переменных, значения коэффициента усиления и величины постоянного смещения. Текст данного файла приводится ниже.

 

#define KOFF 10

#define OFF 200

#define SIZE 100

 

Сохраните этот файл в рабочей директории проекта под именем Test22.h. В нашем варианте программы заданы следующие параметры:

    – коэффициент усиления gain равен 10;

    – величина постоянного смещения offset равна 200;

    – размер массивов переменных SIZE равен 100.

    Шаг 4. Добавьте файлы в проект. Файл Test22.c находится в рабочей директории проекта. Командный файл компоновщика (линкера) Test22.cmd – находится в папке Solutions. Подключите библиотеку функций языка С rts2800_ml.lib (этот файл располагается в папке …\CCStudio_v3.1\c2000\cgtools\lib\). Для подключения библиотеки можно воспользоваться настройками установок компоновщика (линкера). После добавления в проект исходного файла, командного файла компоновщика и библиотеки функций языка С, выполните команду Project Þ Scan All File Dependencies. Обратите внимание, после выполнения этой команды в папке Include (окно навигатора проекта) появился файл Test22.h. Запустите проект на компиляцию.

    Шаг 5. Если проект скомпилировался без ошибок, загрузите программу в ЦСП. Перейдите к программной метке «main». Вызовите окно просмотра переменных Watch Window, и добавьте в него переменные gain и offset. В результате всех проделанных операций внешний вид среды проектирования Code Composer Studio должен выглядеть так, как показано на рисунке 7.

 


    Рисунок 7. Внешний вид среды для второго задания

    Шаг 6. Теперь мы научимся подключать внешние входные данные к нашей программе. Для этого скопируйте в рабочую директорию проекта файл Sine.dat, который располагается в директории ..\ССStudio_v3.1\tutorial\sim28xx\volume1\. В этом файле записаны отсчеты синусоидального сигнала в шестнадцатеричном формате. Установите тестовую точку (Probe point) в строке исходного файла с командой

puts(” программа работает\n”);. В меню File выберите команду File I\O… Откроется диалоговое окно, позволяющее подключить к исполняемой программе внешний файл. В выбранной закладке File Input вызовите команду Add File. Укажите файл Sine.dat и нажмите ОК. Выбранный файл появится в рабочей области диалогового окна. В поле Address: укажите inp_sig. Это говорит о том, что данные, считываемые из файла Sine.dat, будут записываться в область памяти данных по адресам, которые отведены для хранения массива inp_sig. В поле Length: укажите 100 – количество считываемых из внешнего файла значений. В поле Page: укажите Data (значение устанавливается по умолчанию) – используемая область памяти. Для того, чтобы чтение данных из внешнего файла осуществлялось циклически, установите флажок в поле Wrap Around. Чтобы считывание данных осуществлялось в момент достижения программой тестовой точки, выберите команду Add Probe Point. Откроется окно настроек тестовых точек. В окне установленных тестовых точек выделите точку Test22.c line 19 –> No Connection с помощью мышки. Автоматически эта точка пропишется в строке Location: данного окна. В выпадающем меню строки Connect to: выберите FILE IN …\sine.dat. Нажмите кнопку Replace, а затем ОК (рисунок 8). В диалоговом окне File I\O нажмите кнопку ОК.

 


    Рисунок 8. Подключение внешнего файла

 

    В рабочей области появится окно управления передачей данных из внешнего файла (рисунок 9).

 


    Рисунок 9. Окно управления передачей данных из внешнего файла

 

    Шаг 7. Среда проектирования Code Composer Studio обладает встроенными утилитами, позволяющими представлять графически обрабатываемые программой данные. Для того, чтобы воспользоваться этими возможностями, выполните команду View Þ Graph Þ Time\Frequency… Откроется диалоговое окно настроек графического экрана. В поле Graph Title (название графика) укажите Input Signal. В поле Start Address (начальный адрес выводимого массива) укажите int_sig. В поле Acquisition Buffer Size (величина обрабатываемого массива) укажите 100. В поле Display Data Size (количество отображаемых значений) укажите 100. В поле DSP Data Type (тип отображаемых данных) выберите значение 16-bit signed integer. Отключите режим автоматического масштабирования ( в поле Autoscale укажите Off), а в поле установки максимального значения по вертикальной оси (Maximum Y-value) укажите 2500. Окно настроек графического экрана должно выглядеть так, как показано на рисунке 10. Нажмите ОК. Откроется графическое окно с заданными настройками.

    Откройте еще одно графическое окно – для отображения выходного сигнала. Отличия от настроек предыдущего окна будут заключаться в следующем:

     – в поле Graph Title укажите Output Signal;

– в поле Start Address укажите out_sig.

Все остальные настройки должны совпадать. Нажмите ОК. Вызванные графические окна вначале могут содержать случайную информацию. Для их очистки установите курсор мышки в поле отображения графика и нажмите правую кнопку. В открывшемся контекстном меню выберите команду Clear Display.

    Обновление информации в графических окнах происходит в момент остановки процессора. Для этого установите точку останова (breakpoint) в окне исходного файла в строке с оператором

puts(” программа работает\n”);. Все предварительные настройки сделаны.

 

 

    Рисунок 10. Окно настроек графического экрана

 

    Шаг 8. Теперь необходимо запустить программу на выполнение. Для того, чтобы программа в процессе работы обновляла входные данные и информацию в графических окнах, необходимо запустить ее в режиме анимации. В этом режиме, при достижении программой точки останова, процессор приостанавливает свою работу, обменивается данными с отладочной средой, а затем продолжает выполнение программы. Для запуска процессора выполните команду Debug Þ Animate (или нажмите функциональную клавишу Alt+F5). Процесс выполнения программы показан на рисунке 11.

    Шаг 9. Во время выполнения программы измените значения переменных gain и offset в окне просмотра переменных Watch Window. Обратите внимание на изменения в графическом окне Output Signal. Остановите выполнение программы командой Halt.

    На этом наш урок закончен. Для закрепления материала попробуйте самостоятельно изменить параметры коэффициента усиления, постоянного смещения, размера массивов. В качестве входного файла можно попробовать подать входной сигнал произвольной формы. Измените алгоритм вычисления выходного массива.

 


     Рисунок 11. Процесс выполнения программы

 

    Литература:

  1. Code Composer Studio. Getting Started Guide (SPRU509C).
  2. TMS320C1x/C2x/C2xx/C5x. Assembly Language Tools (SPRU018D).
  3. TMS320C2x/C2xx/C5x. Optimizing C Compiler User’s Guide (SPRU024E).