Meine Frage ich benutze momentan den code aus dem Tutorium um einen String über Uart zu empfangen. Jetzt möchte ich aber von meinem GSM-Modem über AT befehle die "OK"'s empfangen, diese werden jedoch angeführt vom befehl das man gesendet hat (quasi ECHO) und zusätzlich noch so ein paar \r und \n hier mal ein beispiel: ich sende den befehl: at\r Antwort: at\r\r\nOK\r\n das führt natürlich zum abruch des string empfanges. Wie könnte ich den folgenden Code ändern das er wartet bis alles vom gsm-modem empfangen wurde???? und ggf. nach einer gewissen zeit (ok mit einem timer/counter) abgebrochen wird.
1 | int usart0_getc(void) |
2 | {
|
3 | while (!(UCSR0A & (1<<RXC))); //Warten bis Zeichen verfügbar |
4 | return UDR0; //Zeichen aus UDR an Aufrufer zurückgeben |
5 | }
|
6 | |
7 | void usart0_gets(char* Buffer, int MaxLen) |
8 | {
|
9 | int NextChar; |
10 | int StringLen = 0; |
11 | |
12 | NextChar = usart0_getc(); //Warte auf und empfange das nächste Zeichen |
13 | //Sammle solange Zeichen, bis:
|
14 | // * entweder das String Ende Zeichen kam
|
15 | // * oder das aufnehmende Array voll ist
|
16 | while(NextChar != '\r' && StringLen < MaxLen - 1) |
17 | {
|
18 | *Buffer++ = NextChar; |
19 | printf("%c",NextChar); |
20 | StringLen++; |
21 | NextChar = usart0_getc(); |
22 | }
|
23 | |
24 | //Noch ein '\0' anhängen um einen Standard
|
25 | //C-String daraus zu machen
|
26 | *Buffer = '\0'; |
27 | }
|