Проектирование устройств на сигнальных процессорах: Учебное пособие (Проектирование цифровых устройств аппаратуры связи на ЦСП семейства ADSP-21xx), страница 23

Запись подпрограммы начинают с записи директив. После этого одну за другой выписывают команды, выбранные в п. 8.1. Важно отметить, что порядок следования команд жестко определяется выбранными инструкциями переходов и может не совпадать с порядком их расположения на схеме алгоритма. Для получения правильного порядка следования команд следует в случае разветвления пойти по ветви “нет”, а по её окончании учесть размещение команд с метками, обсуждённое в п. 7.2.2.

Пример подпрограммы на языке ассемблера для процессора ADSP-21xx, полученной для алгоритма рисунка ??, приведен в таблице ?? В качестве комментария используют или выражения на языке высокого уровня, или физические пояснения. Если заданная функция реализуется небольшим числом инструкций, то можно не оформлять её как подпрограмму и, включить эти инструкции в головную программу.

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

В подпрограмме:

/* имя файла, тип процессора, имя подпрограммы, комментарий */

.GLOBAL  label;  // объявление метки для входа в подпрограмму

label:                    // метка label указывает место входа в подпрограмму

/*…………………………..  инструкции подпрограммы */

RTS;           // последняя инструкция - возврат к вызвавшей программе

// конец модуля

В основной программе:

/* имя файла, тип процессора, имя программы, комментарий */

.EXTERN  label, … ;     // описание метки входа во внешнюю подпрограмму

JUMP start; NOP; NOP; NOP;          // таблица векторов прерывания …

/*…………………………………….*/

start:                              // метка start указывает вход в основную программу 

/*……………… подготовка исходных данных для подпрограммы */

CALL label;         // вызов подпрограммы, начинающейся с метки label

/*…………………использование результатов работы подпрограммы */

// конец основной программы

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

Подпрограмма обычно представляет собой законченный программный продукт и её должен сопровождать комментарий со сведениями, которые помогут правильному её использованию. Содержание такого комментария являетсярезультатом осмысления взаимодействия модулей программы:

/*

·  Передаваемые параметры, то есть местонахождение исходных операндов.

·  Параметры вызова, то есть значения регистров, которые должна обеспечить вызывающая программа перед вызовом.

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

·  Изменяемые, то есть используемые в подпрограмме регистры.  (В вызывающей программе могут потребоваться меры для сохранения и восстановления этих регистров)

·  Изменяемая подпрограммой память.

·  Время исполнения подпрограммы (число затрачиваемых циклов).

*/

Комментарий выделяется символами /*…*/ и помещается перед текстом подпрограммы. Примеры оформления подпрограмм можно найти в [ЦСП, Методуказания к лаб. работам, Приложение, программы к ЛР №5 и №7].

8.3. Расчёт затрат времени на выполнение подпрограммы

В связи с тем, что в проекте разработана только часть программного обеспечения устройства, можно рассчитать затраты времени на выполнение разработанного фрагмента программы. Первым делом подсчитывают число команд в разработанной подпрограмме. Если внутри разработанного фрагмента имеется свой цикл, то число команд в цикле нужно умножить на число проходов по циклу.  Время выполнения tвп можно рассчитать как число команд, умноженное на время цикла процессора tц = 1/fп.

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

Программа обработки (будь то передатчик или приёмник) имеет два цикла, внутренний, выполняемой с частотой дискретизации fд, и внешний, выполняемый с тактовой частотой FТ. Соотношение частот k=fд/Fт.