mit HAL_ReadUsart in einen String schreiben

OP #4215515
Lesenswert?
• ▲
▼
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?
#4215532
Lesenswert?
• ▲
▼
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.
OP #4215618
Lesenswert?
• ▲
▼
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 :(

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.