USART per ISR

Gast #2152095
Lesenswert?
• ▲
▼
Hallo,

ich gehe gerade die "UART über Interrupts" aus dem Tutorial durch, 
bekomme aber leider noch zwei Warnmeldungen...

warning: 'USART_RXC_vect' appears to be a misspelled signal handler
1
// UART RX complete interrupt
2
 
3
// hier werden Daten vom PC empfangen und in einem String zwischengespeichert
4
// Wird ein Stringterminator empfangen, wird ein Flag gesetzt, welches dem 
5
// Hauptprogramm den kompletten Empfang signalisiert
6
 
7
ISR(USART1_RXC_vect) {
8
    
9
    static uint8_t uart_rx_cnt;     // Zähler für empfangene Zeichen
10
    uint8_t data;
11
 
12
    // Daten auslesen, dadurch wird das Interruptflag gelöscht              
13
    data = UDR1;
14
    
15
    // Ist Puffer frei für neue Daten? 
16
    if (!uart_rx_flag) {
17
        // ja, ist Ende des Strings (RETURN) erreicht?
18
        if (data=='\r') {
19
            // ja, dann String terminieren
20
            uart_rx_buffer[uart_rx_cnt]=0;              
21
            // Flag für 'Empfangspuffer voll' setzen
22
            uart_rx_flag=1;
23
            // Zähler zurücksetzen
24
            uart_rx_cnt=0;
25
        }
26
        else if (uart_rx_cnt<(uart_buffer_size-1)) {     
27
            // Daten in Puffer speichern
28
            // aber durch if() Pufferüberlauf vermeiden
29
            uart_rx_buffer[uart_rx_cnt]=data;          
30
            uart_rx_cnt++; // Zähler erhöhen
31
        }
32
    }
33
}
34
/*******************************************************************************************************/
35
// UART TX data register empty interrupt
36
// hier werden neue Daten in das UART-Senderegister geladen
37
 
38
ISR(USART1_UDRE_vect) {
39
    // Zeiger auf Sendepuffer
40
    static char* uart_tx_p = uart_tx_buffer;    
41
    uint8_t data;
42
 
43
    // zu sendendes Zeichen lesen, 
44
    // Zeiger auf Sendepuffer erhöhen
45
    data = *uart_tx_p++;
46
    
47
    // Ende des nullterminierten Strings erreicht?
48
    if (data==0 ) {        
49
        UCSR1B &= ~(1<<UDRIE1);       // ja, dann UDRE Interrupt ausschalten        
50
        uart_tx_p = uart_tx_buffer; // Pointer zurücksetzen
51
        uart_tx_flag = 1;           // Flag setzen, Übertragung beeendet
52
    }
53
    else UDR1 = data;                // nein, Daten senden
54
}

Hat vielleicht jemand eine Idee, was da falsch sein könnte? Die zweite 
ISR habe ich ja auf die selbe Art und Weise angeglichen...

Gruss, Basti
Gast #2152102
Lesenswert?
• ▲
▼
Etwas mehr vom Code wäre gut, da ich glaube, der Fehler sitzt etwas vor 
diesem Ausschnitt, oder ganz woanders.

Übrigens, über welchen Controller reden wir hier ? ATmega8 ?
Je nach Modell sind die Registernamen anders.
Gast #2152105
Lesenswert?
• ▲
▼
>warning: 'USART_RXC_vect' appears to be a misspelled signal handler

Mmmh. Und nu? Sollen wir einen Gegen-Warnungstanz aufführen, oder was?
Korrigiere doch einfach den Fehler. Oder schreib', was das Problem ist.

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.