Forum: Mikrocontroller und Digitale Elektronik Sheduler u. Queues?


von Rolf F. (Gast)


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.

von Jangomat (Gast)


Lesenswert?

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

von Rolf F. (Gast)


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.

von Jangomat (Gast)


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?

von Ralf Weil (Gast)


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.

von Rolf F. (Gast)


Lesenswert?

Danke, aber da muss man die Wartezeit extra Programmieren.

von Ralf Weil (Gast)


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.

von Rolf F. (Gast)


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.

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.