今天调一个串口函数,出现这么一个问题
下面是调用过程,GetCmd函数返回0,1,2,3.但是发现返回时候一直不对,本应该直接进入2,但是老是有时候进入1.查了一下,原来是GetCmd的函数返回有问题。
iRetVal = GetCmd(acCityName, sizeof(acCityName));switch(iRetVal)
{
case 0:
break;
case 1:
cmd2Json(acCityName);
break;
case 2:
osi_LockObjLock(&pSysStateLock, OSI_WAIT_FOREVER);
sState.isDataChange |= 0x04;
osi_LockObjUnlock(&pSysStateLock);
break;
default:
break;
}
如下所示,这个函数因为是串口接收函数,没有的话会在while(!UARTCharsAvail(UARTA0_BASE));挂起,但是接收数据的话会一个一个的接受,结果我最后的那个红色的return 0没有写,结果这个函数自动将return数返回了1,导致了错误。
int GetCmd(char *pcBuffer, unsigned int uiBufLen)
{int iLen = 0;
while(!UARTCharsAvail(UARTA0_BASE));
*RxdBuf.head= MAP_UARTCharGet(CONSOLE);
MAP_UARTCharPut(CONSOLE, *RxdBuf.head);
RxdBuf.head++;
if( (RxdBuf.head - RxdBuf.tail) == NUM_COMM )
{
if( RxdBuf.frame == FRAME_HEADER )
{
return 1;
}
else if( (RxdBuf.frame == FRAME_CTRL1) && (RxdBuf.data[0] == FRAME_CTRL2) )
{
return 2;
}
else
{
return 0;
}
}
return 0;
}