-         

Ergebnis 1 bis 5 von 5

Thema: Ringpuffer als normales Byte Array ansteuern

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.12.2005
    Ort
    Nürnberg
    Beiträge
    57

    Ringpuffer als normales Byte Array ansteuern

    Anzeige

    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???

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    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?
    Mein Hexapod im Detail auf www.vreal.de

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    26.12.2005
    Ort
    Nürnberg
    Beiträge
    57
    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?

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    26.12.2005
    Ort
    Nürnberg
    Beiträge
    57
    Ok, vielen Dank, dann werde ich mich mal dran versuchen, die Funktion zu ändern. Falls ich Erfolg habe, werde ich hier drüber berichten.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •