Hallo, ich arbeite mit dem AVR-Atmega256RFR2 und möchte den rxBuffer in einen String übertragen. HAL_ReadUsart(&usart_descriptor, read_buf , read_len); Die Funktion HAL_ReadUsart liest nur aus, wenn etwas im Puffer steht, gibt aber keinen ganzen String aus. Hat jemand eine Idee, wie ich das ganze in einen zusammenhängenden String kriege?
J. S. schrieb: > Hallo, > ich arbeite mit dem AVR-Atmega256RFR2 und möchte den rxBuffer in einen > String übertragen. > > HAL_ReadUsart(&usart_descriptor, read_buf , read_len); > > Die Funktion HAL_ReadUsart liest nur aus, wenn etwas im Puffer steht, > gibt aber keinen ganzen String aus. Hat jemand eine Idee, wie ich das > ganze in einen zusammenhängenden String kriege? Indem du mehrmals die Funktion aufrufst und die Einzelteile zusammensetzt, solange bis du an den Daten erkennen kannst, dass der "String" jetzt komplett ist.
Dies ist die Read-Confirm-Funktion, die mir den Puffer ausgibt:
1 | static void uart_read_confirm(uint16_t read_len) { |
2 | |
3 | HAL_StartAppTimer(&read_timer); |
4 | start_read_timer = false; |
5 | memset(read_buf, 0, READ_BUF_SIZE); |
6 | HAL_ReadUsart(&usart_descriptor, read_buf , read_len); |
7 | appWriteDataToUsart(read_buf,read_len); |
8 | (void)read_len; |
9 | }
|
Mit der folgenden Funktion versuche ich, das ganze in einem String zusammenzusetzen und mit einem bestimmten String zu vergleichen:
1 | static void uart_read_confirm(uint16_t read_len) { |
2 | |
3 | //appWriteDataToUsart((uint8_t*)"uart_read_confirm\r\n", sizeof("uart_read_confirm\r\n")-1);
|
4 | HAL_StartAppTimer(&read_timer); |
5 | start_read_timer = false; |
6 | memset(read_buf, 0, READ_BUF_SIZE); |
7 | |
8 | |
9 | |
10 | |
11 | while(HAL_ReadUsart(&usart_descriptor, read_buf , read_len)){ |
12 | for (i=0;i<read_len;i++) |
13 | {
|
14 | rcvstring[j++]=read_buf[i]; |
15 | }
|
16 | |
17 | }
|
18 | |
19 | appWriteDataToUsart(read_buf,read_len); |
20 | if (strcmp( (char*)(rcvstring), "expectedString") == 0) { |
21 | //BSP_OnLed(LED_RED);
|
22 | appstate = APPSTATE_NEXT; |
23 | j='\0'; |
24 | appWriteDataToUsart(rcvstring,j); |
25 | j=0; |
26 | memset( (char*)rcvstring, '\0', sizeof(rcvstring) ); |
27 | SYS_PostTask(APL_TASK_ID); |
28 | }
|
29 | |
30 | (void)read_len; |
31 | }
|
Bisher klappt das noch nicht so ganz :(
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.