关于串口编程速度的问题,代码贴出来请大家指教,分不够在加

h3w4 2005-09-08 10:08:04
我测了一下,时间主要花在以下两个子函数中。。。

DWORD WINAPI MainWorkerFunc( LPVOID lpPara )
{
UNREFERENCED_PARAMETER(lpPara);
if ( SetSerialPara() == FALSE )
return 1;

if ( EnterListenMode() == FALSE )
return 1;

while ( 1 )
{
if ( WaitInput() == FALSE )
break;

if ( ReciveCommand() == FALSE )
break;

if ( ProcessData() == FALSE )
break;

if ( SendResponse() == FALSE )
break;
};
CloseHandle( _hComm );
_hComm = NULL;
return 0;
}

BOOL WaitInput()
{
if ( !PurgeComm ( _hComm , PURGE_TXCLEAR ) )
return FALSE;
if ( !SetCommMask(_hComm, EV_RXCHAR) )
return FALSE;

DWORD dwFlag=0;
_overlapped.Internal = _overlapped.InternalHigh = _overlapped.Offset = _overlapped.OffsetHigh = 0;

if ( WaitCommEvent( _hComm, &dwFlag, &_overlapped ))
{
return TRUE;
}
return FALSE;;
}

BOOL ReciveCommand()
{
DWORD bytesRecved;
DWORD time = GetTickCount();
memset ( _bufferRead, 0, _buffer_SizeIn );
ReadFile( _hComm, _bufferRead, _buffer_SizeIn, &bytesRecved, NULL );
if ( bytesRecved == 0 )
return FALSE;

if ( PurgeComm ( _hComm , PURGE_RXCLEAR ) )
return TRUE;
}
...全文
158 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
seaquester 2005-09-13
  • 打赏
  • 举报
回复
GetTickCount 的分辨率(resolution)不太高,受限于系统时钟,你可以用 GetSystemTimeAdjustment 得到它的大概分辨率(resolution)。应该是10ms左右,对于小于分辨率(resolution)的时间间隔是测不准的。应该使用别的办法来测时间,比如:QueryPerformanceCount/QueryPerformanceFrequency 或者 RDTSC 指令。具体方法搜索一下就有一大堆。
h3w4 2005-09-12
  • 打赏
  • 举报
回复
没有的,我用GetTickCount在每个函数上进行测试,只是ReadFile和WaitCommEvent这两个
有没有人有相关经验啊,串口读写时对时间要求能够达到什么程度呢?
saliors 2005-09-10
  • 打赏
  • 举报
回复
你的程序主循环里有没有花时间比较多的操作,会不会是它拖慢了速度?
h3w4 2005-09-09
  • 打赏
  • 举报
回复
但是数据量非常少,只有一个字节,而且反映时间在5毫秒内,这个也答不到吗?
我在我的机子上测试了ReadFile的反映时间为15/16毫秒,可我感觉不应该这么慢的
h3w4 2005-09-08
  • 打赏
  • 举报
回复
在补充一句,主要是WaitCommEvent和ReadFile花的时间多,如果信号连续法的话有时候甚至ReadFile比WaitCommEvent都多,外部发送的数据量,和程序回应的数据量都是一个字节
dirdirdir3 2005-09-08
  • 打赏
  • 举报
回复
这个正常,串口操作本来就是比较慢,花在等数据和读数据的地方的时间比较多时正常的,其他操作的需要的时间不长。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