Moin Zusammen, ich darf mich gerade mit unserem Speicherproblem rumschlagen... Zum Tool: Programmiert wird mit AVRstudio/Eclipse in C. Zur Geschichte: Dies wunderbare Projekt startet mit ATmega 128 und wurde, nachdem immer mehr Anforderungen dazukamen, durch den ATmega2561 abgelöst. Mittels "sections" haben wir schon einige Tabellen in den oberen (also oberhalb der mit 16 Bit adressierbaren 128k) Speicherbereich verlegt. Jetzt kommt natürlich noch etwas dazu, aber es gibt keine Tabellen mehr zu verlegen! Jetzt soll ausführbarer Code im besagten oberen Speicherbereich liegen! Sprich: Funktionen sollen dort (in den "oberen" Speicherbereich) hin, die auch von Funktionen im "unteren" Speicherbereich aufgerufen werden, usw. Gibt es da eine verständliche Beschreibung wie ich sowas mache, möglichst auf Deutsch ? Gibts da vielleicht ein Schlüsselwort oder so etwas für? Vielleicht hat ja auch jemand Beispiele für mich....
Sollte der Compiler das nicht vollständig alleine handeln, wenn amn ihm nur den Typ korrekt angibt? Gruß Jadeclaw.
Hi, falls Deine Frage auf den den WinAVR abzielt, dort gibt es eigentlich nichts besonderes zu beachten (macht der Compiler alles selbst), es sei denn Du nutzt Funktionspointer zum Aufruf von Funktionen oberhalb 128kB. Dazu gibts dann hier im Forum auch schon einiges an Themen ... Gruss
Hi, soweit ich bis jetzt gelesen und verstanden habe, regelts der Compiler schon selber, aber wohl nicht für einige bestimmte lib-Funktionen. (mit prologue.../epilogue...) Diese soll man in den Bereich unter 128k anordnen. Wenn ich zB die Optimierung für eine Datei abschalte, bekomme ich "warning: internal error: out of range error" für lib-Funktionen (zB sprintf/vsprintf). Das nächste Experiment soll sein, diese Funktionen/Files aus der lib in den Bereich unterhalb 128k anzuordnen. Mir ist aber noch nicht so klar, wie ich das anstellen soll. AVRstudio oder Makefile sollten die Ansatzpunkte sein... Für eigene Daten habe ich sections im oberen Bereich angelegt, auf die ich mit pgm_read_xxx_far(...) zugreife und den Sectionnamen bei der Anlage der Daten zuweise. Wie das aber bei lib-Funktionen funktionieren soll?!? Das Thema ist wohl noch aktuell, da gibts aus dem März nen alten Thread, der besagt, das es mit der 2010er winAVR auch nicht klappt... Der von mir derzeit bevorzugte Ansatz ist etwa in der Mitte zu finden. [[Beitrag "WinAVR Bug: Crash wegen Codegrösse"]]
Moin Zusammen, so, was mir weitergeholfen hat: Die Linkeroption "-Wl,--relax" Dann funzt es mit den Trampolinen wohl besser, also den Sprungfunktionen zu den eigentlichen Funktionen im höheren Speicherbereich. Damit bin ich jetzt bei ca. 53,x%, ca. 140000bytes, wo ich dann an die erste section für Texte stosse, aber die kann ich noch verschieben, falls nötig. Also mal mit der Linkeroption oben versuchen, bevor man aufwendig weitersucht....
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.