mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sheduler u. Queues?


Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es Sheduler u. Queues für Microcontroller?

Mich stört nämlich, dass Wartezeiten meist mit busy waiting verschwendet 
werden und einzelne Datenpakte ohne Queue chaotisch  versendet werden 
und dadurch mehrere Pakete als ein einziges (u. damit fehlerhaftes) 
versendet werden.

Autor: Jangomat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erzähl mal ein bißchen mehr über Deine Anwendung, damit klar wird, was 
Dein Problem ist

Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind verschiedene.
Also ein Problem ist die Kommunikation über eine serielle Schnittstelle. 
Es werden Datenpakete in einem festliegenden Format verwendet. Ohne 
Wartezeiten werden die Datenpakete ohne Pause, also mehrere als ein 
großes versandt. Mit einer Queue gäbe es das Problem nicht.

Autor: Jangomat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du stellst Dir also einen Puffer vor, welcher auf der einen Seite Daten 
über diese serielle Schnittstelle gefüttert bekommt und auf der anderen 
Seite diese nach Anforderung über ein Handshake-Verfahren ausgibt?
Wie groß muß den der Puffer sein? Welche Datenraten kommen vor?

Autor: Ralf Weil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn ich Dich richtig verstehe sollte Dir einfach ein Ringbuffer mit zB. 
256Bytes reichen, indem Du die Daten die Du verschicken willst ablegst 
und nach erfolgreicher Übertragung des jeweiligen Bytes wird vom UART 
ein Interrupt ausgelöst und Deine IRoutine schickt dann das nächste Byte 
raus. Sowas ist halt eine Queue per Software. Ich kenn sonst keine 
andere Lösung.

Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, aber da muss man die Wartezeit extra Programmieren.

Autor: Ralf Weil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
??? Wartezeit ??? Meinst Du die Wartezeit für den IRQ, damit die 
Gegenstelle die Abstände mitbekommt? Hat die denn keinen UART? Außerdem 
mußt Du doch sowieso auf das Startbit warten, und ob Du nun 1, 1,5, oder 
2 oder mehr Stopbits auf das nächste Startbit wartest ist doch egal.

Mit dem Interrupt kann Deine normale Anwendung im Hintergrund laufen. 
Wenn die gerade langeweile hat Läuft sie halt in einer Endlosschleife. 
Aber auch hier kommt dann der IRQ und erlösst die CPU aus der 
Endlosschleife und schickt das nächste Byte raus.

Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Wartezeit ist auch nötig, weil die Gegenstelle das abgeschickte 
Datenpaket verarbeitet haben muss um ein neues entgegennehmen zu können.
Damit es ein timeout gibt, müssen die Daten deshalb in einem Zeitraster 
geschickt werden; z. B. 100 ms.
Zur Zeit verwende ich eine nach jedem Timer-IRQ aufgerufene Funktion, 
die alle 250 ms aufgerufen wird. Das Zeitraster muss ich mit goto 
end_250ms_function nach jedem send_data sicherstellen. Das funktioniert 
zwar und verbraucht wenig Flash u. RAM, macht aber das Programmieren 
aufwendiger, weil die Reihenfolge in der Funktion genau stimmen muss.

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.