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
Vermutlich damit - ohne Gewähr, da selbst keine Erfahrung damit: http://www.nongnu.org/avr-libc/user-manual/mem_sections.html
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.
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.