Forum: Compiler & IDEs fifo mit irq


von Ronny Schulz (Gast)


Lesenswert?

Wie schon in einem anderen Thread in anderen Zusammenhäängen
beschrieben, habe ich mit der seriellen einen FIFO-Puffer
zusammengebastelt. Da das Ganze aber Interruptgesteuert werden soll.
Also eben der FIFO zum senden und ein anderer zum empfangen benutzt
werden soll, wollte ich mal wissen wie man das am Besten handeln kann.
Ich muss gestehen ich habe da eine echte Denkblockade. Die Problematik
ist einfach, dass ein IRQ in den Empfangspuffer schreibt und ich immer
wieder aus diesem lese. Da kommt es mal zu Überschneidungen und ich
weiß beim besten Willen nicht, wie ich dem aus den Weg gehen kann. Die
entsprechnen Quellen liegen hier:

http://mitglied.lycos.de/projectsilence/syscontrol/source/serial.c
http://mitglied.lycos.de/projectsilence/syscontrol/source/serial.h
http://mitglied.lycos.de/projectsilence/syscontrol/source/fifo.c
http://mitglied.lycos.de/projectsilence/syscontrol/source/fifo.h

Und so dieht mein Loop aus, um Zeichen zu lesen von der seriellen:

while (!(serial_getc(&serial_inchar) & (1<<FIFO_SIG_EMPTY_ERR))) {
 ... mach was und werte Zeichen aus ...
}

Problem ist, dass manchmal ASCII 0 durchrutscht, obwohl nur Buchstaben
getippt werden. Da muss ein Fehler sein und der kommt durch IRQs ...
ich hab Null Plan, wie ich das unterbinden soll. Ich habe schon
Busyflags in der FIFO-Struktur gesetzt. Aber das hilft auch nichts,
weil während der Abfrage genau dazwischen auch ein IRQ reinrutschen
kann.... und mit cli() und sei() wollte ich da eher ungern arbeiten.

von Ronny Schulz (Gast)


Lesenswert?

Nachtrag: Prinzipiell arbeite ich ja im Moment schon mit cli() und
sei(), damit es halbwegs funktioniert. Aber so richtig geht es
immernoch nicht. Und eigentlich wäre es gut, wenn ich cli() und sei()
vermeiden könnte.

von Karl vom Kanal (Gast)


Lesenswert?

Suche mal im Forum nach 'ringpuffer', das gab es schon öfter.

Karl

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.