Was mich erstaunt ist, wie gut der Compiler konstante Indexe optimiert, so dass myjaggedarray[ 2 ][ i ] eine gültige PROGMEM Adresse ist.
Zweidimensionale Arrays und Arrays aus Pointern auseinanderzuhalten ist schon schwer genug, wenn die Pointer dann auch noch selbst im Flash liegen und erstmal mit pgm_read_word oder so geholt werden müssten ( was hier gefehlt hat ), wird es richtig knifflig. Und wenn es dann beim MEGA2560 evtl. noch das richtige 64kB Segment sein muss, wäre ich noch vorsichtiger...
Mein theoretischer Tip:
- Entweder zweidimensionales Array ( mit Verschnitt )
- Oder die Pointer auf PROGMEM im RAM halten ( Bei einer Handvoll Melodien vertretbar )
- Oder genau testen, was man tut.
![]()