Hier mal ein Auszug aus meinem Programm, die Überschrift sagt ja fast alles. Sehe einfach den Fehler nicht! Benutze einen ATmega128 Kann mir jemand kurzfristig helfen? /*********************************************************************** ** Function: uart_getc_wait() Purpose: Input: Returns: ************************************************************************ **/ uint8_t uart_getc_wait() { unsigned int c; do { c = uart_getc(); } while( c == UART_NO_DATA ); return (uint8_t)c; } /*********************************************************************** ** Function: void uart_gets() Purpose: get string from UART0 Input: Returns: none ************************************************************************ **/ void uart_gets( char* Buffer, uint8_t MaxLen ) { uint8_t NextChar; uint8_t StringLen = 0; NextChar = uart_getc_wait(); // Warte auf und empfange das nächste Zeichen // Sammle solange Zeichen, bis: // * entweder das String Ende Zeichen kam // * oder das aufnehmende Array voll ist while( NextChar != '^' && StringLen < MaxLen - 1 ) { *Buffer++ = NextChar; StringLen++; NextChar = uart_getc_wait(); } // Noch ein '\0' anhängen um einen Standard // C-String daraus zu machen *Buffer = '\0'; } /*********************************************************************** ** Function: uart1_getc_wait() Purpose: Input: Returns: ************************************************************************ **/ uint8_t uart1_getc_wait() { unsigned int d; do { d = uart1_getc(); } while( d == UART_NO_DATA ); return (uint8_t)d; } /*********************************************************************** ** Function: void uart1_gets() Purpose: get string from UART0 Input: Returns: none ************************************************************************ **/ void uart1_gets( char* Buffer, uint8_t MaxLen ) { uint8_t NextChar; uint8_t StringLen = 0; NextChar = uart1_getc_wait(); // Warte auf und empfange das nächste Zeichen // Sammle solange Zeichen, bis: // * entweder das String Ende Zeichen kam // * oder das aufnehmende Array voll ist while( NextChar != '^' && StringLen < MaxLen - 1 ) { *Buffer++ = NextChar; StringLen++; NextChar = uart1_getc_wait(); } // Noch ein '\0' anhängen um einen Standard // C-String daraus zu machen *Buffer = '\0'; } #endif
Der Unterschied wird in den folgenden, nicht gezeigten Funktionen liegen: c = uart_getc(); vs. d = uart1_getc(); Vermutlich lauscht uart_getc() an UART0
wo ist die funktion uart1_getc(); tippe auf fehler darin ...
Stimmt , hab ich vergessen zu schicken , hier der nachtrag! /*********************************************************************** ** Function: uart1_getc() Purpose: return byte from ringbuffer Returns: lower byte: received byte from ringbuffer higher byte: last receive error ************************************************************************ **/ unsigned int uart1_getc(void) { unsigned char tmptail; unsigned char data; if ( UART1_RxHead == UART1_RxTail ) { return UART_NO_DATA; /* no data available */ } /* calculate /store buffer index */ tmptail = (UART1_RxTail + 1) & UART_RX_BUFFER_MASK; UART1_RxTail = tmptail; /* get data from receive buffer */ data = UART1_RxBuf[tmptail]; return (UART1_LastRxError << 8) + data; }/* uart1_getc */
Und wo ist der ganze Rest? Die Interrupt-Routinen, wo die Buffer befüllt werden? Die Initialisierungen? Deklarationen der beteiligten globalen Variablen? Und informiere dich über die C-Code-Tags und Datei-Anhänge hier im Forum.
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.