Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: DMA and(or) Stream  (Прочитано 12755 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RU
Гость
« : 20-08-2007 18:16 » 

Здравствуйте!
Вы работали с DMA?
Вы писали потоковые драйвера?
Вы знаете как принимать от устройств большие объемы оцифрованной информации?

может... поможете разобраться как это делается?
С уважением RU.
Спасибо.
« Последнее редактирование: 20-08-2007 18:18 от RU » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 21-08-2007 13:08 » 

велкам)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RU
Гость
« Ответ #2 : 21-08-2007 15:09 » 

ОК нет вопросов,
вопрос какой  RTFM читать?
А главное что делать если все делается с нуля, и этих M нету,
а возникает нужда в правильной организации работы с памятью и тд без тормозов. ?!
С Уважением RU
Записан
dimm
Гость
« Ответ #3 : 22-08-2007 05:20 » 

Может сразу задачу распишете, что за устройства предполагается использовать, откуда/куда данные будут гонятся, какой поток данных ожидается?

Я использовал DMA и передачу данных, но с готовыми платами DSP и ADC, там уже стояли фабричные PCI matchmaker-контроллеры.
Записан
RU
Гость
« Ответ #4 : 24-08-2007 15:48 » 

Здравствуйте! Извините за долгий перерыв.
Устройства на основе PCI карты,
поток данных {внешняя среда}-->[PCI]-->|Driver|-->{приложение Win}
скорость порядка ..150..200 МБит/с
С Уважением RU
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 25-08-2007 09:50 » 

вариантов несколько. в обоих случаях, стоит выделить памяти, мегобайт под 16/32/64
писать из PCI по busmaster dma. - если все на кеш выровнять, ресурсы ЦП не расходуются.
далее вариантов несколько...
либо генерить прерывания на каждый записанный блок (желательно частотой не выше 50Гц, вобще машинка будет держать до нескольких кГц но ценой 50%загруженности проца).
либо по прерываниям еще и размер блока в I/O отдавать.
минусы -
   если скорость потока меняется в широких пределах, то время задержки будет соответственно гулять. кроме того железо сложнее.

так что рекомендую второй вариант.
заводите DPC по таймеру, герц на 20, счетчик  записанных платой данных(циклический) отдаете через I/O PCI платы. по каждому DPC вычисляете разницу (равна новым записанным данным) и т.д....
плюсы - система имеет одинаковую задержку (определяется частотой DPC) при любой скорости передачи. ISR не нужно вообще.
минусы -
   минимальное ожидание так же определяется частотой DPC. но с учетом переключений контекстов и пр, в любом случае время ожидания меньще нескольких мс не будет...
да, еще минус, если контроллер свой - там немножко с циклическим счетчиком подумать придется. особенно для случаев когда PCI транзакцию обрывает на середине.

самое простое- фиксированный размер блока по ISR.
лучшее по DPC и счетчику через I/O.
если действительно очень-очень критичны задержки нотификации драйвера о новых данных тогда ISR со счетчиком, но тогда надо помнить чтобы частота ISR не более 100-500Гц была)
мы пока отлаживались мне как-то 5кГц прерываний подсунули - это жесть просто)))

ну а в приложение просто отмапировать память со счетчиком)

да, сейчас памяти много ставят... проблем с выделением непрерывных 32/64МБ быть не должно... но если будут - советую выделять их при запуске винды по PNP старту и отпускать по PnP ремуву.

PS да, еще может конечно не хватить непрерывной памяти на 64/128МБ... тогда можно попробовать его уменьшить но сделать двойную буферизацию в второй буфер размером побольше... просто первый буфер чтоб железо не усложнять непрерывным в физ памяти должен быть, а второй - как угодно, с ним проще.
а памяти столько надо... потому что иногда есть пиковые нагрузки на проц в течении секунды-двух-трех примерно(окошко передвинул, прогу запустил), соответственно чтобы не терять данные, надо буферизацию увелчичивать..

прмерно так все обстоит.

PPS да, в любом случае рекомендую минимальный блок данных не менее 1/2/4к. лучше по 4) и железу проще, и вам, да и эффективность выше. movsd лучше работает.
« Последнее редактирование: 25-08-2007 09:57 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RU
Гость
« Ответ #6 : 27-08-2007 16:00 » 

БОЛЬШОЕ Спасибо,
теперь стоит вопрос как прикрутить Stream и фильтры?

PS  Главный вопрос всеже где достать сопутствующую литературу и статьи.
PPS Неужели все знания предаются из уст в уста???

С Уважением RU.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 28-08-2007 05:45 » 

эээ... какие еще фильтры?Не понял
и что значит прикрутить Stream?
не знаю... все мои - из собственного опыта) ну процентов на 95...
литература... по драйверам тут на сайте кой чего выложено... по этому поводу веток уже много открывали, не хочется повторятся)
по железу... ну это все таки софтверный больше форум) мои знания о железе - весьма поверхностны, но весьма обширно))))
« Последнее редактирование: 28-08-2007 05:49 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RU
Гость
« Ответ #8 : 29-08-2007 14:46 » 

Здравствуйте
"прикрутить" - использовать возможности
KStream, фильтров DirectShow итп для последующей обработки данных.

В ходе решения вопроса по поводу DMA возник еще один вопрос. Каким образом можно скидывать накопленные данные оптимальным путем учитывая скорость накопления?

С Уважением RU
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 29-08-2007 16:57 » 

про KStream и DirectShow увы - ничего не знаю)
"скидывать накопленные данные оптимальным путем учитывая скорость накопления" - зависит от задачи? от обработки? от того, куда они дальше уходят?
про "учитывая скорость накопления" - не понял что имелось в виду... накопления - где?

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

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RU
Гость
« Ответ #10 : 30-08-2007 17:55 » 

Здравствуйте!
Задачи:
1. Накопление данных (память, файл); !!!
и т.д.

Обработка:
1. Фильтр;
2. Статистика;
и т.д.

И конечная остановка сущего на PC, это файл, или утиль кому как нравится Улыбаюсь

-- при больших скоростях есть риск потерять часть данных, что не есть хорошо. Необходимо накопить требуемый обьем данных в памяти, если ее нехватает то сбросить данные в файл (проекция?).

--при каких условиях операции с DMA будут съедать CPU ресурсы?

С Уважением RU
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 31-08-2007 08:39 » 

все равно остается много вопросов. максимальный размер, минимальный размер, размер скажем так - логического блока которым оперирует обработка... мощности компа....
а dma ресурсы ЦП по определению не съедает.... только производительность падает в случае занятости шины... но это - неизбежность) ну еще пара тонкостей есть, но это потом.
лучше придумайте свой вариант и опишите. я могу лишь узкие места потом назвать)
а за вас все придумывать, только хуже будет)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines