Funktionen in speziellen Speicherbereich pressen.

Gast #1065044
Hallo.
Ich arbeite mit dem AVR32.

Im AVR32 müssen alle Interruproutinen innerhalb von 8KB liegen, da sie 
sonst nur durch umwege erreicht werden können.

Wie schaffe ich es dem GCC zu sagen, dass er die InterruptRoutinen alle 
in einen gemeinsamen Speicherbereich legt, z.B. ab FlashAdresse 
0x8001E000.

Zur Zeit mache ich es so:

Linker: -Wl,--section-start=.InterruptSection=0x8001E000

Code: __attribute__((_interrupt_)) __attribute__((section 
(".InterruptSection"))) void unhandled_interrupt(void)

Aber nicht alle Funktionen werden dann tatsächlich hinter diese Adresse 
verschoben.. warum geht das nur mit einigen, und andere bleiben, wo sie 
auch sonst stehen..?

Ich wäre für Hilfe sehr dankbar :-)

MFG
Gast
also ich fände es schon erstmal toll zu wissen, obs denn überhaupt für 
alle Funktionen funktionieren müsse, die ich mit __attribute__((section
(".InterruptSection"))) versehe.
Persönliche Seite
Hab keine Ahnung von AVR32 :-)

Um die Verwirrung mit Sectionnamen zu verhindern nenne ich 
Input-Sections anders als Output-Sections.

Die In-Sections (*.blah) sammle ich dann über ein Skript ein zu einer 
Out-Section (.myfoo):
1
SECTIONS
2
{
3
  .myfoo          : { *(.blah) }
4
}

Die Out-Section wird dann ab ne bestimme Adresse gelegt per ld- oder 
objcopy-Option.
Gast
Sry für alleinunterhaltung:
Neuigkeiten: Mein Projekt ha ja mehrere .cpp ;-)
Implementiere ich eine Funktion in einer anderen .cpp, (dort wo auch 
andere InterruptFunktionen ihre Adresse erfolgreich wechseln) 
funktioniet das _atribute_ auch.

Sehr komisch. Es scheint also cpp-abhängig zu sein - warum?

MFG
@Johann L: Es tut mir wirklich leid, ich weiß weder, was Input oder 
output-sections sind, noch wo ich dein beispiel überhaupt einfügen 
müsste.
ich habe keinen Zugriff aufs makefile.
Ich nutze AVR32 Studio.

MakeFile hängst dran.

InterruptSection taucht 2x auf. einmal komisch, einmal richtig.
warum????
Persönliche Seite
Du machst aus dem Schnippsel eine Datei und linkst die dazu, wenn die 
Objekte zum elf zusammengelinkt werden. M.a.W. du musst einfach ne 
Linker-Option angeben (diesen Dateinamen). Was der Linker nicht kennt 
interpretiert er als Linkerskript.

> ich habe keinen Zugriff aufs makefile

Natürlich du kannst

1) Per Studio ld/gcc/as/objcopy-Flags/Optionen setzen
2) das Makefile selber schreiben

Falls nix davon geht klopp AVR32-Studio in die Tonne. Ich kenn Studio 
nicht, ist mir zu schwergewichtig.
Naja. Mir is das auch grade alles nix. ich habe jetzt für jede 
.cpp-Datei eine eigene Sectio aufgemacht. Das scheint zu gehen. eine 
Section scheint nur für eine .cpp gültig zu sein. warum weiß der teufel.
kA, was ich falsch mache.
Das mit dem Linkerskript.. da hab ich ehrlich gar keine Ahnung davon. 
:-(
Gast
Tut mir echt leid. Ich sehe einfach nicht, wie das funktioniert. Du gibt 
weder eine Adresse an, noch sonstwas.
Ebenfalls verstehe ich den Sinn einer In- bzw Out-Section nicht.

Das Dazulinken ist tatsächlich nicht das Problem. Nur verstehen müsste 
ich es, was ich da dazulinke(n muss).
Persönliche Seite
Die Lösung hängt auch davon ab, die das Speicher-Layout im Linkerscript 
(ld) beschrieben ist.

Die Funktionen um die es geht müssen wohl nahe an der Vector-Tabelle 
liegen?
Schau doch mal in eines der ld-Files bei den avr32-binutils, da siehst 
du wie .text zusammengebaut wird.

Die vectab ist wahrscheinlich ein Teil von .text, dann kommst du mit 
einer eigenen Section nicht weiter. Im ld findest du bestimmt ne 
vorgefertigte (Input)section für genau den Zweck.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.