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
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.
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.
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
Lass einfach mal ein map-File erzeugen und schau was der Linker zu den Funktionen meint. Vielleicht ist's nur Zufall daß sie richtig zu liegen kommen.
@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????
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. :-(
Los sagt mal was: wie gehtn das einheitlich für alle .cpp Dateien ;-) MFG
Der Albi wrote:
> Das mit dem Linkerskript.. da hab ich ehrlich gar keine Ahnung davon.
Steht doch oben wie's geht. Die 4 Zeilen anzupassen (anzupassen ist nur
eine davon), in 'ne Datei zu schreiben und die dazulinken wirste schon
schaffen.
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).
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.
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.