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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.