Wie muss die Funktion F aussehen, damit der Compiler String1 nur im Flashspeicher anlegt? PUTSTRING( F("String1") );
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
:
Bearbeitet durch User
Vielen Dank für die Infos. Es funktioniert :) Was mich verwirrt: > Aber Achtung, die Verwendung klappt nur in den oberen 64K des Flashs > zuverlaessig.
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
Gerd schrieb: > Was mich verwirrt: > >> Aber Achtung, die Verwendung klappt nur in den oberen 64K des Flashs >> zuverlaessig. Soll wohl heißen: In den unteren 64k.
Johann L. schrieb: > Soll wohl heißen: In den unteren 64k. Aehm oops, natuerlich, sorry. Schlimm wenn schreiben und meinen so divergieren ;-) MfG
:
Bearbeitet durch User
Oberhalb von 64k geht auch, wenn gleich etwas umständlicher. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29 Kapitel Variablenzugriff >64kB
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
:
Bearbeitet durch User
@ 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 ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.