Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];

Вниз

Как избавиться от потерь при чтении 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
1-24439
falic
2003-08-25 16:31
2003.09.08
Проблема с компиляцией проектов.


6-24586
Михайлов Антон
2003-04-28 13:27
2003.09.08
Люди, аот такая у меня проблема с IRC


1-24493
Miralex
2003-08-27 11:32
2003.09.08
Работа с другой (неизвестным заранее) програмой


7-24714
OlegL
2003-06-24 14:55
2003.09.08
Название папки


6-24597
RedFox
2003-07-02 12:12
2003.09.08
Поддержка сети в Delphi 7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский