Hallo!
Ich habe ein programmiertechnisches Problem in C:
Ich möchte Befehle, welche über USB an einen mC kommen, auslesen und
auswerten, da sie dann über RS 485 an weitere Geräte geschickt werden.
Hierzu habe ich folgende Abfrage-Routine:
1 | i = 0;
|
2 | while (i < NUM_BYTES)
|
3 | {
|
4 | if (USART_RXBufferData_Available(&USART_data))
|
5 | {
|
6 | receiveArray[i] = USART_RXBuffer_GetByte(&USART_data);
|
7 | if (receiveArray[i] == 'Q')
|
8 | {
|
9 | break;
|
10 | }
|
11 | else
|
12 | i++;
|
13 | }
|
14 | }
|
NUM_BYTES bezeichnet die Anzahl der einzulesenden Bytes (Also die Länge
des Befehls). Nun möchte ich unterschiedlich lange Befehle einlesen,
welche jeweils mit einem Zeichen (z.B Q) terminiert werden. Wird dieses
Zeichen als i-tes Element eingelesen, soll der Einlesevorgang beendet
werden.
Das Einlesenen habe ich mit obiger if-Abfrage realisiert.
Der Befehl soll dann weitergesendet werden:
1 | i=0;
|
2 | while (i<NUM_BYTES)
|
3 | {
|
4 | bool byteToBuffer;
|
5 | byteToBuffer = USART_TXBuffer_PutByte(&USART_485_data, receiveArray[i]);
|
6 |
|
7 | if(byteToBuffer)
|
8 | {
|
9 | i++;
|
10 | }
|
11 | }
|
Dss Problem ist nun, wenn ich z.B. einen Befehl mit 4 Bytes ('ABQS')
sende, dann wird zwar beim ersten Mal nur 'ABQ' weitergesendet, beim
nächsten Befehl allerdings wird das 'S' aus dem Puffer dem Befehl
vorangestellt (also z.B. 'SABQ').
Hat hier jemand einen Tipp wie ich das lösen kann?