www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt, AVR, IAR-Compiler


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schmidle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

probiere mal: #pragma vector = INT0_vect.
Also das vector mit "c" schreiben und nicht mit "k".

Gruß
Schmidle

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann mich nicht mehr richtig erinnern, aber könnte evtl. auch das
möglich sein:

interrupt[INT0_vect] void INT0_interrupt(void)

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Perfekt!!!!

Tausend Dank!!!

Die Frage, warum das so sein muss bleibt zwar noch, aber ich kann
wenigstens weiter machen :-)

Grüße,
Michael

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt auch mit Sicherheit ein Makro, ähnlich SIGNAL(#ir_vector) beim
avr-gcc, welches einem das ganze #pragma- und __interrupt-Geraffel
abnimmt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.