Librarie erstellen mit Assembler / GCC und Interrupt

Gast #524203
Lesenswert?

Hallo,

Ich habe eine .S Datei die verwendet wird für das Aswerten von
ein Signal am INT0 Interrupt. Daneben gibt es noch eine .c Datei.

Von diese .S und .c Dateien versucht eine Librarie zu erstellen mit
avr-ar anhand http://www.mikrocontroller.net/articles/Libraries.
Klappte.. Nur leider...

Das Interrupt wird NICHT angezeigt avr-nm und leider ist das
Intterupt (INT0) nicht in die Liste. Und es ist scheinbar auch nicht
in die Libarie drinnen, mein Program macht nicht viel..

Jemand eine Ahnung wie mann ein Interrupt doch im Librarie
drinnen bekommt?!?!

Ich habe noch versucht um über das Interrupt eine Routine
an zu rufen in das Librarie, leider wirft avr-gcc scheinbar
alle Register auf den Stack wenn ich im .lss File reinschau..

Mfg,

Robert (Niederlande)
Moderator Persönliche Seite #524268
Lesenswert?

ISRs in einer Bibliothek sind nicht ganz einfach.  Das hängt damit
zusammen, dass die ISR ja (aus Sicht des Linkers) niemand ,,ruft'',
d. h. es gibt keine zuvor undefinierte Referenz, die durch Linken
der entsprechenden ISR aufgelöst würde.

Es müsste funktionieren, wenn man auf der Kommandozeile des Linkers
die entsprechende undefinierte Referenz mit der Hand erzeugt.  Das
geht mit der -u Option (vom Compiler aus -Wl,-u), wobei man der den
internen Namen des Vektors geben muss, also __vector_42, nicht
INT0_vect.  Welcher Name das genau ist, hängt von deinem Controller
ab.

Wäre es nicht einfacher, wenn du statt der Bibliothek lieber einfach
nur das entsprechende Objektmodul direkt auf der Linker-Kommandozeile
mit angibst?

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