Forum: Mikrocontroller und Digitale Elektronik FreeRTOS + Queue oder FIFO Prozessdaten speichern / versenden


von Godi S. (godi22)


Lesenswert?

Hallo,

Ich habe ein Alvidi Board mit einem AVR32 drauf.
Auf diesem läuft schon FreeRTOS und lwIP.

Nun habe ich einen Task (Regler) der momentan alle 10ms aufgerufen wird.
Jetzt würde ich gerne die Daten (IST/SOLL-Wert, Reglerabweichung, 
Reglerausgang, ...) per TCP versenden und / oder auf der SD Karte 
speichern.

Wie gehe ich das jetzt richtig an damit ich nicht alle 10ms Daten 
versende bzw auf die SD Karte schreibe sondern nur zb alle 100ms?

Meine Gedanken:

Mit FIFO:
Eigener Task der zb nur alle 100ms aufgerufen wird und aus einem FIFO 
die Werte ausliest und das so lange bis der FIFO leer ist. Der andere 
Task mit dem Regler schreibt bei jedem Aufruf Werte in den FIFO.
Können da Probleme entstehen wenn der eine Task gerade in den FIFO 
schreibt und der andere aus diesem liest?
Können bei dem FIFO aus dem Atmel Studio Framework auch andere 
Datentypen außer uint8 bis 32 gespeichert werden? (es stehen nur 
Methoden für diese Datentypen zur Verfügung) Oder ist es auch möglich 
ein Struct mit zb 10 float typen zu speichern?

Über Queue:
Im Regler-Task die Daten zusammenfassen bis zb 10 struct's zusammen sind 
und dann den Pointer über die Queue übergeben. Damit wird der Empfänger 
Task über die Queue aktiviert und der speichert / versendet die Daten.
Da muss ich dann aber mehrere Arrays mit den Struct's anlegen damit ich 
mir die Daten nicht selber wieder überschreibe. Wie kontrolliere ich 
dann ob die Daten schon gespeichert worden sind so dass ich ein altes 
Array wieder überschreiben kann?

Oder funktioniert das ganz anders und einfacher? :)

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.