Funktionen in speziellen Speicherbereich pressen.

Gast #1065044
Lesenswert?

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 #1065134
Lesenswert?

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
#1065140
Lesenswert?

@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 #1065161
Lesenswert?

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.
#1065174
Lesenswert?

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 #1066422
Lesenswert?

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 #1068290
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren