Frage in der main ein Flag (cmdRcvd) in einer Schleife ab und setze es
danach wieder auf 0.
1 | (....)
|
2 |
|
3 | while(1)
|
4 | {
|
5 | if (cmdRcvd) {
|
6 | print(cmdBuffer);
|
7 | print("\n");
|
8 | cmdRcvd=0;
|
9 | }
|
Das Flag wird in der ISR gesetzt, wenn ein bestimmter Befehl über RS232
eingegangen ist:
1 | while (!XUartLite_mIsReceiveEmpty(XPAR_RS232_BASEADDR))
|
2 | {
|
3 | do
|
4 | {
|
5 | s[i] = XUartLite_RecvByte(XPAR_RS232_BASEADDR);
|
6 | i++;
|
7 | }
|
8 | while (s[i-1]!='\r');
|
9 | s[i]='\0';
|
10 | cmdRcvd=1;
|
Jetzt könnte es ja aber sein, dass ein UART-Interrupt in der main z.B.
bei der Anweisung print ("\n") auftritt. Dadurch würde dann zunächst das
Flag gesetzt, wenn der Prozessor zurück springt und an der letzten
Stelle weiter macht wird es aber gelöscht. Somit findet im nächsten
Schleifendurchlauf keine Verarbeitung des Strings statt.
Wie kann man das lösen?