-
Hier bin ich nochmal,
Ich hätte noch eine Frage bezüglich der Speicherplatzverwaltung:
Ich habe in meinem Programm den Ausdruck:
LCD_FONT_6x8( 1, 4," Standby ");
Wo wird " Standby " abgespeichert?
Ich habe sehr viele solche Ausdrücke, und ich vermute, dass diese auch
im RAM gespeichert werden.... :-( .
Gibt es da auch eine elegante lösung?
Als String im Flash speichern?
-
Ein Blick in den generierten Assembler beantwortet die Frage: Das Ding steht im Flash und wird vom StartUp ins SRAM kopiert. (Section .data wahrscheinlich).
Wie man die Strings im Flash lässt steht in [wiki="avr-gcc"]. Wo das Zeug landet kannst du sehen
-- im Assembler (Object-Sections bzw. wie es zugrgriffen wird
-- evtl. im Mapfile
-- evtl im Disassemble des Objects (auch .data disassemblen)
-- im Disassemble des elf
-- anzeigbar mit avr-nm, falls lokale Symbole nicht in der Tonne landen
Du schreibst die eine Funktion
void LCD_FONT_6x8_P (int, int, const char *)
die nichst aud dem SRAM liest, sondern aus dem Flash.
Aufruf:
Code:
#include <avr/pgmspace.h>
extern void LCD_FONT_6x8_P (int, int, const char *);
...
LCD_FONT_6x8_P (1, 2, PSTR ("Standby"));