AVR-GCC: Wie IRQ-Vektor auf reine ASM-Funktion setzen?

OP #2022409
Lesenswert?

N'abend,

hab schon mal avr-libc Doku und auch hier das AVR-GCC Tutorial 
durchstöbert, aber die Antwort auf meine Frage nicht gefunden.

Ich möchte einen Interruptvektor (Timer, TIMER0_COMPA_vect) definieren, 
der auf eine reine Assemblerfunktion zeigt.

Alles In 'C' ist ja kein Problem mit dem Makro ISR().
Reines Assembler ist auch keine Problem, da definiert man die 
Vektor-Tabelle ja selbst. Aber wie mache ich das mit dem AVR-GCC?

Ich habe eine Assemblerfunktion in einem bsp.S Assembler-Modul.
Die Funktion kümmert sich auch schon um das sichern der Register.
Wie kann ich den Vektor (die Funktion) definieren, sodaß AVR-GCC diesen 
in die Vektortabelle einträgt? So wie es ISR() für 
'C'-Interruptfunktionen macht?
Inline-Assembler in einer C-Funktion möchte ungerne verwenden.
Ich könnte natürlich eine C-Funktion mit 
ISR(TIMER0_COMPA_vect,ISR_NAKED) definieren und von dort die 
Assemblerfunktion aufrufen. Ich möchte aber diesen Call sparen. Die 
Vektortabelle selber anlegen möchte ich auch nach Möglichkeit vermeiden.

Gibt es eine Lösung? Wenn ja wie?

Danke für Euro Tips.

900ss
#2022417
Lesenswert?

> Wie kann ich den Vektor (die Funktion) definieren, sodaß AVR-GCC diesen
> in die Vektortabelle einträgt?

Indem du der Assembler-Funktion einfach den passenden Namen gibst:
1
#include <avr/io.h>
2

3
.global TIMER0_COMPA_vect
4
TIMER0_COMPA_vect:
5

6
        reti

> hab schon mal avr-libc Doku ...
> durchstöbert, aber die Antwort auf meine Frage nicht gefunden.

Dann hast du nicht genau genug geschaut:
http://www.nongnu.org/avr-libc/user-manual/assembler.html
Note [7]

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