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.
Also die Zeile 115 ist die Funktionsdeklaration: 115: interrupt [UART_RX_vect] void UartRxIntHandler( void )
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
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
ä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
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
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
@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.
Dann schau doch einfach in die Anleitung. Oder hast Du den Compiler mit Emule & Co. gezogen?
@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
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.
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.