Пример организации буферов при поблочной обработке входных данных

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

Рис.___

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

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

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

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

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

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

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

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

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

Для реализации системы ЦОС выбран процессор с тактовой частотой 100МГц (длительность одного процессорного такта – 10нс. Размер буфера – 35 отсчетов сигнала. Пусть длительность обработчика прерывания для помещения нового отсчета в приемный буфер составляет 6 тактов. Пусть также длительность выполнения программной реализации алгоритма обработки целого буфера (включая переход на обработчик прерывания по заполненности приемного буфера, копирования данных из приемного буфера во входной буфер, выполнения собственно вычислений и возврат из обработчика с учетом некоторых потерь на переходы и т.п.) составляет, например, 16000 тактов. Однако, поскольку процедура обработки должна прерываться столько раз, сколько отсчетов в буфере (для накопления следующего фрагмента сигнала), то ее длительность необходимо увеличить на 35*6 – именно столько тактов будет занимать "чистый" прием фрагмента сигнала в буфер. Таким образом, полное время обработки буфера составляет 16000+35*6=16210 тактов. Разделив это время на количество отсчетов, которые надо принять для формирования следующего фрагмента сигнала, получаем 16210/35» 464 такта, или 4.64 мкс. Находя обратную величину, как и в предыдущем примере получаем предельную частоту дискретизации входного сигнала 215517 Гц» 215.5 КГц.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: