www.mikrocontroller.net

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


Autor: Drachenbändiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst das Linkerscript modifizieren.  Die beiden Zeilen
    *(.vectors)
    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.

Autor: Werner B. (werner-b)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Drachenbändiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Drachenbändiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke auch an Werner B.!

Autor: Hc Zimmerer (mizch)
Datum:

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

Autor: Drachenbändiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.