Arraynamen durchnummerieren und wieder aufrufen ?

WIe kann man 256 Arrays mit dem namen nach durchnummeriren um diese später mit dem namen aufzurufen , als nName kann man keine Zahl verwenden.

byte wert1 [8] = { 49 , 5 , 1 , 1 , 20 , 1 , 230 , 50}; byte wert2 [8] = { 49 , 5 , 1 , 1 , 133 , 2 , 70 , 50}; byte wert3 [8] = { 49 , 5 , 1 , 1 , 153 , 3 , 247 , 50}; byte wert4 [8] = { 49 , 5 , 1 , 1 , 82 , 4 , 23 , 50}; byte wert5 [8] = { 49 , 5 , 1 , 1 , 10 , 5 , 33 , 50};

Wie spreche ich mit einem Wert von 0-256 das ensprechende array Wert(x) an?

vpoti = analogRead(A0); potiwert = vpoti/4; int i = potiwert; wert = wert(i)

geht nicht.

Ein zweidimensionales Array funktioniert, aber braucht zuviel RAM

Ein 2-dimensionales Array aus 256 x 8 Bytes braucht nicht mehr Platz, als 256 Arrays aus 8 Bytes. Das ist ein Trugschluß von Dir. Wenn die Werte konstant sind, könnte man es noch ins PROGMEM legen, um RAM zu sparen.

Gruß Tommy

Hallo,

hab ich versucht aber ein array [256] [8] ist größer als der Ram im Arduino, Fehler beim compilieren, zuviel RAM 2300 bytes , steigt exponentiell.

Hast Du Dir mein Posting [u]vollständig[/u] durchgelesen und verstanden?

Gruß Tommy

steigt exponentiell

Nicht ganz ;)

Aber durch Multiplikation kommt schon was zusammen: 256*8 = 2048 Alles andere würde eher noch größer ( z.B. 256 Zeiger auf jeweils 8 Byte wären 256*8 + 256*2 = 2560 Byte)

vpoti = analogRead(A0); potiwert = vpoti/4; int i = potiwert; wert = wert(i)

geht nicht.

Richtig, das geht so nicht. Wenn du evtl. erzählst, was du eigentlich willst...

Nein bei [256] [4] sinds nur irgendwas um 150 bytes , laut Compiler.

Aber egal, es passt nicht in den RAM , darum wollte ich es anders machen , also 256 verschieden arrays ,

die ich mit 0-256 ansprechen kann, aber der name darf keine zahl sein ..... wie dann?

Wenn du nur lesend auf das Array zugreifst gibt es für sowas PROGMEM

x Arrays brauchen jedenfalls nicht weniger Speicher als ein x-dimensionales Array. Ich weiß nicht wie du darauf kommst dass eine Lösung für dein Speicher-Problem ist

Gazello: Nein bei [256] [4] sinds nur irgendwas um 150 bytes , laut Compiler

Da hat der Compiler gemerkt, dass du Unsinn gemacht hast, und es wegoptimiert ;)

Welchen Arduino benutzt Du?

Beschreib mal genau was Du machen willst.

Grüße Uwe

Es hat wohl etwas damit zu tun: WIe liest man Bytestreams an Serial ein

So wie es aussieht, sind etliche Bytes des Arrays in allen "Datensätzen" identisch. So wie es aussieht zumindest: Byte 0: das ist das Startzeichen einer seriellen Kommunikation Byte 1: das ist höchstwahrscheinlich immer 5 Byte 2: detto: 1 Byte 3: detto: 1 Byte 7: das ist das Endzeichen einer seriellen Kommunikation

und Byte 5: entspricht irgendwie dem "Array-Index" Die Daten sind also höchst redundant.

siehe Ausgangspost:

byte wert1 [8] = { 49  , 5 , 1 , 1 , 20  , 1 , 230 , 50};
byte wert2 [8] = { 49  , 5 , 1 , 1 , 133 , 2 , 70  , 50};
byte wert3 [8] = { 49  , 5 , 1 , 1 , 153 , 3 , 247 , 50};
byte wert4 [8] = { 49  , 5 , 1 , 1 , 82  , 4 , 23  , 50};
byte wert5 [8] = { 49  , 5 , 1 , 1 , 10  , 5 , 33  , 50};

Eines der Bytes ist höchstwahrscheinlich eine Prüfsumme, dessen Errechnung (noch) nicht gänzlich geklärt ist. Ich glaube eigentlich, dass so ein großes Array gar nicht nötig ist, sondern es sich um den typischen Fall eines X-Y-Problems handelt. ;)

uxomm: Byte 2: detto: 1 Byte 3: detto: 1

Meinst Du "dito"?

XY!

Wenn es wirklich am RAM liegt ... nicht sinnlos viel buffern sondern sofort parsen und entsprechende Aktionen setzen!

Meinst Du "dito"?

  1. Ja
  2. Da kommen die italienischen Wurzeln durch. :)
  3. www.duden.de/rechtschreibung/detto :)

dito=ditto=detto, Wikipedia

Ist imho 'das Geliche' ... man hätte jetzt auch dito schreiben können :o

Zurück zum Thema - ich vermisse diesen Sketch, Der mir RAM sparen hilft.

MfG

Gabs da nicht mal was auf dem PC mit RAM-Komprimierung? Das kann man bestimmt adaptieren. ;) Duck und wech.

Gruß Tommy

Hehe ... Tommy, Du scheint schon recht alt zu sein ;)

(ok, laß irgendwo was von 40 Jahre Erfahrung von Dir, aber Ja, Da gab Es Mal was, erinnere mich dunkel) Befürchte aber, daß nach dem ganzen Spielen mit der Kompression kein Speicher mehr über ist, in Dem die komprimierten Daten platzsparend unter gebracht werden können - zumindest im µC-Bereich - lasse mich aber gerne belehren ;)

MfG

Das kam kurz nach dem Komprimieren der Festplatten auf. Es hat schon auf PC nicht mal zur Hälfte gehalten, was es versprochen hat, was zu erwarten war. Es fiel mir nur gerade bei diesem Stichwort ein.

Gruß Tommy

Das kam kurz nach dem Komprimieren der Festplatten auf

Ich kann vom Gegenteil berichten: Es gab mal moderne PC mit 4 MegaByte RAM, wo keiner wusste was man mit so viel Zeug anfangen soll. Ist klar, dass man schon Tricksen muss, um mit 16 bit überhaupt 1024 kB adressieren zu können. (Stichwort Segment-Register)

Die beste Anwendung war damals eine RAM-Disk, die zwar wahnsinnig schnell war, aber bei Systemstart erstmal geladen werden musste.

Ja, das war aber nicht die RAM-Kompression. Die war ein extra Produkt, was gekauft werden wollte. Bewertung

Gruß Tommy

das war aber nicht die RAM-Kompression

Das habe ich auch nicht behauptet. Ich wollte eher zeigen, dass ich noch älter bin als du ;) Danke für den Link.

"Windows 95" braucht kein Mensch. Für Solitär ist Windows 3.1 die perfekte Plattform. Das Thema Betriebssystem war nach DR-DOS 6.0 eigentlich durch. ;)


Zum Thema zurück: Ich denke auch, dass die 256 verschiedenen Nachrichten wohl nur je 2 Byte Nutzdaten enthalten, wovon eines der Index ist. Das dritte ist vermutlich eine Prüfsumme.

Das bringt den RAM - Bedarf auf atmega328-freundliche Größenordnung zurück.