16 Array's mit 1024 IntWerten im Flash speichern und mit Zeiger darauf zugreifen

Hallo zusammen,

ich benötige Hilfe für einen Sketch.

Ich muss 16 Kurven mit jeweils 1024 Integerwerten berechnen. Ich benutze einen Arduino Mega mit 8kByte SRAM was in meinen Fall ja nicht ausreicht, da ja jedes Array schon 2kByte frisst.

Nun war die Idee diese Arrays im Flash zu speichern, da dieser ja 256 kByte groß (abzüglich Bootloader und Sketch) ist.

Kann ich im Setup in den Flash schreiben?

Wie kann ich im Loop wieder auf einen dedizierten Wert zugreifen?

Zähle in einer Schleife jede Sekunde einen Wert nach oben und der Wert sollte die Stelle im Array sein.

Kann mir jemand helfen? Oder ist dies nicht so möglich?

Vielen Dank

Im Flash kann man meines Wissens nur Konstanten speichern.

Drei alternative Ideen:

  • Der Teensy 3.2 hat 65536 Byte RAM.
  • Du schreibst die Werte auf eine SD-Karte.
  • Du schließt RAM über I2C an.

Hmm...

Ich bin mir sicher, dass im Datenblatt steht, ob, und wenn ja, dann auch wie das möglich ist.
Da steht auch, was deine Lockbits tun.

Es geht nur wenn man die Werte schon im Programm fest vorgibt

const unsigned int data[] PROGMEM = { 555, 666, 777, 888, 999, 1000 };

void setup() 
{
  Serial.begin(9600);

  for (unsigned int i = 0; i < sizeof(data) / sizeof(data[0]); i++)
  {
    Serial.println(pgm_read_word(&data[i]));
  }

}

void loop() 
{
}

Und ja, es gibt auch Wege wie man im Betrieb ins Flash schreiben kann. Das ist aber nicht wirklich beschrieben. Höchstens in irgendwelchen obskuren AppNotes

Toni14:
ich benötige Hilfe für einen Sketch.

Wenn die Arrays konstant sind, kannst Du sie im Flash speichern. Siehe z. B. hier (unten, Überschrift „Knapper Speicher“).

Wenn Du die Werte in den Arrays ändern können musst, musst Du Dir etwas Anderes einfallen lassen

Gruß

Gregor

Es geht nur wenn man die Werte schon im Programm fest vorgibt

Danke, die Aussage reicht denke ich aus um meine Frage abschließend zu beantworten.

Vielen Dank an alle.

Wenn das nur in setup() gemacht werden soll und nicht von externen Sensoren abhängt, dann kann man die Werte auch auf dem PC in einem Programm berechnen, das dann sogar den Code fertig formatiert ausdrucken könnte

Du kannst eine Sd-Karte oder ein externes EEprom/RAM nehmen.
Der ATmega2560 kann externes RAM ansprechen siehe zB QuadRAM — Rugged CircuitsRugged Arduino

Grüße Uwe

Mit dem geeigneten Bootloader kann man auch den Flash aus dem Programm heraus beschreiben.

Writing to FLASH from application. Please test and enjoy :slight_smile:

Das ist übrigens der erste Hit, bei einer Suche nach "writing to flash" im Suchfeld oben rechts.