Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AiPSP_ekzamen_main.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

6. Особенности программной организации ввода-обработки-вывода данных в системах цос, работающих в реальном времени. Работа по прерываниям. Использование буферов.

Рассматривая применение операционных систем в ЦОС-приложениях, необходимо помнить три очень важных момента: ограниченность ресурсов встроенной системы; необходимость минимизации временных накладных расходов; система должна быть предсказуемой.

В системе ЦОС обработка очередного отсчета (группы отсчетов) сигнала и переход к обработке следующего отсчета (группе отсчетов) должны происходить строго в соответствии с частотой дискретизации сигнала (периодом между поступлением отсчетов на входной порт процессора). Это значит, что несмотря на то, что какой-то отсчет или группа отсчетов в силу своих параметров и особенностей алгоритма может быть обработана быстрее, следующий отсчет должен быть "затребован" (прочитан из входного порта) не раньше ожидаемого времени его поступления. То же самое можно сказать и о выводе сформированных/обработанных значений в выходной порт.

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

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

- обновление буфера, при этом последний записываемый в буфер отсчет X(i) "затирает" самый "старый" отсчет X(i-N) (для буфера длиной N) и в буфере остаются N последних отсчетов;

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

Этапы выполнения итерационной процедуры обработки данных можно записать следующим образом (на рисунке ниже):

1. По таймеру или сигналу от внешнего устройства вызывается обработчик прерывания, который выводит в выходной порт сформированный на предыдущей итерации выходной отсчет и переносит из входного порта в приемный буфер новый отсчет входного сигнала.

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

3. Работа обработчика завершается, процессор переходит в цикл ожидания следующего прерывания.

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

Рассмотрим пример вычисления оценки предельной частоты дискретизации входного сигнала для приведенной в данном разделе схемы поэлементной обработки.

Для реализации системы ЦОС выбран процессор с тактовой частотой 100МГц (длительность одного процессорного такта – 10нс). Пусть длительность выполнения собственно программной реализации алгоритма обработки (включая переход на обработчик прерывания, выполнения вычислений и возврат из обработчика с учетом некоторых потерь на переходы и т.п.) составляет, например 400 тактов. Тогда интервал между поступлениями последовательных отсчетов входного сигнала не может быть меньше 400 тактов = 4 мкс. Находя обратную величину от этого интервала, получаем предельную скорость поступления входных отсчетов – 250000 отсчетов/с = 250 КГц – это и есть предельно допустимая частота дискретизации входного сигнала.

Организация хранения и доступа к данным для примера 1

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

Этапы выполнения итерационной процедуры обработки данных можно записать следующим образом (на рисунке ниже):

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

2.  Если произошло прерывание по переполнению приемного буфера, вызывается соответствующий обработчик, который переносит данные их приемного буфера во входной буфер и из выходного буфера в передающий буфер.

3. Выполняется обработка данных. Чтение данных в процедуре обработки осуществляется из входного буфера, а запись результатов – в выходной буфер.

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

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

Сигнал генерации прерывания по переполнению кругового буфера обычно можно "повесить" на один из указателей, например, на указатель записи данных во входной буфер. Также можно отметить, что копирование между буферами не обязательно должно завершиться до поступления первого отсчета следующего фрагмента. Главное – чтобы приемный буфер освобождался быстрее, чем будет заполняться новым фрагментом.

Следует обратить внимание на то, что вывод сформированных отсчетов "отстает" от ввода отсчетов исходного сигнала на время, равное длительности 2-х фрагментов сигнала, т.е. задержка будет равна длительности 2N отсчетов.

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

Справедливости ради следует заметить, что большинство современных процессоров обладают возможностями обмена блоками данных между портами ввода/вывода и внутренней памятью процессора посредством DMA-контроллера, т.е. без "отвлечения" процессора от выполнения "основных" вычислений.

Рис.12. Буферизация ввода/вывода данных с использованием указателей

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]