各位大佬好!
我C语言功底很弱,昨日随便写了一个非常简单的小玩意,但是BUG满天飞,无奈之下来当伸手党。。。请各位不吝赐教!
功能:1、系统运行后等待PC机通过UART传输一组字符串,与系统预设字符串进行比较(此处预设为“I have gifts” 事实证明我并没有天赋)
2、如果是输入正确的”I have gifts“,则MCU会打印出“输入正确”
3、如果输入错误,则打印出“再次输入”字样,然后再次通过串口重新输入字符,超过3次打印“输入错误”然后结束运行
注意:
1、字符串的长度是规定好的,也就是说我现在通过串口必须发”I have gifts“一样长度的
2、忽略某些长度上的bug,比如输入”I have giftssssssssssssssssssssssssssssssssssssss“仍然会判断正确等
当前问题:
1、输入正确的指令后,系统会正确运行。
2、输入错误的指令后,系统会正确运行。
3、如果第一次输入错误的指令,会提示重新输入,但是第二次及第三次输入正确的指令后仍然判断是错误。
我的程序如下:
#include "common.h"
#include "rtc.h"
#include "uart.h"
#include "sysinit.h"
int main (void)
{
uint8_t UART_RX_BUF[]={0};//接收数组,UART接收到的数据直接放入该数组中
uint8_t t;
uint8_t times=3;
uint8_t rx_buf[]="I have gifts";//预设数组
uint8_t flag=2;
sysinit();
SIM->PINSEL1 |= SIM_PINSEL1_UART1PS_MASK;
UART_ConfigType sConfig;
sConfig.u32SysClkHz = BUS_CLK_HZ;
sConfig.u32Baudrate = UART_PRINT_BITRATE;
printf("\n系统已经运行\n");
printf("\n请输入12位预设数组\n") ;
loop: times--; //times为了保证函数可以从goto loop中跳出而不是死循环,从3开始递减
printf("\n以下为输入内容\n");
UART_ReceiveWait(UART1,UART_RX_BUF,12);//将UART接收到的内容放入此数组中
delay_ms(500);
UART_SendWait(UART1,UART_RX_BUF,12);//将收到的内容发送出去
printf("\n以下为判断\n");
for(t=0;t<12;t++)
{
if(UART_RX_BUF[t] == rx_buf[t])//判断接收到的数据是否和预设相同
{
flag=1;
}
else
{
if(times == 0)//判断goto loop 执行次数,若goto loop执行次数耗尽则直接置位flag
{
flag=0;
}
else//若goto loop执行次数没有耗尽,则执行goto loop
{
printf("\n请再次尝试输入\n");
for(t=0;t<12;t++)
{UART_RX_BUF[t]=0;//清空接收数组内容
goto loop; //跳转
}
}
}
switch(flag)
{
case 1: printf("\n输入正确\n");flag=2;break;
case 0: printf("\n输入错误\n");flag=2;break;
default : break;
}
printf("\n系统运行完毕\n");
while(1);
}
以下是出错图:
大家请看:第一次输入的是:“I have giftt”所以错了
第二次到第三次输入的“I have gifts“但是收到的并不是这个,发生了偏移,乃至第三次收到的“s”都跑前面了。。
我隐隐约约感觉是数组可能存在某种越界。。。。。但是奈何才疏学浅,请各位大佬指点一二,谢谢!!
|