Forum: Compiler & IDEs [avr-gcc] Interruptvektortabelle unterbinden?


von Drachenbändiger (Gast)


Lesenswert?

Bei meiner Suche, wie ich avr-gcc dazu zwingen könnte, keine 
Interruptvektortabelle zu erstellen, bin ich auf einen Beitrag von 2003 
gestoßen: Beitrag "Interruptvektortabelle unterbinden"
Dort hieß es: geht nicht so einfach. Gilt das für die aktuellen avr-gcc 
Versionen immer noch ... oder gibt es inzwischen eine Möglichkeit, 
avr-gcc davon zu überzeugen, bei einem Programm ohne Interrupts die 
Tabelle nicht zu erstellen?

von Hc Z. (mizch)


Lesenswert?

Du musst das Linkerscript modifizieren.  Die beiden Zeilen
1
    *(.vectors)
2
    KEEP(*(.vectors))
mussen raus.  Dann musst Du den Makefile so modifizieren, dass er das 
geänderte Linkerscript verwendet.  Dann musst Du dafür sorgen, dass auf 
Adresse 0 ein jmp zum Beginn des Init-codes steht, am besten über eine 
eigene Section, die statt der .vectors im Linkerscipt platziert wird.

Wenn Du Dir das zutraust und Dich bis zum Linkerscript durchbeissen 
kannst, geht das schon.  Aber eine Schritt-für-Schritt-Bauanleitung ist 
(jedenfalls von meiner Seite) leider nicht drin, das wäre mir zu 
zeitaufwendig.

von Werner B. (werner-b)


Angehängte Dateien:

Lesenswert?

Das folgende setzt vorraus:
 AVRGCC (z.B. WinAVR) mit einer AVR-LibC 1.6.x
 Makefile gereriert mit MFile

Am einfachsten modifiziert du das Startup-File "gcrt1.S" und entfernst 
die Interruptvektoren daraus. Den Reset Vektor aber drin lassen (den 
könnte man auch entfernen, dann muss aber wesentlich mehr anpassen).
Dieses Startup-File musst du dann nur noch in dein Projekt einbinden.

Im Makefile die ASRC= - Zeile suchen und deine gcrt1.S anhägen.

Da jetzt deine gcrt1 explizit angegeben ist, wird sie vor derjenigen in 
der AVR-LibC gefunden und verwendet.

Ich habe mal die gcrt1.S aus der AVR-LibC 1.6.7 modifiziert und 
angehängt.
Ist aber vollkommen ungetestet (das Prinzip schon, nur die angehängt 
gcrt1.S nicht ;-)

von Drachenbändiger (Gast)


Lesenswert?

Danke, mizch! Klingt recht aufwendig -- vermutlich ist es einfacher, ich 
schreibe die paar Zeilen Code, die das "Programm" ausmachen (raw WAV aus 
dem Flash wird per fast PWM ausgegeben, um ein Wort hörbar zu machen 
[ohne Initialisierung sind das 5 Zeilen in c]) einfach in Assembler.

von Drachenbändiger (Gast)


Lesenswert?

Danke auch an Werner B.!

von Hc Z. (mizch)


Lesenswert?

Die Methode mit der modifizierten gcrt1.S von Werner klingt einfacher 
als mein Vorschlag.  Ich würde die nehmen.

von Drachenbändiger (Gast)


Lesenswert?

Klingt gut, werde ich demnächst mal probieren. Für meine aktuelle 
Applikation ist Assembler einfach zielführender, da ich damit mehr 
Erfahrung habe und mich als fauler AVR-Studio Nutzer sehr wenig mit der 
Modifikation des Makefile befasst habe. Eure Vorschläge werde ich aber 
zum Anlass nehmen, mehr Erfahrung damit zu bekommen!

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
Noch kein Account? Hier anmelden.