(ERLEDIGT): Daten (stringarray) anstatt in PROGMEM in Exterenes NVRam -> Lib?

Hallo Miteinander,
Ich möchte ein Text (Stringarray), feste Wortlänge , ca 2KB gesamt, anstatt im PROGMEM in ein externes NV-Ram (i2c) auslagern, und eben auch anstatt aus dem PROGMEM, aus dem NV-Ram lesen, wenn ich einen der Texte benötige.
Gibt es da eine fertige LIB die mir Funktionen bietet, um die Anweisungen zum PROGMEM einfach Durch diese Funktionsaufrufe ersetzen kann?
Also so dass ich recht einfach anstatt PROGMEM z.B. EXTERN oä, schreiben kann?
Wenn es da eine fertige LIB gibt, wie heisst sie, oder wo finde ich sie?

Ansonnsten wird mir ja nur einfach der Weg bleiben dies 'von Hand'zu erledigen , die Texte byteweise ins NV-Ram zu schreiben und dann dort auch so, nach Berechnung der Startadresse, wieder rauszuholen, die Textlänge kenne ich ja.

Das Ganze benötige ich, weil neben dem Array mit fester länge noch ein Bereich existiert, in dem Texte mit variabler länge gespeichert werden können, die Seriel , über Bluethooth eingelesen werden. Insgesammt kann die Textmenge bis 8KB betragen, und da liegt das Problem, der Flash wird knapp. Ein grösserer Controller als den Atmega 328 ist hier keine Option.

Am ende brauche ich das für ne Laufschrift (28 8x8-Matrixmodule MAX7219) mit Animationen, Festtexten, die Standardmässig abrufbar sind, eine Serie von Festtexten die in einem Loop ablaufen, sowie eben auch Temporäre Texte die praktisch je nach Einsatz kurzfristig eingeschrieben werden.

Danke für eure Bemühungen.

LG Stefan.

Naja...
Wire kann nur jeweils 32Byte schreiben/lesen.
Diese meine Lib im Anhang kann beliebig große Blöcke schreiben/lesen.

Die Schnittstelle ist sehr ähnlich zu der originalen EEPROM lib.
Also fast genau so nutzbar.

Leider ist es nicht so ganz einfach, eine user definierte Memory Section einzuführen.
So wie die schon existierenden Sections, welche über die Makros PROGMEM oder EEMEM verwendet werden.

Also mein Rat:

Eine Struktur definieren
Da "Fächer" für die ganzen externen Daten anlegen.
Aber keine Instanz der Struktur bilden.

Mit offsetof() kannst du dann die (relative) Adresse jedes Elements herausfinden.
Und dann mit put() und get() benutzen.

Edit:
LibVerweis korrigiert.

CombieI2cEeprom.zip (14.3 KB)

Hallo combie,

vielen Dank für Deine schnelle Antwort.
Der erwähnte Anhang mit Deiner LIB ist leider irgendwo verloren gegangen. Oder mein Augenlicht hat inzwischen dermassen nachgelassen, dass ich ihn schlichtweg übersehe.
Kannst Du kurz nachschauen, was da schiefgelaufen ist?

Herzlichen Dank

LG Stefan

Schon 3_min vor deinem Beitrag repariert.

Manchmal dauerts halt, bis Veränderungen durch die Webserver(cluster), Cloud, Proxies und Caches auf dein/mein Display tropfen.

Danke combie,

damit hast Du mir sehr geholfen.
Nun komme ich weiter.

LG Stefan