Jak optymalizować przerwania w UART przy 115200 baud w Windows 95?

Re: 115200 baud, win95 i overrun





Poprzedni Następny
Wiadomość
Spis treści
From: gr <gred_at_nospam_kki.net.pl>
Subject: Re: 115200 baud, win95 i overrun
Date: Fri, 01 Jun 2001 03:10:50 +0200


Thu, 31 May 2001 12:14:58 +0200 Andrzej Zyśk <azysk_at_nospam_st.com.pl>
napisal:

Zalozmy, ze ustawiamy w UART-cie zglaszanie przerwania juz po
odebraniu 1 bajtu. W rezerwie pozostaje 15 bajtow FIFO czyli ok. 1.3
ms. Wydaje sie to byc wiecznoscia przy procesorze 200MHz. Niemniej,
jak wiadomo, winda jest nieobliczalna i nie zdziwilbym sie, ze cos tam
w niej blokuje przerwania na tak dlugi czas.

IMHO ustaw próg zgłaszania przerwania na 12 bajtów, tak jak jest to
zrobione domyślnie w w95, teraz masz po prostu 11520 przerwań na sekundę co

Tak mialem na poczatku. Wtedy wysypuje sie jakby troche szybciej :-(

daje ci 87us na obsługę przerwania, sama zmiana kontekstu na przełączanie
zadania to normalnie kilkadziesiąt mikrosekund, operacje typu czytaj_port,
zapisz_port to 1us na każdą a będzie ich trochę, poza tym masz jeszcze inne
ważne przerwania które nie lubią czekać: IDE, timer, klawiatura.

W ten sposob odciazymy troche system ale ryzyko przepelnienia FIFO
wzrasta. Jak nie zdazy sie przez te 87us przyjac przerwania to kolejny
bajt trafi do FIFO. Najwyzej odczyta sie kilka bajtow za jednym
zamachem jak juz w koncu przyjmie sie to przerwanie. Chodzi o to, ze
aktualnie problemem objawia sie wlasnie przepelnianiem FIFO. Jesli
bedzie zglaszane po zebraniu 12 bajtow to zostanie tylko niewiele
ponad 0.3ms na przyjecie przerwania i odczyt.

Przesyłanie dużych paczek z tą szybkością niczym się nie różni od używania
modemu na porcie szeregowym, z tą różnicą że transmisja z modemem jest
realizowana najczęściej z użyciem sprzętowej kontroli przepływu.

Tyle, ze ta kontrola sprzetowa AFAIK jest robiona programowo :-(
Musimy i tak dobrac sie do UART-a aby zatrzymac nadajnik. To juz
lepiej odczytac to co nadeszlo do jakiegos odowiednio duzego bufora.
Gdyby UART sam z siebie mogl zdejmowac RTS gdy mu sie FIFO przepelnia
to by mozna sterowac przeplywem, a tak, to wlasciwie na nic to sie tu
nie przyda.

Dzieki za odpowiedz, pozdrawiam
gr