我的代码是一个中断,它读的是。当字符数大于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
}
1条答案
按热度按时间bbmckpt71#
strcpy(Rec,Rx)
期望Rx
包含 * 字符串 *。Rx[i]=uart_getc(uart0);
不一定会分配一个 *null字符 *,因此strcpy()
调用是UB。也许使用
memcpy(Rec, Rx, 4);
,但需要看到更大的代码,以获得更好的答案。