Pages: [1]   Go Down
Author Topic: Anfänger braucht Hilfe bei einem String Array  (Read 352 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 134
Posts: 2849
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 134
Posts: 2849
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Faraday Member
**
Karma: 96
Posts: 3501
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Offline Offline
Full Member
***
Karma: 6
Posts: 157
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: