[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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.