C语言 当接收到超过4个字符时,该函数被调用两次

ozxc1zmp  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(101)

我的代码是一个中断,它读的是。当字符数大于4时,data_processing被调用两次。当后台任务每100毫秒轮询一次时,data_processing可以处理整个字符串,但如果我改为continuos循环,就会出现这个问题。我如何传递整个字符串?

void UART_Rx(){
     //The led on PICO blinks when it receives data.

    irq_clear(UART0_IRQ);
    char Rx[4]="";
    /*Process the received signal from UART Rx*/
    int i=0;
    while (uart_is_readable(uart0)&&i<4){
        Rx[i]=uart_getc(uart0);
        if(Rx[i]=='>'){
            break;
        }
        i++ ;
        /*if((Rx[i]==' ')){
            printf("This is a test");
        }
        if(Rx[i]!=' '||Rx[i]!='\n'||Rx[i]!='\r'){
            if (Rx[i]=='>'){
            gpio_put(LED_PIN, 1);//for indication
            gpio_put(LED_PIN, 0);
            strcpy(Rec,Rx);
            uart_puts(uart0,Rx);
            uart_puts(uart0,Rec);
            data_processing(Rx);
            memset(Rx,0,strlen(Rx));
            memset(Rec,0,strlen(Rec));
            i=-1;
        }
            i++;
        }
      */

    }
    busy_wait_ms(10);
    data_processing(Rx);
    strcpy(Rec,Rx);
}
void data_processing(char *Rx){

process data
}
bbmckpt7

bbmckpt71#

strcpy(Rec,Rx)期望Rx包含 * 字符串 *。Rx[i]=uart_getc(uart0);不一定会分配一个 *null字符 *,因此strcpy()调用是UB。
也许使用memcpy(Rec, Rx, 4);,但需要看到更大的代码,以获得更好的答案。

相关问题