[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