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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.