Hi Ralf,

unglaublich, dass uns diese manual page durch die Lappen gegangen ist.
Aber im Prinzip ist es das, wonach wir gesucht haben.

Aber eben nur im Prinzip...

Folgendes Szenario:

wir schalten die Interrupts aus, machen ein lock auf die mutex Variable
und genau in diesem Moment trifft ein Zeichen auf der seriellen
Schnittstelle ein.

Was passiert nun? Der Interrupt wird nicht ausgeloesst, das Zeichen wird
also auch nicht in unseren Buffer geschrieben. Ist es damit verloren oder
steht es in der UART Fifo. Dann muessten wir anschliessend zwei
Interrupts hintereinander bekommen. Das glaube ich aber nicht. Wenn es
aber weg ist bzw.ein Zeichen ueberschrieben wurde, ist die jetzige Loesung
besser. 

So wie es jetzt implementiert ist, bekommen wir naemlich den Interrupt,
und das Zeichen wird  im Puffer abgelegt. Nur unser Prozess erfaehrt erst
beim Eintreffen des naechsten Zeichens, dass etwas aus dem  Puffer gelesen
werden kann. Auf diese Art geht zumindest nichts verloren.

Man koennte ggf. durch ein paar experimente herausfinden, wie sich der
UART verhaelt, wenn eigendlich nach jedem Zeichen ein Interrupt ausgeloest
werden soll, in der UART FIFO aber bereits mehrere Zeichen abgelegt
wurden...

Mir ist noch ein Fehler in unserem Programm aufgefallen:
Wir haben in rt_com.c nur noch das trylock verwendet. Aber wenn unser
trylock fehlschlaegt, senden wir trotzdem das Wecksignal. Das ist
natuerlich grosser Mist. Wir duerfen natuerlich nur das Wecksignal
schicken, wenn trylock erfolgreich war. Vielleicht kannst Du das heute
noch einbauen und testen? Sonst macht trylock bzw. das ganze lock/unlock
ja gar keinen Sinn.

Viel Spass und 
Gruss,

Tobi.


-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/

Reply via email to