Web 51 - Obsluha sériového kanálu |
Rozeberme nyní jednotlivé požadavky podrobněji:
Podpora protokolu TCP vyžadovala na straně Web 51 alespoň minimální podporu TCP stacku, tj. mimo jiné i možnost zopakovat vysílání vyslaných, ale nepotvrzených dat. Vzhledem k zoufalému nedostatku paměti RAM bylo nutné zvolit, namísto přesunu dat z vyrovnávací paměti sériového kanálu do TCP stacku, složitější postup. Data byla z vyrovnávací paměti pouze zkopírována do TCP paketu. Jejich vymazání z vyrovnávací paměti bylo provedeno až po potvrzení přenesení dat příjemcem. Novější implementace TCP (od verze 1.13 včetně) tento požadavek již nemají a implementace sériového kanálu je vedena pouze snahou o co největší úsporu RAM procesoru.
Obvykle se vyrovnávací paměť sériového kanálu realizuje pomocí kruhových bufferů s dvojicí ukazatelů. Jeden z ukazatelů slouží jako ukazatel zapisovaných dat, druhý složí k jako ukazatel pro čtení. Nicméně, každý uspořený byte je dobrý, takže Web 51 používá lineární buffery. Jejich ovládání je následující:
Buffer vysílače používá jediný ukazatel (s1point) složící k zápisu dat do bufferu, ukazující pozici prvního volného místa ve vysílacím bufferu. Pro přesun dat z bufferu do vysílače je použit ukazatel napevno nastavený na počátek bufferu. Po přesunu znaku z bufferu do sériového kanálu je celý buffer posunut o jeden znak směrem k jeho počátku a tím je vyslaný znak z bufferu odstraněn.
Buffer přijímače používal, vzhledem k podpoře TCP, dvojici ukazatelů. První (r1point) ukazoval na první volnou pozici v přijímacím bufferu a sloužil jako ukazatel zápisu pro přenos dat z přijímače do bufferu. Druhý (r2point) ukazoval na první nepřečtený znak v bufferu. Služil pro přenos dat z bufferu přijímače do aplikace. Při opakování přenosu dat bylo prostě možno tento ukazatel posunout zpět. Pokud byl potvrzen přenos n-znaků tak byl celý buffer posunut o n-znaků ke svému počátku a o stejnou hodnotu byly posunuty k počátku i oba ukazatele.
Novější implementace TCP (od verze 1.13 včetně) již nepožadují, aby se pro zopakování vysílání opakoval i přenos dat z bufferu do paketu. Nová implementace používá obdobnou techniku jako vysílací buffer tj. pouze jeden pointer (r1point), data čte ze začátku bufferu a přečtená data odmazává posunutím bufferu.
Spolupráci s MS Windows je poměrně jednoduchá, nicméně náročná na paměť. Dimenzování vysílacího bufferu Windows neovlivňují, takže jeho velikost závisí jen na požadavku aplikace běžící na Web 51. Silně však ovlivňují dimenzování bufferu přijímače, a to především svojí obsluhou HW vyrovnávacích pamětí na čipu sériového vysílače v PC. Reakce na žádost o pozastavení vysílání, ať již přes HW handshake pomocí RTS/CTS či přes SW handshake pomocí XON/XOFF, je závislá na zaplnění bufferů v sériovém kanálu PC. Je proto nutno počítat s přeběhem. To znamená, že vyrovnávací pamět v Web 51 musí, i přes signalizaci stůj, jsem plná, být schopna přijmout a zpracovat další blok dat. Velikost bloku dat závisí na nastavení Windows a je nutno počítat s typickým přeběhem cca 16 byte. O tuto hodnotu je nutno zvětšit přijímací buffer. Z paměti Web 51 tak typicky vyrovnávací paměť vysílače ukrojí 16+1 byte a vyrovnávací paměť přijímače 32+1 byte.
Obsluha sériového kanálu na fyzické úrovni je v Web 51 řešena přes přerušení. Přerušovací procedura IRIT, mimo přenosy mezi buffery a vlastním přijímačem/vysílačem, nastavuje trojici stavových bitů (rxint, txint, srun). Stavový bit rxint signalizuje, že od jeho posledního vymazání, došlo k příjmu nejméně jednoho znaku ze sériového kanálu. Stavový bit txint obdobně signalizuje odeslání nejméně jednoho znaku. Stavový bit srun emuluje hardwarovou signalizaci "vysílač vysílá předchozí zapsaný znak". K řízení toku dat slouží dva bitové přepínače, nastavované při konfiguraci sériového kanálu. První z nich (rtscts) povoluje HW řízení toku dat pomocí dvojice řídicích signálú RTS/CTS. Druhý z nich (xonxoff) povoluje SW řízení toku dat pomocí protokolu XON/XOFF.
Je-li použit protokol XON/XOFF je pro řízení stavového automatu řídícího příjem a vysílání použita další čtveřice stavových bitů. Stavový bit flagtxoff odpovídá signálu CTS, použitému při HW řízení toku dat. Je-li tento bit nastaven, je zakázáno vysílání dat. Bit flagtxoff je je nulován popř. nastaven přijetím znaku XON popř. XOFF, nezapisovaných při aktivovaném protokolu XON/XOFF do bufferu přijímače. Přijímač používá obdobný stavový bit flagxoff, určující zda byl naposledy vyslán řídicí znak XON či XOFF a tím povoleno, či zakázáno vysílání protistrany. Vzhledem k nemožnosti okamžitého vyslání znaku XON/XOFF a nutnosti čekání na vyprázdnění vysílače je nutno použít pro řízení příjmu dvojici pomocných bitů xonrq a xoffrq signalizujících obsluze vysílače, že má místo dat z bufferu vyslat příslušný řídicí znak.
POPIS Web51 | NOVINKY | FAQ | OBJEDNÁVKA | DOWNLOAD |
(c)Copyright 2000, 2001, HW server & Radek Benedikt
Web51@HW.cz, Web51.HW.cz Final applications of the Web51 : www.HWgroup.cz |