2008年9月10日 星期三

Com Receive Function

除了工作之外,大學的某個實驗課也寫過簡單的rs232通訊程式,後來因為USB與LAN等等介面的發展成熟,已經越來越少電子產品有console port了,甚至有些新的主機板上面已經沒有這個介面了...Orz。

但是在產品測試的階段,卻常常還是需要用到這個介面,我想大概是因為console介面的特性:簡單,設定少,問題比較單純(至少是不用裝driver或設定ip)。

最近在進行的一個案子,就是需要經由console來進行測試,在之前我比較少使用這種方式,所以感覺寫起來並不是那麼的friendly....

今天與同事討論了一下,發現我的Com port接收的動作不太理想,參考同事的code修改了一下:

原本的function:

bool COM_Recv(int com, char *resp, int timeout)
{
int i, len=0;
char buf[MAX_STRLEN]="";

for(i=0; i
0)
break;

Sleep(100);
}

if(len>0)
{
memset(resp, 0, sizeof(resp));
sio_read(com, buf, sizeof(buf));
sprintf(resp, "%s", buf);
return true;
}
else
return false;
}


修改成:

bool COM_Recv(int com, char *resp, int timeout)
{
int i, len = 0;
char buf[500];

memset(buf, 0, sizeof(buf));
resp[0]=0;

for(i=0; i0)
{
sio_read(com, buf, sizeof(buf));
strcat(resp, buf);
if (strstr(resp,"->") != NULL)
return true;
}
Sleep(100);
}
return false;
}

這樣一來就不用刻意為了com port的接收寫迴圈,當我接收到我指定的字元後,才完成一次的接收動作。

沒有留言: