mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt in C?


Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich habe folgenden Code aus einem Buch abgeschrieben, trotzdem kriege 
ich immer eine Fehlermeldung...
Sind irgendwelche Compilereinstellungen falsch? Oder stimmt was am Code 
nicht?
Danke


interrupt [UART_RX_vect] void UartRxIntHandler( void )
{

    unsigned char data;

    data = UDR;  // Lesen der Empfangsdaten
    RxBuf[RxProducer] = data;
    RxProducer++;
    RxProducer &= BUFFER_MASK;

    if(RxProducer == RxConsumer)
    {
     //Fehler!
    }

}

..\main.cpp (115) : Error[Pe077]: this declaration has no storage class 
or type specifier
..\main.cpp (115) : Error[Pe065]: expected a ";"

Ich benütze den IAR Embedded Workbench.

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Zeile 115 ist die Funktionsdeklaration:
115:  interrupt [UART_RX_vect] void UartRxIntHandler( void )

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Oli

Ich kenne mich in C eigentlich überhaupt nicht aus,
aber den zweiten Fehler kannst du sicher eliminieren, indem du
nach "if(RxProducer == RxConsumer)" noch ein ";" einfügst,
wie bei (fast) allen anderen Zeilen(ausser Kommentare)

Der erste Fehler hat wahrscheinlich seine Ursprünge in der
selben Zeile, denn was ist RxConsumer?

MFG

NIK

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ein ";" eingefügt -> Fehler bleibt bestehen.. :(

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches ist denn die Zeile 115 ?, Die datei ist ja bei weitem nicht so 
lang. Oder ist das nur ein Teil des Codes ?

Ausserdem steht bei den Fehlern ja jeweils am Anfang main.cpp

ist das eine Includedatei oder die Datei selbst ?
Wenn es eine Includedatei wäre, müsste der Fehler ja darin enthalten 
sein...

Nik

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
äh blöd, du hast ja geschrieben welches Zeile 115 ist.
Das ";" kommt desshalb auch am Ende dieser Zeile hin.(Denke ich)

Der andere Fehler liegt ja in der selben Zeile.
Dem Compiler ist anscheinend etwas nicht genau beschrieben.
Wie gesagt ich eigentlich überhaupt keine C Kentnisse,
desshalb kann ich auch nur vermuten.


MFG
Nik

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

wenn es sich um den AVRGCC handelt solltest du mal in die Doku des 
selben kucken und auch mal ins Tutorial auf dieser Seite. ISR's werden 
hier etwa so

INTERRUPT(SIG_OVERFLOW0)

eingeleitet. Und in

if(RxProducer == RxConsumer)

fehlt sicher kein ;

Matthias

Autor: Daniel Aue (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi !

Ich glaube mal gehört zu haben dass beim IAR Interrupts durch #PRAGMA 
Anweisungen definiert werden (nicht wie beim gcc) möglicherweise ist der 
Code aus dem Buch für eine ältere Version von IAR.
Schau mal in der Doku zum Compiler, da müsstest du eigentlich finden wie 
mans macht...

LG

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Daniel Aue:Hab ich auch schon versucht...
#pragma function=interrupt
void UartRxIntHandler( void ){
...
}
#pragma function=default

Hat leider auch nichts genützt.
Ja, im Buch wird eine ältere Version des IAR Compilers benutzt.

Autor: John Doe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann schau doch einfach in die Anleitung.
Oder hast Du den Compiler mit Emule & Co. gezogen?

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@John: Falls es dich beruhigt: NEIN, ich habe den IAR Embedded Workbench 
rechtmässig erworben. Ich bin sogar Besitzer einer runden Scheibe, wo 
dieses Programm darauf gespeichert ist. Cool, oder?    ;-)

Thema:
Ich hab jetzt herausgefunden, wie ich es machen muss:

#pragma vector=UART_RX_vect
__interrupt void UartRxIntHandler( void )


Danke für euer Hilfe
Oli

Autor: John Doe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wollte Dir nicht auf den Schlips treten, ehrlich.
Aber das war doch so eine klassische Handbuchfrage.
Zumindest bei unseren Compilern hier steht so etwas immer da drin.

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber das war doch so eine klassische Handbuchfrage.

Da hast Du schon recht. Hab das "#pragma vector"-Zeugs auch schon vor 
der Frage gesehen, ich dachte mir einfach immer 'ach, das muss doch so 
gehen, wenn es schon im Buch steht...'.
Naja...
Danke jedenfalls nochmals für die Hilfe, bin halt zu dumm um 
"Handbuchfragen" selber zu lösen.
mfg
Oli

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.