[pso] [tema2][lin] Folosire intreruperi

Corneliu Paul Lupulet corneliu.lupulet at gmail.com
Tue Apr 14 19:37:59 EEST 2009


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"

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"

Cornel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090414/6f80c433/attachment.htm>


More information about the pso mailing list