Hallo zusammen,
Mit folgenden Funktionen sende ich Strings über UART. Nach dem ~50-150
Mal hängt sich der gesamte Controller auf, bis weitere Daten kommen.
Könnte dies an den Funktionen liegen?
Empfangen:
1 | uint8_t UART_getc(void)
|
2 | {
|
3 | while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar
|
4 | ;
|
5 | return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben
|
6 | }
|
7 |
|
8 | uint8_t UART_gets(char* buffer, uint8_t maxLength)
|
9 | {
|
10 | uint8_t index = 0;
|
11 |
|
12 | while ( ( buffer[index] = UART_getc() ) != '\0' && index < maxLength )
|
13 | {
|
14 | index++;
|
15 | }
|
16 | buffer[index] = '\0';
|
17 |
|
18 | // bytes read
|
19 | return index;
|
20 | }
|
Senden:
1 | void UART_putchar(char z) // Zeichen in UART Ausgang geben
|
2 | {
|
3 | while ( !(UCSRA & (1<<UDRE)) ) // Warte bis UART Ausgang frei
|
4 | ;
|
5 | UDR = z;
|
6 | }
|
7 |
|
8 | void UART_puts(char *s) // Zeichenkette (String) in UART Ausgang geben
|
9 | {
|
10 | while ( *s )
|
11 | {
|
12 | UART_putchar(*s);
|
13 | s++;
|
14 | }
|
15 | UART_putchar('\0');
|
16 | }
|
Vielen Dank im Vorraus
Gruß Jonas