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


L783

Вы не вошли.

 Поиск | Регистрация | Вход 

Василий
05.10.2006 10:28:19
#1

Гость

L783

Скажите пожалуйста.
была ли ситуация когда программа работающая с дровами VXDAPI "подвисала" на несколько секунд без нарушения логики работы и "отвисала"?
L783 rev. B.
Дрова Vxdapi.
Программа моя работает в два thread-а.
Первый - считывает данные с АЦП, причем по событию заполнения буфера, и записывает их в "другой" буфер, считает среднее за длину буфера.
Второй - обрабатывает среднее и выдает асинхронно на ЦАП значение.
"Готовность" среднего сделана через флаг.
Все задержки-ожидания ( в т.ч. события заполнения буфера) реализованиы через while(!...) {sleep(0)}.

Усе!
Поэксперементировав, я увидел, что частота и длительность "подвисаний" зависит от длины буфера - т.е. при частоте 100 кГц.  если я сделаю кольцевой буфер 2 - 32 отсчета - то обработка данных становится мучением...
Это особенность драйверов VXD? В WDM этого нет?


05.10.2006 11:02:33
#2

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L783

такие маленькие буфера будут всегда мучением...

Василий
05.10.2006 12:08:27
#3

Гость

Re: L783

Есть мысль вместо флага попробовать мутекс c WaitForSingleObject...
А вместо sleep(0) асемблерный код ...

Получиться - напишу сюда о результате.

05.10.2006 14:42:38
#4

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L783

не поможет наверное...

Василий
23.11.2006 01:01:44
#5

Гость

Re: L783

Не с мутексами гне получилось .. да и геморно весьма. А вот организовав синхронизацию потоков через WaitForSingleObject - где ждем CommonEvent - удалось таки избавиться от подвисаний! Даже при малых значениях буфера.
Напомню что ввод вывод у меня асинхронный.

Так вот, вопрос.
Sleep и Delay как то влияют на работу асинхронноно выврда на ЦАП?
У меня так -
     d =0;
     DAC_Sample_PLX(&dev, &pd, MainForm->DAC_Ch, &d, 0);
     Sleep(MainForm->DELAY01);

     d= 2047;
     DAC_Sample_PLX(&dev, &pd, MainForm->DAC_Ch, &d, 0);
     Sleep(MainForm->DELAY1);

     d =0;
     DAC_Sample_PLX(&dev, &pd, MainForm->DAC_Ch, &d, 0);
     Sleep(MainForm->DELAY10);

где DELAY1 = 1...2000 мс.

Если запустить это в цикле - получается чехарда...

23.11.2006 10:51:25
#6

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L783

на сам вывод нет...