Wenn ich zum Beispiel AT\r zum GSM Modul schicken will mache ich
folgendes!
const char gsm_at_check[] ={"at\r"};
ich verwende diese Funktion:
put_gsm_cmd(gsm_at_check,gsm_cmd,gsm_result,MaxLen);
1 | void wait_until_r()
|
2 | {
|
3 | unsigned int c=0;
|
4 | while(c!='\r')
|
5 | {
|
6 | c=uart_getc();
|
7 | }
|
8 | }
|
9 | void wait_until_n()
|
10 | {
|
11 | unsigned int c=0;
|
12 | while(c!='\n')
|
13 | {
|
14 | c=uart_getc();
|
15 | }
|
16 | }
|
17 | void put_gsm_cmd(const char *gsm_net_check,char *gsm_cmd, char *gsm_result, uint8_t MaxLen)
|
18 | {
|
19 | uart_puts(gsm_net_check);
|
20 | uart_gets_r( gsm_cmd,MaxLen);
|
21 | wait_until_r();
|
22 | wait_until_n();
|
23 | uart_gets_r( gsm_result,MaxLen);
|
24 | wait_until_n();
|
25 |
|
26 | uart1_puts(gsm_cmd); // hier gebe ich es an der anderen Uart aus
|
27 | uart1_puts(gsm_result);
|
28 | }
|
Als Antwort vom GSM Modul erhält man <\r><\n>Code<\r><\n>
Kann es sein, dass durch den Interrupt ein einzelnes Zeichen Verloren
gehen kann? Also dass dies eine schlechte Lösung ist. Wäre es besser
z.B. zuserst bis zum K vom OK zu warten? Aber dann würde das Programm
schon weiterlaufen obwohl noch ein Zeichen über die UART gesendet wird,
das könnte dann doch spätere Komplikationen mit sich bringen!