Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ - [28]

Шрифт
Интервал

+ — сложение;

- — вычитание;

* — умножение;

/ — деление;

% — модуль (целая часть от деления);

( — левая скобка;

) — правая скобка;

& — логическое «И» (AND);

| — логическое «ИЛИ» (OR);

~ — исключающее «ИЛИ» (XOR);

<< — логический сдвиг влево;

>> — логический сдвиг вправо.

Запись чисел в программах может осуществляться в нескольких форматах. Для записи шестнадцатеричных чисел используется префикс 0x (ноль и икс) или H#. Например:

>0x24FF, H#CF8A

Для восьмеричных чисел применяется префикс 0 (ноль):

>0777, 0123, 07777

Двоичные числа записываются с префиксом B#:

>В#01110100

Десятичные числа записываются в программе без префиксов. Т.е. по умолчанию формат числа считается десятичным:

>1024, -55, 0

Пример записи арифметического выражения:

>X = (29+129)-(128-48)/3

>Пример логического выражения:

>Y = 0x55&0x0F

Пример записи директивы:

>.CONST N=1024, LEN_BUF=N/2; {Число точек отсчета = 1024, длина буфера = 512}

Директива VAR

Директива VAR объявляет переменные и буферы переменных. Буфер переменных представляет собой набор ячеек памяти, расположенных упорядоченно друг за другом по смежным (соседним) адресам. Буфер может быть многомерным и одномерным, т.е. состоящим из нескольких или из одной переменной. Буфер должен быть объявлен до использования в программе. Буферы удобны для организации приема и передачи блочных данных и часто используются в программах.

Директива VAR имеет следующую форму записи:

>.VAR/параметр1/параметр2 ... имя_буфера[длина],...;

С директивой могут использоваться следующие параметры:

PM или DM — тип памяти для размещения буфера;

RAM или ROM — тип памяти процессора;

ABS=адрес — абсолютный адрес (нельзя использовать вместе с директивой STATIC);

SEG=сегмент — размещение буфера в сегменте, объявленном системным конфигуратором;

CIRC — кольцевой буфер;

STATIC — предотвращает перезапись буфера во время загрузки начальной страницы.

Одна директива VAR позволяет объявить в одной строке длиной до 200 символов несколько буферов, разделенных запятыми.

Буферы могут быть линейными и кольцевыми. Буферы могут быть произвольной длины от единицы до размера, не превышающего объем памяти процессора. Линейный буфер размещается в памяти с любого адреса. Кольцевой буфер может быть размещен в памяти с некоторыми ограничениями, связанными с аппаратными особенностями памяти процессоров. Так, кольцевой буфер должен стартовать с базового адреса, который кратен 2 в степени n, где n — количество бит требуемых для представления длины буфера в двоичном виде. Это необходимо учитывать при создании кольцевых буферов с параметром ABS.

При многочисленном объявлении линейных буферов в одной строке редактор связей размещает их в смежных областях памяти. Если при таком объявлении используется параметр CIRC, то создается единственный кольцевой буфер, а остальные объявленные в этой строке буферы будут линейными.

Буферы могут быть размещены как в памяти программ PM, так и в памяти данных DM, по умолчанию. Тип памяти по умолчанию устанавливается в RAM для памяти DM и PM.

Параметр ABS размещает буфер с указанного стартового адреса, делая его неперемещаемым.

Параметр SEG размещает буфер в указанном сегменте памяти, который был объявлен в файле системного конфигуратора.

Параметр CIRC определяет кольцевой буфер. Буфер будет организован как линейный, если не применен атрибут CIRC.

Параметр STATIC предотвращает перезапись буфера, когда загружается страница начальной загрузки.

Пример объявления буфера:

>.VAR/PM/RAM/SEG=segdata buffer[10];

Здесь линейный буфер объявлен в памяти программ RAM, который перемещаем в пределах сегмента с именем segdata. Буфер с именем buffer состоит из 10 ячеек в памяти программ. Длина буфера указывается в квадратных скобках.

Для объявления одномерных буферов, т.е. простых переменных, применяется директива VAR без указания длины буфера. Например:

>.VAR/DM/RAM/ABS=0x000C xdata;

Данная директива объявляет однословную переменную с именем xdata в памяти данных RAM по шестнадцатеричному адресу 0x000C.

Ниже приведен пример объявления автоматически перемещаемого кольцевого буфера с именем buffer_c, длина которого определяется величиной константы size, объявленной директивой CONST.

>.CONST size = 15;

>.VAR/DM/CIRC buffer_c[size];

Ниже приведены примеры, позволяющие понять, как можно размещать циклические буферы в памяти. Следующий оператор объявляет кольцевой буфер с именем abuf из шести ячеек памяти:

>.VAR/CIRC abuf[6];

Поскольку ближайшим числом больше шести и кратным двум является число 8, то базовый (стартовый) адрес буфера должен быть кратен 8. Три младших значимых разряда (МЗР) этого адреса будут равны нулю. В табл. 11.1 показано размещение этого буфера в памяти.


Таблица 11.1 Размещение одного циклического буфера в памяти сигнального процессора

Имя буфераЭлемент буфераДвоичный адрес
abufabuf[0]XXXXXXXXXX0000
abuf[1]XXXXXXXXXX0001
abuf[2]XXXXXXXXXX0010
abuf[3]XXXXXXXXXX0011
abuf[4]XXXXXXXXXX0100
abuf[5]XXXXXXXXXX0101
XXXXXXXXXX0110

Если в одной строке объявлены несколько буферов с параметром CIRC, то будет создан один кольцевой буфер, вмещающий в себя все буферы. Первый из этих буферов будет кольцевым, а отдельные буферы будут простыми линейными буферами. Например, следующая директива создает один кольцевой буфер abuf и два линейных буфера с именами bbuf и cbuf.


Рекомендуем почитать
Винный гид покупателя

Эта книга не просто энциклопедический перечень виноделов и виноградарей, но одновременно и учебник, и покупательский гид. Ее цель — превратить вас в более знающего и уверенного покупателя, достаточно осведомленного о «закулисных» деталях, чтобы при покупке вина вы могли сделать самый разумный выбор.


Секреты безопасной покупки подержанного автомобиля

Выбор и покупка подержанного автомобиля в России до недавнего времени были лотереей. Проигрыш в этой лотерее означал сотни тысяч рублей, выпущенных на ветер. Однако эта книга, представляющая собой краткое руководство по приобретению б/у машины, а также услуги нашего сервиса «АвтоКод» помогут свести риск нарваться на мошенников к нулю!


713 секретов производственных технологий

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


Противотанковая мина ТМ-72 и минный взрыватель МВН-72

Руководство предназначается для изучения тактико-технических характеристик, устройства принципа действия, правил применения, хранения и транспортировки противотанковой мины ТМ-72 и минного взрывателя МВН-72.


Учимся читать в три раза быстрее за 20 минут - Лайфхакер

rufb2edit 0.0.908 сен 2015http://lifehacker.ru/2015/01/22/chitat-v-3-raza-bystree/web2fb2_201509080815_87756238791.0Учимся читать в три раза быстрее за 20 минут - ЛайфхакерИя Зорина 22 января 2015Учимся читать в три раза быстрее за 20 минутУмение быстро читать освобождает кучу свободного времени. Только представьте, вы можете в три раза быстрее справляться со всей литературой — технической, профессиональной или художественной. А теперь приятная новость: в отличие от большинства навыков, которые нужно осваивать постепенно, скорочтение доступно вам уже через 20 минут тренировки.


Молодежный словарь

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