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.