www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega2561 - Funktionen oberhalb von 128k?


Autor: Jens Berkemeyer (kaeptnahab)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte der Compiler das nicht vollständig alleine handeln, wenn amn ihm 
nur den Typ korrekt angibt?

Gruß
Jadeclaw.

Autor: waldi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens Berkemeyer (kaeptnahab)
Datum:

Bewertung
0 lesenswert
nicht 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"]]

Autor: Jens Berkemeyer (kaeptnahab)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.