mikrocontroller.net

Forum: Compiler & IDEs fifo mit irq


Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
http://mitglied.lycos.de/projectsilence/syscontrol...
http://mitglied.lycos.de/projectsilence/syscontrol...
http://mitglied.lycos.de/projectsilence/syscontrol...

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.

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl vom Kanal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suche mal im Forum nach 'ringpuffer', das gab es schon öfter.

Karl

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.