PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ringpuffer als normales Byte Array ansteuern



IRQ
17.06.2009, 15:13
Hallo liebe Roboternetz-Gemeinde,

ich habe einen Ringpuffer, in den ich periodisch Daten schreibe. Ab einem gewissen "Füllstand" möchte ich diese Daten dann an eine Funktion übergeben, die einen char-Pointer und die Array-Länge erwartet.

Einfachste Lösung wäre natürlich die Daten aus dem Ringpuffer in ein entsprechend großes Byte-Array zu kopieren und die Referenz darauf dann zu übergeben. Das ist aber leider schlecht möglich, denn das würde die RAM-Kapazitäten des Controllers sprengen. Den Ringpuffer möchte ich einführen um SRAM zu sparen im Vergleich zu einer Variante bei der ich jetzt zwei normale Byte-Arrays abwechselnd fülle und an die Funktion übergebe...

Meint ihr, es wäre möglich, mit Hilfe einer "Zwischenschicht" der Funktion vorzugaukeln, dass es sich um ein Byte-Array handelt? Vielleicht mit Funktionspointer???

MeckPommER
17.06.2009, 15:30
So aus dem Bauch ists schlecht, was gescheites dazu zu sagen. Drum erstmal ein paar Nachfragen:
- manupuliert bzw. blockiert die Funktion die Daten im Array?
- kannst du diese Funktion ändern, oder ist diese fest vorgegeben?

IRQ
20.06.2009, 18:15
Ok, ich kann es etwas konkreter machen:

Die Funktion schreibt auf eine SD-Karte, d.h. die Daten werden nicht manipuliert aber dürfen sich während des Schreibvorgangs nicht ändern. Könnten sie theoretisch, weil wir multitasking haben und die gesammelten Daten nur auf SD-Karte geschrieben werden, wenn gerade keine neuen dazukommen (loggen alle 10ms alle Sensorwerte, ca 30 Byte und starten einen Schreibvorgang wenn sich ordentlich was angesammelt hat, dass es sich lohnt).

Ich könnte die Funktion ändern, allerdings möchte ich es eigentlich vermeiden, da ich den SD-Treiber nicht selbst geschrieben habe und möglichst wenig darin rumpfuschen möchte. Bin ich da einfach nur zu vorsichtig?

Besserwessi
20.06.2009, 21:40
Das einfachste wäre wirklich die Schreibroutine zu verändern. Wenn man den Zugriff auf den Puffer entsprechend in eine Funktion oder ein Makro packt, sollte das kein größeres Problem sein. Beim Schreiben sollte es ja reichen die Daten einfachnur einmal abzuhohlen. Es reicht also eine Funktion um 1 Byte aus dem Ringpuffer zu entfernen.
Ist vielleicht der effektiveste Weg von der Rechenzeit, aber dafür übersichtlich.

IRQ
21.06.2009, 20:24
Ok, vielen Dank, dann werde ich mich mal dran versuchen, die Funktion zu ändern. Falls ich Erfolg habe, werde ich hier drüber berichten.