GCC, WinAVR, AVR-Studio 4.18: String im Flashspeicher

#3632180
Lesenswert?

Hallo Gerd.

Ich denke du suchst nach dem, was PSTR() tut.
Siehe 
http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga05ca900ebf7cd121be73c654d9ccb3eb

Aber Achtung, die Verwendung klappt nur in den oberen 64K des Flashs 
zuverlaessig.
Und die Funktionen, in den du diese Art von String verwendest muessen 
damit umgehen koennen: I.A. [...]_P(...) Funktionen genannt.

MfG
#3633203
Lesenswert?

Gerd schrieb:
> Was mich verwirrt:
>
>> Aber Achtung, die Verwendung klappt nur in den oberen 64K des Flashs
>> zuverlaessig.

Zeiger in AVR sind 16Bit breit. D.h. es konnen 65536 Bytes (position 
0x0000 bis 0xffff) addressiert werden.
Flash Speicher ist bei den AVRs allerding mitunter bereits groesser als 
64KB.

Ein Zeiger auf einen "Flash-String" jenseits der 64K Grenze wuerde auf 
falsche Daten referenzieren.

MfG
#3633712
Lesenswert?

Falk Brunner schrieb:
> Kapitel Variablenzugriff >64kB

Ja, vereinzelt kann man mit "elpm" aushelfen.

Die aktuelle avrlibc benutzt den aber nicht ueberall.
In diesen Zusammenhang ging es um Stringfunktionen_P.
(http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html)

Diese funktionieren NICHT ueberhalbt 64K.

Ggf. kann man dem Compiler eine Subarchitektur (longavr?) beibringen, 
die einheitlich 3 oder 4 Byte Pointer einsetzt.
Freilich overhead...

...ggf. hat Joerg dazu eine Meinung ;-) Joerg?

MfG
#3634835
Lesenswert?

@ Stephan B. (matrixstorm)

>In diesen Zusammenhang ging es um Stringfunktionen_P.
>(http://www.nongnu.org/avr-libc/user-manual/group__...)

>Diese funktionieren NICHT ueberhalbt 64K.

Ach so. Das ging wohl nur mit pgm_read_byte etc. Hmm.

>Ggf. kann man dem Compiler eine Subarchitektur (longavr?) beibringen,
>die einheitlich 3 oder 4 Byte Pointer einsetzt.
>Freilich overhead...

Naja, vielleicht muss man irgendwann halt doch mal auf nen 32Bitter 
wechseln ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren