ATmega2561 - Funktionen oberhalb von 128k?

OP #1832106
Lesenswert?
• ▲
▼
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....
Gast #1832583
Lesenswert?
• ▲
▼
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
OP #1832621
Lesenswert?
• ▲
▼
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"]]
OP #1833844
Lesenswert?
• ▲
▼
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....

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.