Go Down

Topic: Anfänger braucht Hilfe bei einem String Array (Read 456 times) previous topic - next topic

sschuber

Hallo,
wie der Titel schon sagt bin ich noch nicht lange dabei mit dem Arduino zu programmieren.

Ich hänge hier gerade an einem Problem wo mir einfach der Ansatz fehlt.
Also, ich brauche ein String Array, bei dem ich am Anfang und am Ende Strings einschieben kann. Also wenn ich am Anfang einen String anfüge soll am Ende dafür einer verschwinden. Beim Anfügen am Ende soll dann der erste verschwinden. Also das Array soll quasi konstant 10 Strings groß sein und nur der Inhalt soll sich halt immer verschieben.

Ich hab leider keine Ahnung ob ein Array dafür überhaupt das richtige ist, oder ob es da bessere Möglichkeiten gibt.

Danke euch schonmal

jurs


Also, ich brauche ein String Array, bei dem ich am Anfang und am Ende Strings einschieben kann. Also wenn ich am Anfang einen String anfüge soll am Ende dafür einer verschwinden. Beim Anfügen am Ende soll dann der erste verschwinden. Also das Array soll quasi konstant 10 Strings groß sein und nur der Inhalt soll sich halt immer verschieben.


Möglicherweise meinst Du eher eine "verkettete Liste" als ein "Array". Oder sogar noch etwas anderes.

Vielleicht kannst Du es nochmal an einem anschaulichen Beispiel näher erläutern, was Du konkret wie verwalten und schieben möchtest.

sschuber

Also, der Arduino dient als Interface für einen Raspberry Pi, also er soll Menüführung und Bedienung über ein 20x4 Display und einen Drehencoder übernehmen. Die Inhalte für die Menüführung bekommt er immer vom Raspberry per serieller Schnittstelle zugefüttert. Das funktioniert auch schon alles wie gewollt.
Das Problem ist jetzt das es teilweise Menüs gibt die unter Umständen mehrere hundert Punkte umfasst. Das führt eher früher als später zu RAM-Problemen beim Arduino. Das hat mich auf die Idee gebracht das der Arduino ja Daten anfordern kann während man in dem riesigen Menü scrollt.

Beispiel:

- Es wird in einem Menü navigiert das 100 Einträge hat
--> Dem Arduino werden Eintrag 1-12 geschickt

Scrollt man jetzt durch's Menü und bewegt sich ins letzte Drittel, also 8-12, dann muss die Liste erweitert werden. Das heißt das der Raspberry ihm die folgenden 4 Einträge schickt. Der Arduino muss darauf hin seine Liste auf 5-16 abändern. So das er immer den Bereich "vorhält" in dem man sich bewegt.

Ich hoffe mein Anliegen wird so etwas klarer.
Danke schonmal.

jurs


Ich hoffe mein Anliegen wird so etwas klarer.


Vielleicht trifft das Stringlisten-Beispiel zur Gist-Library Deinen Anwendungsfall:
https://gist.github.com/obedrios/2963694

https://gist.github.com/obedrios/2963694/download

Serenifly

Das nennt sich Deque, für "double ended queue":
http://de.wikipedia.org/wiki/Deque

Normalerweise wird da das Element am anderen Ende der Liste nicht verändert, aber das kann man implementieren

Die STL Lib für AVR enthält eine Deque:
http://andybrown.me.uk/wk/2011/01/15/the-standard-template-library-stl-for-avr-with-c-streams/

Aber da musst mal den Speicherverbrauch testen!

MGOS

Ich würde einen Ringspeicher/puffer nehmen, also ein Array, das zu einem Ring "gebogen" wird und somit kein Anfang oder Ende hat. Mit zwei Pointern/Indizes merkst du dir den "Anfang" und das "Ende" deiner Liste und beim Scrollen schiebst du nicht den ganzen Inhalt des Arrays sondern nur die Pointer. Zwischen "Ende" und "Anfang" ist dann immer ein Element, das du austauchen kannst. Schiebst du nach dem Austauschen nach "oben", dann wird es unten angehängt, schiebst du nach "unten", wird es oben Angehängt. Der Vorteil des Ringarrays ist der, dass du mit wenig Rechenleistung (kein Schieben des gesammten Arrays nötig) und ohne dynamisch Angelegten Speicher (du hast nur ein "normales" Array mit einer festen Größe) zum gewünschten Ergebnis kommst.

Go Up
 

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Note: this post will not display until it's been approved by a moderator.
Name:
Email:

shortcuts: alt+s submit/post or alt+p preview