[avr-gcc] Interruptvektortabelle unterbinden?

Gast #1587199
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?
#1587212
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.
#1587218
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 ;-)
Angehängte Dateien:
Gast #1587219
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.
Gast #1587232
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!

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