[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено homekvn 05 октября 2006 г. 18:06
В ответ на: Ответ: отправлено st256 05 октября 2006 г. 15:20

Хорошо. Я не знал, что Вы не знаете, что такое "фреймворк".

Это программный код, который обеспечивает функционирование DSP-приложения и взаимодействие его компонентов. Например, в аудиообработке таковым считается код, выполняющий инициализацию аудиобуферов, последовательный пробег по всем реал-тайм функциям и вызов каждой из них, обработку микрокоманд. К микрокомандам относятся команды, поступающие извне (под "извне" может также подразумеваться "от других задач, работающих на данном процессоре, в случае наличия операционной системы) для изменения работы Soundset (аудио-проекта). Например, передать параметры в такой-то модуль (изменить настройки такого-то фильтра, переключить каналы, изменить громкость и проч.). Или добавить в Soundset новый модуль. Все перечисленные выше действия относятся к фреймворку.

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

Более конкретный пример. Пусть мне надо написать аудиомодуль "Биквад", который представляет собой биквадратный фильтр.
Данный аудиомодуль будет, как-минимум, состоять из трех функций: Biquad_Init(...), Biquad_Service(...) и Biquad_Execute(...).

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

Вторая функция выполняет одно из перечисленных ниже действий.

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

2. Устанавливает новое значение времени интерполяции при плавном переходе от одного фильтра к другому.

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

Вот первые две функции пишутся на Си. Последняя либо полностью на ассемблере (для биквадов, наверное, так и имеет смысл сделать), либо на си, но внутри вызывает ассемблерные функции.

Вообще, любые нереалтаймовские приложения имеет смысл писать на Си (Си++), поскольку они имеют низкий приоритет.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание