> Warum steht "const" davor?
Weil das, worauf er zeigt, nach C-Norm konstant ist und nicht
beschrieben werden darf.
> Wie stelle ich (oder der Compiler) sicher, daß der String "HALLO
> HILFE" nicht andere Variablen überschreibt, er hätte ja vom UART
> kommen (siehe Bsp. unten) können mit unbekannter Textlänge zur
> compilezeit?
Wenn du ihn explizit in den Source Code schreibst, hätte er nicht vom
UART kommen können. Wenn du einen String vom UART lesen willst, mußt du
es anders machen. String-Handling ist nicht gerade eine Stärke von C.
Bei unbekannter Textlänge müßtest du z.B. ein Array anlegen, das groß
genug ist, damit der Text reinpasst.
> Legt AVR-gcc "const char* STRING =
> "HALLO";" in den RAM oder FLASH?
Den Zeiger legt er im RAM ab.
Was das Stringliteral, auf das er zeigt, angeht, hängt es primär von
der Architektur ab. Im Prinzip würde Flash reichen, denn der Text ist
ja eh nur lesbar. Aber bei Harvard-Architekturen wie z.B AVR, bei denen
RAM und Flash unterschiedlich angesprochen werden, geht das so nicht.
Einerseits muß das "HALLO" beim Einschalten irgendwo herkommen (also
Flash), andererseits kann ein normaler Zeiger nicht auf den Flash
zeigen. Also wird beim Start das "HALLO" ins RAM kopiert.