©2002, INPRO Development Corporation
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход

2304000 в порту: миф или реальность?
На страницу Пред.  1, 2, 3  След.
 
Начать новую тему   Ответить на тему    Список форумов Форум по модемам IDC -> General
Предыдущая тема :: Следующая тема  
Автор Сообщение
Andrey V.Panukov
Member


Зарегистрирован: 30.06.2004
Сообщения: 40
Откуда: Syktyvkar

СообщениеДобавлено: Пт Сен 09, 2005 6:55 pm    Заголовок сообщения: Ответить с цитатой

>либо не удавалось поймать момент, когда отключалась RTS.
Вот!

>А вот в старые времена Terminate умела отключать RTS, было видно
>невооружённым взглядом: идёт запись на диск, RTS гаснет...

Само собой, работа с регистрами реализовывалась в самой программе. Всё делалось последовательно, приняли, записали, приняли, записали и т.д.

В данном случае, если ПО не читает из порта(читает всегда, как правило), запись принимаемых данных осуществляется во внутренний буффер драйвера порта, если он переполнен и установлено аппаратное управление потоком - снимается RTS (программное - посылается XOFF).

В данном случае вырисовывается проблема другого характера, когда был принят новый байт данных, а предыдущий еще не был считан из UART. (Hardware overruns, а не buffer overruns).

Oxy,
Попробуйте увеличить/отключить FIFO на прием и на передачу.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Technical Support
Expert


Зарегистрирован: 31.10.2002
Сообщения: 6330

СообщениеДобавлено: Пт Сен 09, 2005 7:09 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
В данном случае вырисовывается проблема другого характера, когда был принят новый байт данных, а предыдущий еще не был считан из UART.


Именно так, но позвольте изложить идею несколько в другом свете. Во времена MS-DOS программы умели предугадывать возникновение ситуации, в которой драйвер последовательного порта (обычно встроенный в саму программу) не сможет получить управление в течении длительного промежутка времени и в результате не сможет вовремя считать данные из регистра (буфера) последовательного порта. Наиболее типичная ситуация - запись на диск. Предугадав такое развитие событий, программа отключала цепь RTS и таким образом принуждала модем накапливать данные в его (модема) буфере, пока ситуация не станет вновь благоприятной для приёма данных. Под Windows картина другая: ПО не умеет предугадывать неблагоприятные ситуации (в частности, переключение задач по Alt-Tab) и в результате RTS всегда включена (кроме маловероятной и не наблюдаемой на практике ситуации, когда прикладная программа не готова принять данные), и переключение задач приводит к появлению serial overruns.
_________________
Inpro
Technical Support
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Andrey V.Panukov
Member


Зарегистрирован: 30.06.2004
Сообщения: 40
Откуда: Syktyvkar

СообщениеДобавлено: Пт Сен 09, 2005 7:26 pm    Заголовок сообщения: Ответить с цитатой

Еще раз: Smile

Коротенько и на пальцах.
ПО читает из порта, устанавливает таймауты, организуя запросы на чтение(буффер).
Прерывание(RDA|CTI), драйвер читает данные из UART, если в данный момент есть запрос на чтение, данные записываются в буффер запроса, если нет - во внутренний буффер.
При следующем запросе, если есть данные во внутреннем буфере - читаются из него.
Если внутренний буффер заполняется полностью и установлено аппаратное управление потоком, снимается сигнал RTS.

И в нормальном состоянии, Alt-tab ну ни как не должен вызывать overruns. (в случае w98/me - маловероятно, но возможно, учитывая архитектуру ядра).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Technical Support
Expert


Зарегистрирован: 31.10.2002
Сообщения: 6330

СообщениеДобавлено: Пт Сен 09, 2005 10:06 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Если внутренний буффер заполняется полностью и установлено аппаратное управление потоком, снимается сигнал RTS


Этот момент полностью ясен, но разговор о другом.

Компьютер способен обрабатывать принимаемые данные с гораздо большей скоростью, чем модем их принимает и поставляет в последовательный порт. Именно поэтому буфер драйвера на практике не заполняется и RTS постоянно включена.

В направлении "на передачу" картина прямо противоположная: компьютер способен поставлять данные много быстрее, чем модем их передаёт. Поэтому постоянно происходит заполнение буфера модема, после чего он командует "подожди", отключая цепь CTS.

Вот почему мы говорили об "однонаправленном управлении потоком". Чтобы оно стало двунаправленным, должно произойти нечто из ряда вон выходящее, обрабатывающая принимаемые данные программа должна надолго "задуматься". На практике это видеть не приходилось.

