Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.08;
Скачать: CL | DM;

Вниз

Как избавиться от потерь при чтении I/O портов?   Найти похожие ветки 

 
Mishel ©   (2003-06-25 14:49) [0]

Есть подозрения, что винды повинны в потере данных при считывании I/O портов.
Имеется железяка, которая вставляется в PCI, и с которой из 9 портов читаются данные. За 1 сек по 8000 байт на 8 портах. 9-тый порт - готовность считывать данные с остальных 8-ми. Т.е. всего в 1 сек - 8000 * 8 = 64000 байт. Железяка сама имеет буфер на 128000байт = 2сек. Если буфер переполняется, данные пишутся по кольцу, затирая самые старые. На железяку не грешу т.к. прога под старый добрый ДОС успевает все читать.
Для доступа из-под Виндов XP написал драйвер - просто читать/писать в порты. Идут пропуски данных (чтение крутится в цикле Repeat-Until + даю отработать Application.ProcessMessages). Приблизительно 2 пропуска на секунду. Под Win 98 через драйвер - пропусков еще больше. Причем переписав прогу под 98 с доступом напрямую к портам (без драйвера, через ASM->In,Out) кол-во потерь не уменьшилось. Досовский вариант проги запущенный под 98 тоже начинает давать пропуски (хотя под голым Досом потерь небыло). Пробовал использовать доступ к портам через драйвер от Jungo WinDriver 6.02 - потери уменьшились, но только процентов на 20-25. Вроде объем данных невелик, а потери есть.
Какие-нибудь мысли есть по данному поводу? На комп не грешу - P4-2.4Ггц и т.д.
Сейчас пробую переписать драйвер, чтобы читать сразу все 9 портов за раз (уменьшу в 9 раз кол-во обращений за 1 итерацию цикла к драйверу). Но все-равно странно, что под 98 без драйвера - и тоже потери...


 
N169   (2003-06-25 14:57) [1]

Планировщик задач гадит. Потому, что не предназначен для управления реального времени. Добавьте в цикл чтения OutputDebugString() с сообщением и смотрите вывод с помощью DbgView. Увидите картину воочию.

Девайс имеет флаг готовности данных? А прерывание он может выдать при установке этого флага? Если да, то делаем обработчик в драйвере и прощайте-потери-данных.


 
Mishel ©   (2003-06-25 15:50) [2]

To: N169
Так OutputDebugString() в цикле покажет тоже, что и драйвер читает. Флаг готовности лежит в одном из 9 портов как выставился - читаю остальные 8 и дальше распихиваю данные. Железяка прерывание выдавать в ближайшем будушем не сможет. Попутный вопрос - что, у вас бал опыт работы через прерывания и там нормально разрязывается?
Если планировщик гадит, как его загасить/поднять приоритет задачи?
Ведь остальное железо как-то работает в виндах и наверное тоже многое критично относится к потерям своих данных


 
N169   (2003-06-25 16:02) [3]

>что, у вас бал опыт работы через прерывания и там нормально
>разрязывается?

был, удавалось инициировать события от железяки по прерыванию. Обработка шла в драйвере. Частота запросов до 5 кГц максимум.
Потерянных запросов не наблюдалось вообще.
Программным опросом из приложения такие параметры не получить.

>Если планировщик гадит, как его загасить/поднять приоритет
>задачи?

Не поможет. Останется системный квант времени. Останутся несколько десятков потоков от приложений системы и пользователя.
В общем, цикл опроса всегда будет "рваным".
IMHO, в вашем случае годится только программно-аппаратное решение.

>Ведь остальное железо как-то работает в виндах
>и наверное тоже многое критично относится к потерям своих данных

"Всё железо" - понятие абстрактное. Некоторые девайсы используют аппаратные прерывания, некоторые - буферизацию (звуковые карты, например).
Только не все разработчики нестандартных девайсов знают про особенности Windows, а честные программисты потом мучатся!




Страницы: 1 вся ветка

Текущий архив: 2003.09.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
7-24725
Сергей Енин
2003-06-21 15:04
2003.09.08
Состояние файла...


1-24510
Дмитрий
2003-08-27 09:06
2003.09.08
BDE не установлен у клиента, а надо бы...


8-24566
Денчез
2003-05-09 20:43
2003.09.08
Как сделать так чтобы окошко появлялось плавно(прелоадер в 3DMark


3-24302
Sirus
2003-08-19 07:03
2003.09.08
Может ли ошибаться IBase 5.5???


3-24379
Мефодий
2003-08-14 16:45
2003.09.08
Проблема с отображением числа записей отфильтрованной таблицы