Gast
#3632157
Wie muss die Funktion F aussehen, damit der Compiler String1 nur im
Flashspeicher anlegt?
PUTSTRING( F("String1") );
|
Anzeige
|
GCC, WinAVR, AVR-Studio 4.18: String im Flashspeicher
Gast
#3632157
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
Gast
#3632185
#define F PSTR
Gast
#3633185
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 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 @ 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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|