> deshalb werde ich versuchen die LCD_printf um das pgm_read_byte
> zu erweitern
Wirf die originale Funktion nicht über Bord. Du wirst sie noch brauchen!
Bei solchen Sachen hat man normalerweise immer 2 Funktionen.
Die eine will normale Pointer ins SRAM haben, die andere Pointer ins
Flash.
So wie zb
strcpy ( kopiert SRAM->SRAM )
strcpy_P ( kopiert Flash->SRAM )
Du hast dann eben ein
LCD_printf String kommt aus dem SRAM
LCD_printf_P String kommt aus dem Flash
Es scheint sich allerdings da auch eine andere Konvention durchzusetzen:
Die Funktion kriegt hinten einen Suffix _p, würde also
LCD_printf_p
heißen.
Die Variante mit einem großen P würde bedeutet, dass sich dieser
'Funktionsaufruf' selber darum kümmert, dass der String im Flash landet.
LCD_printf_P( "Hallo" );
sorgt dann dafür, dass der Text "Hallo" im Flash liegt und ein
entsprechender Flash-Pointer an die Funktion LCD_printf_p (diesmal mit
kleinem p) übergeben wird. Gemacht ist es so
1 | #define LCD_printf_P(x) LCD_printf_p( PSTR(x) )
|
Das PSTR Makro sorgt dafür, dass der konstante Text im Flash bleibt.