[pso] Dimensiune buffer si sincronizare prin MCR - MSR

Octavian Purdila pso@cursuri.cs.pub.ro
Sun, 18 Apr 2004 14:35:24 +0300


On Sunday 18 April 2004 04:32, Bogdanutz wrote:
> --- Bogdanutz <bogdaneleu@yahoo.com> wrote:
> > Situatia:
> > Pentru fiecare port am un buffer pentru write si
> > unul
> > pentru read, ambele de dimensiune BUF_LEN.
> > Daca modulul primeste o cere de scriere de
> > dimensiune
> > mai mare, sa zicem 3*BUF_LEN, el se comporta astfel:
> > scrie in bufferul de write pana ce acesta se umple,
> > dupa care trimite datele pe port pentru a goli
> > bufferul. Acum bufferul de read al celuilalt port se
> > umple. Sa zicem ca nimeni nu citeste datele din
> > bufferul portului care a primit datele. La
> > urmatoarea
> > scriere in bufferul initial, urmand aceiasi pasi
> > descrisi mai sus se vor pierde date.
> >
> > Vad cateva rezolvari la aceasta situatie si as dori
> > sa
> > stiu care e cea de urmat:
> >
> > 1) Bufferul va avea dimensiunea 2048 ( am vazut ca
> > in
> > prog de test nu se trimit date mai mari- desi ma cam
> > indoiesc ca asta e solutia :D)
> >
> > 2) Se folosesc MCR si MSR : portul care trimite va
> > verifica MSR pentru a avea permisiunea de trimite
> > date,
> > iar portul care primeste va seta MCR. Asta presupune
> > sa conectam si celelalte fire ale cablului null
> > modem
> > (in momentul de fata eu nu folosesc decat 2-3 3-2).
> >
> > 3) Ma folosesc de conexiunile existente, iar portul
> > care trimite verifica dupa fiecare scriere daca
> > celalalt port ii da permisiunea sa scrie
> > (dezavantajos
> > pentru ca se citeste de 2 ori mai mult si nu pot
> > avea
> > o conexiune in ambele sensuri in acelasi timp)
> >
> > Daca mai exista si alta solutie as vrea sa stiu si
> > eu.
> > (ar fi destul de important sa stiu cum sa procedez
> > pentru ca diferentele dintre solutii sunt destul de
> > mari)
> >

Solutia 2 (flow control) este cea mai buna, dar este si cea mai complicata. 
Pentru tema e ok daca folositi o dimensiune a bufferului mai mare (4096 ar fi 
de ajuns).

>
> Cred ca am inteles intr-un final. Sincronizarea o fac
> prin FIFO si intrerupere. Adica portu care scrie,
> scrie pana cand sa umple FIFO-ul lui si nu mai scrie
> pana cand nu primeste intreruperea de Transmiter
> Holding Register Empty.
>
>

Asta nu o sa rezolve problema daca nu se foloseste flow-control. Oricum, e 
abordarea corecta pentru a trimite date.

tavi