Forum: Compiler & IDEs interruptaufruf ohne c


von Tobias Krühn (Gast)


Lesenswert?

Hi Leute :)

Ich versuche gerade verzweifelt eine Interruptroutine in C
einzubinden.
Ich habe ein kleines c Programm und nun soll ein Interrupt ausgelöst
werden. Die Interruptroutine ist in ASM geschrieben.

Die Lösung

SIGNAL(SIG_OUTPUT_COMPARE1A )
{
synchro();
}

(synchro() ist die in asm geschriebene Funktion)
ist wenig brauchbar, da zu langsam.

Die Datei synchro.S sieht im Moment ca. folgendermaßen aus:

.global synchro
.func synchro
synchro:
...
ret
.endfunc

Nun würde ich gerne den Compiler dazu bringen beim Auslösen des
Interrupts direkt meine Routinge anzuspringen.
Ich habe folgenden Tip bekommen:
Ich soll die Datei so umbauen:

#include <avr/io.h>
.global SIG_OUTPUT_COMPARE1A
SIG_OUTPUT_COMPARE1A:
...
reti

Leider funktionierts nicht. Wie dann ?

Die erste Variante funktioniert, also habe ich den Interrupt korrekt
freigeschaltet.

Muss die Datei einen bestimmten Namen haben (ausser .S) ?
Muss ich etwas in die .c Datei includieren ?
Noch mehr Ideen ?

Danke schonmal
Grüße
Tobi

von Jörg Wunsch (Gast)


Lesenswert?

Was funktioniert denn nicht?

Das Prinzip ist schon richtig.  Für den reinen Assemblerfall
(AT90S1200) hab' ich auch in der Doku was geschrieben.  Die ISR
unterscheidet sich nicht von der, die mit einem C-Programm zu
verlinken wäre.

von Tobias Krühn (Gast)


Lesenswert?

Hm ja.
Also die Lösung: Hab den Rechner (und damit Simulator) neu gestartet...
dann gings. Warum auch immer.
Grüße
Tobi

von Hagen (Gast)


Lesenswert?

#include <avr/signal.h>

in der Asm nicht vergessen.

Gruß Hagen

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
Noch kein Account? Hier anmelden.