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?
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.
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 ;-)
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.
Die Methode mit der modifizierten gcrt1.S von Werner klingt einfacher als mein Vorschlag. Ich würde die nehmen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.