Цитата:
И в нормальном состоянии, Alt-tab ну ни как не должен вызывать overruns. (в случае w98/me - маловероятно, но возможно, учитывая архитектуру ядра)


Однако, serial overruns встречаются. Конечно, не можем со 100% уверенностью утверждать, что они порождаются именно Alt-Tab, но было подмечено, что их возникновение кореллирует с нажатием этих клавиш.

Давайте всё-таки вернёмся к обсуждению заданного вопроса, а именно: связано ли возникновение serial overruns с выбранным методом управления потоком (или отсутствием управления потоком вообще)?

Мы продолжаем утверждать, что эти вещи никак друг с другом не связаны, и Ваши комментарии лишь подтверждают эту мысль. Управление потоком призвано регулировать поступление данных в буфер драйвера, который находится между драйвером и программой, которая обрабатывает принимаемые данные. Serial overruns возникают при переполнении буфера UART последовательного порта, который "совсем другой буфер". Скажем так: если драйвер узнал, что в буфере UART есть принятый байт данных, но сохранить этот байт негде (буфер драйвера полон), то байт будет потерян и возникнет программная ошибка (переполнение буфера драйвера). Serial overrun - другое: драйвер слишком поздно узнал о том, что в буфере UART есть байт данных, пришёл следующий байт, и UART выставил признак ошибки (байт был потерян).

Всё правильно?
_________________
Inpro
Technical Support
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Andrey V.Panukov
Member


Зарегистрирован: 30.06.2004
Сообщения: 40
Откуда: Syktyvkar

СообщениеДобавлено: Пт Сен 09, 2005 10:33 pm    Заголовок сообщения: Ответить с цитатой

Совершенно верно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Oxy
Member


Зарегистрирован: 03.03.2004
Сообщения: 175
Откуда: Киев

СообщениеДобавлено: Пт Сен 09, 2005 11:28 pm    Заголовок сообщения: Ответить с цитатой

2 Technical Support
Если быть точным, вопрос был именно по Hardware, а не по Serial Overruns (см. пост №5).
Цитата:
2 All
А еще мне не нравится Hardware overruns=13 в статистике ModemSpd.

А Serial Overruns у меня вроде не наблюдалось.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Oxy
Member


Зарегистрирован: 03.03.2004
Сообщения: 175
Откуда: Киев

СообщениеДобавлено: Пт Сен 09, 2005 11:29 pm    Заголовок сообщения: Ответить с цитатой

.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andrey V.Panukov
Member


Зарегистрирован: 30.06.2004
Сообщения: 40
Откуда: Syktyvkar

СообщениеДобавлено: Сб Сен 10, 2005 12:11 am    Заголовок сообщения: Ответить с цитатой

Oxy,
В данном случае под serial overruns предполагалось hardware.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Oxy
Member


Зарегистрирован: 03.03.2004
Сообщения: 175
Откуда: Киев

СообщениеДобавлено: Сб Сен 10, 2005 12:22 am    Заголовок сообщения: Ответить с цитатой

Еще замечено, что Hardware overruns в статистике обычно ровно (реже -- почти) столько же, сколько CRC errors Question
Цитата:

Downstream compression : None
Upstream compression : None
Connection speed : 31200 bps
Bytes received : 7243362 (at 606 B/sec)
Bytes transmitted : 682552 (at 57 B/sec)
Inactive time : 02:16:45 (efficiency 31.3 %)
Active receive speed : 1934 B/sec
Assumed cont-load recv speed : 1933 B/sec
Frames received : 21100
Frames transmitted : 0
CRC errors : 30
Timeout errors : 0
Alignment errors : 0
Hardware overruns : 31
Buffer overruns : 0
Framing errors : 0


Кстати, при скорости порта 230400 и коннекте 28800 Hardware Overrans все равно наблюдаются.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andrey V.Panukov
Member


Зарегистрирован: 30.06.2004
Сообщения: 40
Откуда: Syktyvkar

СообщениеДобавлено: Сб Сен 10, 2005 12:39 am    Заголовок сообщения: Ответить с цитатой

>Еще замечено, что Hardware overruns в статистике обычно ровно
>(реже -- почти) столько же, сколько CRC errors
Естественно, пропал байт или два или ... - контрольная сумма пакета не сошлась.

>Кстати, при скорости порта 230400 и коннекте 28800 Hardware
>Overrans все равно наблюдаются.
Разумеется, увеличились?
Лучше посмотрите, в настройках порта буффера FIFO включены и на прием установлены в максимум?
Да и забейте на эти 230400, реально нафик не нужно, как припарка после бани.

