Forum: Compiler & IDEs ATmega2560: Wie Daten oberhalb 64k plazieren?


von Peter (Gast)


Lesenswert?

Hallo Forum,

ich weiss, Daten sollen unterhalb 64k liegen, weil die *_P Funktionen 
nur mit diesen arbeiten können.
Ich habe auch davon gehört wie man auf Daten oberhalb 64k zugreift 
(*_far).

Jetzt kommt mein Problem:

ich mache regen Gebrauch von *_P Funktionen, bisher war das alles ok, 
weil meine Daten dafür locker in den unteren 64k Platz hatten.

Jetzt muss ich ein 40kB großes Firmware File im Flash unterbringen (für 
ein grafisches Display), natürlich geteilt in kleinere Teile, sonst 
würde ich "array too big" bekommen, was an sich immer noch kein Problem 
ist.
Diese Daten will ich dann mit einem Loader ins Display pumpen.

Aber, diese zusätzliche große Datenmenge sorgt dafür, daß manche meiner 
Konstanten, welche bei den *_P Funktionen benutzt werden, nach oben 
"geschoben" werden. Denn ich habe keinen Einfluss darauf, wo die 
Konstanten im FLASH angelegt werden.

Jetzt meine Frage:

wie kann ich es erzwingen daß der Compiler/Linker meine 40k großes 
Firmware oberhalb 64k Grenze im Flash plaziert, damit die übrigen 
Konstanten unterhalb 64k bleiben.

Wie würdet Ihr das Problem lösen?


Gruß
Peter

von axelrororo (Gast)


Lesenswert?

Vermutlich damit - ohne Gewähr, da selbst keine Erfahrung damit:
http://www.nongnu.org/avr-libc/user-manual/mem_sections.html

von 900ss (900ss)


Lesenswert?

Hier ist auch beschrieben, wie du Daten gezielt in eine section packst 
und dem Linker dann sagst, wo er diese plazieren soll. Ob das auch 
oberhalb der 64kB funktioniert, weiss ich nicht.

Beitrag "avr-gcc Linker-Script"

Also das Startposting, da steht es drin.

von Falk B. (falk)


Lesenswert?

@ Peter (Gast)

>Ich habe auch davon gehört wie man auf Daten oberhalb 64k zugreift
>(*_far).

Schöne Theorie, aber das geht nur mit einem Würg-Around.

>Wie würdet Ihr das Problem lösen?

Beitrag "pgm_read_byte_far"

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
Noch kein Account? Hier anmelden.