Siccc:
Meine Frage ist nun, kann ich PROGMEN grundsätzlich immer einsetzen, auch im laufendem Programm oder bin ich vollständig auf dem Holzweg? Hat jemand Erfahrungen damit und fühlt sich bereit dazu mir eventuell ein paar blöde Fragen zu beantworten?
PROGMEM ist ein Schlüsselwort bei der Deklaration von KONSTANTEN im Flash-Speicher.
Wenn Du das Schlüsselwort PROGMEM verwendest, werden die entsprechend deklarierten Konstanten im Flash-Speicher statt im RAM-Speicher abgelegt. Von dort können die Konstanten bei Bedarf mit Hilfe spezieller Lesebefehle gelesen werden, also auch z.B. vom Flash-Speicher ins RAM kopiert und dort weiter verarbeitet werden.
Die maximale Größe von PROGMEM deklarierten Konstanten ist auf ein Segment von 64 KB insgesamt beschränkt. Falls Du auf einem Controller mit mehr Flash-Speicher (z.B. MEGA mit 256 KB Flash) mehr als 64 KB Konstanten im Flash halten möchtest, wird es noch ein klein wenig komplizierter mit der Arduino-Software.
Leider hat sich das Arduino-Team noch immer nicht aufraffen können, den GCC-Compiler mit Libraries mal auf eine aktuelle Version zu hieven, bei der dieser ganze PROGMEM-Sermon für Flash-Konstanten nicht mehr notwendig ist. Denn vom AVR-GCC gibt es schon mindestens seit zwei Jahren eine Version, bei der dieses PROGMEM-Gehampel überhaupt nicht mehr notwendig ist. Aus mir unerfindlichen Gründen ist ein Compiler-Update aber wohl auch für die kommende 1.5.x/2.0.x Version der Arduino-Software leider nicht zu erwarten.
Es gibt aber im Netz wohl Bastelanleitungen, um die Arduino-Software selbst nachträglich auf AVR-GCC v 4.7.2 zu bringen. In neueren Compiler-Versionen würde das dann mit der Deklaration von Flash-Konstanten so funktionieren:
const _flash int values[] = { 42, 31 };
Und die Verwendung würde exakt genau erfolgen, ohne zusätzliche PROGMEM-Lesebefehle, wie man sonst auf "normale" Variablen und Konstanten zugreift. Falls Du Lust zum Basteln an Installationen der Arduino-Software hast, bringe Deine Software auf den Compilerstand 4.7.2 und arbeite mit dem "_flash" Keyword!
Und wenn Du mit einer originalen Arduino-Version Konstanten im Flash bis zu einer Größe von 64 KB benötigst, nutze das (inzwischen veraltete, aber bei Arduino immer noch notwendige) PROGMEM mit den lustigen, unterhaltsamen und lehrreichen "Program space utilities":
http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html