昨天写个串口接收数据的函数,这个函数是用来等待和检查响应的,代码如下:
u8 CheckAck(char *str)
{
u8 i,retry=10,res=0;
u8 test;
u8 len1,len2;
while(retry--)
{
for(i=0;i<10;i++)
{
if(USART_RX_STA&0x8000) break;
Delay_ms(5);
}
if(USART_RX_STA&0x8000)
{
len1=strlen(str);
len2=strlen((const char*)USART_RX_BUF);
test=strcmp(str,(const char*)USART_RX_BUF);
if(test==0)
{
res=1;
break;
}
}
}
USART_RX_STA=0;
Clear_Buffer();
return res;
}
len1=strlen(str)和len2=strlen((const char*)USART_RX_BUF)是我为了调试加进去的。在函数中调用如下:
if(CheckAck("MLDP"))
mldp_flag=1;
else
return 0;
我在函数中调用这个函数用于检查是否进入数据传输模式。却总是得不到正确的答案(即便响应是正确的)。用仿真器调试时发现当"MLDP"传进去时str的长度为len1=3,而接收缓存数组USART_RX_BUF[200]中的内容也确实是"MLDP"(除了这几个字符后面全是0x00),但是它的长度len2=4,所以strcmp()比较的结果就一直不为0了。请问有谁知道这是怎么回事吗?为什么"MLDP"传进去长度变了?更奇怪的是我检查其他响应的时候没问题,其他字符串长度都是对的,比较结果也是正确的,唯独传"MLDP"进去出问题了
|