зы. билли [800 кб]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Oxy
Member


Зарегистрирован: 03.03.2004
Сообщения: 175
Откуда: Киев

СообщениеДобавлено: Сб Сен 10, 2005 1:14 am    Заголовок сообщения: Ответить с цитатой

Цитата:
>Кстати, при скорости порта 230400 и коннекте 28800 Hardware
>Overrans все равно наблюдаются.
Разумеется, увеличились?

Пока не знаю.
Цитата:
Лучше посмотрите, в настройках порта буффера FIFO включены и на прием установлены в максимум?

Стояло по дефолту для WinME: 3/4 (наверное 12 байт).
Поставил на максимум, но вроде когда-то уже пробовал -- все равно Overruns были.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Technical Support
Expert


Зарегистрирован: 31.10.2002
Сообщения: 6330

СообщениеДобавлено: Сб Сен 10, 2005 7:14 am    Заголовок сообщения: Ответить с цитатой

Hardware overruns и serial overruns - два названия одного и того же явления. Рассмотрим простейший последовательный порт, без буфера FIFO. В нём есть два регистра, сдвиговый и буферный. Данные бит за битом поступают в сдвиговый регистр, пока не "соберутся" все 8 бит байта. После этого байт поступает в буферный регистр и последовательный порт информирует о готовности "отдать" байт. В это время в сдвиговый регистр поступает следующий байт.

Задача драйвера - прочитать (освободить) буферный регистр до того, как будет завершена сборка следующего байта. Если этого не происходит, то новый байт теряется и выставляется (аппаратно) флажок ошибки (переполнение данных, overrun). Когда драйвер в конце концов добирается до порта, он видит этот флажок и фиксирует ошибку. Счётчик таких ошибок и называется Serial overruns (в журнале модема в Windows) или Hardware overruns в ModemSpd.

При наличии FIFO суть дела не меняется, просто буферный регистр способен запомнить не один, а 16 байт, и соответственно, у драйвера есть больше времени на реагирование.

Цитата:
Стояло по дефолту для WinME: 3/4 (наверное 12 байт)


Там не всё так линейно. Буфер всегда 16 байт. "Ползунок" задаёт, сколько байт должно накопиться в буфере, прежде чем UART последовательного порта скажет драйверу "можно забирать". И это пороги, если не ошибаемся, равны 1, 4, 8 и 14 байт. Из общих соображений понятно, что чем меньше порог, тем раньше драйвер узнает и больше у него шансов избежать переполнения буфера. С другой стороны, чем чаще "забирать", тем больше накладных расходов у драйвера.

И ещё, из общих соображений: чем выше скорость порта, тем быстрее происходит наполнение буфера и тем выше вероятность возникновения serial overrun, на что Вам и намекал уважаемый Andrey V.Panukov, который знает эти проблемы "изнутри".
_________________
Inpro
Technical Support
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Oxy
Member


Зарегистрирован: 03.03.2004
Сообщения: 175
Откуда: Киев

СообщениеДобавлено: Сб Сен 10, 2005 7:05 pm    Заголовок сообщения: Ответить с цитатой

Понял, попробую уменьшть порог.
Кстати, как я обещал: работоспособность моей системы на 230400 с драйвером shsmod v.1.93b подтверждаю Smile (shsmod говорит, что чип Winbond W83977TF)
Вот только геморой появился: после выхода из Sleep Mode нужно запускать shsmod вручную.
Может кто подскажет, как автоматизировать запуск какой-либо проги при выходе из спящего режима WinME Question
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Technical Support
Expert


Зарегистрирован: 31.10.2002
Сообщения: 6330

СообщениеДобавлено: Сб Сен 10, 2005 7:53 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Может кто подскажет, как автоматизировать запуск какой-либо проги при выходе из спящего режима WinME


Вопрос выходит за рамки форума. Проблемы Windows обсуждаются в целой куче тематических конференций, обратитесь туда (или напрямую в техподдержку Microsoft).
_________________
Inpro
Technical Support
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Oxy
Member


Зарегистрирован: 03.03.2004
Сообщения: 175
Откуда: Киев

СообщениеДобавлено: Сб Сен 10, 2005 9:44 pm    Заголовок сообщения: Ответить с цитатой

Эт точно, оффтоп пошел Smile
А с портом вроде разобрались. Всем СПАСИБО.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум по модемам IDC -> General Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3  След.
Страница 2 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group

Created this page in 0.024121 seconds : 15 queries executed : GZIP compression enabled : Debug Mode

©2002, INPRO Development Corporation

Rambler's Top100