[pso] [tema2][lin] Folosire intreruperi

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Tue Apr 14 20:22:07 EEST 2009


On Tue, 2009-04-14 at 19:37 +0300, Corneliu Paul Lupulet wrote:
> 
> Salutare!
> 
> Am in vedere urmatorul scenariu si nu stiu daca solutia la care m-am
> gandit este "corecta":
> 
> Referitor in primul rand la transmiterea datelor pe seriala:
> 
> Utilizatorul vrea sa scrie in portul serial si face un "write"
> pe /dev/com1 sa zicem. Modulul preia datele de la utilizator in
> bufferul din kernelspace si abia acum activeaza intreruperea
> "Transmitter holding register empty". Drept urmare se declanseaza
> aceasta intrerupere, iar in rutina de tratare se trimit datele, dar
> intr-un final bufferul va ramane gol. In aceast moment, cand se
> declanseaza  intreruperea "Transmitter holding register empty", rutina
> de tratare nu mai are ce trimite si ca urmare dezactiveaza aceasta
> intrupere.
> 
> Peste ceva timp (secunde, minute), utilizatorul vrea sa trimita din
> nou date si apeleaza "write". Dupa ce sunt preluate datele in bufferul
> din kernelspace, se reactiveaza intreruperea "Transmitter holding
> register empty". Drept urmare se va declansa aceasta intrerupere si in
> rutina de tratare se vor trimite datele. Cand se goleste bufferul din
> nou, rutina dezactiveaza intruperea. Procesul se poate relua de
> oricate ori.
> 
> Asadar, ma gandeam sa dezactivez intreruperea "Transmitter holding
> register empty" in rutina de tratare, cand bufferul de trimitere este
> gol si sa o activez cand este scris in el "pentru prima oara", in
> functia "write"

E OK.

> Analog la receptionarea datelor, ma gandeam sa dezactivez intreruperea
> "Received data available" in rutina de tratare, cand bufferul ajunge
> si ramane plin (nu sunt citite datele din el mult timp) si sa o
> reactivez cand se elibereaza cel putin un octet, in functia "read"

Pare OK si aici. Nu cred insa ca se va intampla vreodata asa ceva :-)
(cel putin nu in testele noastre), dar abordarea este buna.

Razvan



More information about the pso mailing list