Interrupt, AVR, IAR-Compiler

Gast #206919
Lesenswert?
• ▲
▼
Hallo,
ich hab etwas Startschwierigkeiten einen Interrupt zu deklarieren.

Ich verwende den AVR µC Tiny26 und schreibe meinen C-Code in der
IAR-Workbench (Kick-Start).

Was muss ich machen um eine Interrupt-Service-Routine für
beispielsweise den INT0 zu schreiben?

Meine Versuche:

void interrupt[INT0_vect] INT0_interrupt(void)
{
}

oder:

#pragma vektor=INT0_vect
__interrupt void INT0_vect(void)
{
}

schlugen bisher fehl. (Ich weis auch nicht wirklich was da gemacht
wird. Ist nur abgepinselt.)
Kann mir jemand bei dem Syntax helfen? Gibt es eine (oder mehrere) gute
Literatur zum Syntax des IAR Compilers?

Grüße,
Michael
Gast #206922
Lesenswert?
• ▲
▼
Bei mir aus einem Prg gerissen ATMEGA 64:

Entweder:

#pragma vector = INT7_vect
__interrupt void ext_int_7_isr(void)
{
  ...
}

oder:
#pragma vector = 0x20
__interrupt void ext_int_7_isr(void)
{
  ...
}

MW
Gast #206924
Lesenswert?
• ▲
▼
zu c und c++ gibt es einen (Quasi)-Standard, in dem gesagt wird, dass
alle schlüsselwörter, die nicht dem allgemeinem standard entsprechen
mit _ oder  und Großbuchstabe beginnen.

__interrupt ist so ein schlüsselwort, weil es im standard-c keine
interrupt service routinen gibt (das soll eigentlich alles das runtime
enviroment bzw. das BS machen).

deshalb gibt es von jedem compiler-hersteller eine andere technik mit
dem problem umzugehen.
(siehe #pragma-anweisung darüber)
Gast #206925
Lesenswert?
• ▲
▼
> zu c und c++ gibt es einen (Quasi)-Standard, in dem gesagt wird,
> dass alle schlüsselwörter, die nicht dem allgemeinem
> standard entsprechen mit _ oder  und Großbuchstabe beginnen.

Der offizielle Standard sagt genauer, dass keine globalen Bezeichner
mit einem und keine lokalen mit einem doppelten Unterstrich beginnen
dürfen (ist bestimmt noch genauer festgelegt), da diese Bezeichner für
den Compiler bzw. die Runtime-Bibliotheken reserviert sind.

Deswegen sollte man z.B. auch bei include-guards keine führenden
Unterstriche verwenden:
#ifdef __BLA_H
#define __BLA_H
#endif

Das wäre z.B. soweit ich weiß kein "well-formed" C/C++-Code.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.