使用定时器提高读/写串行端口的速度
Posted
技术标签:
【中文标题】使用定时器提高读/写串行端口的速度【英文标题】:Increase speed of Read/Write Serial Port using Timers 【发布时间】:2011-10-31 11:05:11 【问题描述】:我的代码可以读取和写入用 MFC 编写的串行端口。这些程序运行良好,但有点慢,因为发生了许多操作(读取和写入)。我有一个计时器,可以在串行端口上进行操作。计时器如下:
Loop_Timer = SetTimer(1,50,0);
串口传输信息如下:
BaudRate = 57600;
ByteSize = 8;
Parity = NOPARITY;
StopBits = ONESTOPBIT;
fAbortOnError = false;
定时器启动时会发生以下读写操作:
Write(command);
Read(returned_message);
returned_message.Trim();
...
//finds a value from the returned string
...
因此,对于给定的选定选项,此读写操作可能发生 1、2、3 或 4 次。
例如:选项 1 要求上述函数在给定的计时器中发生 4 次。 选项 2 要求上述功能发生 2 次。 (因为它只有两个带返回值的变量)。 ETC ...
现在,我试图做的是提高整体操作的速度,使其稳健并快速响应。我尝试更改计时器,但它仍然很慢。有什么改进建议吗?
【问题讨论】:
【参考方案1】:您最好在单独的线程中运行实际的串行端口处理,并使用 WaitCommEvent 而不是计时器来接收传入数据。将新接收到的数据附加到该线程本地的存储缓冲区中。
如果您愿意,可以使用计时器从您的串口线程中检索数据,或者让您的串口线程与您的主应用程序通信。当收到完整的消息时。
当向串口线程发送数据时,您需要一种机制,从而将数据本地存储到串口代码并从那里传输。
要记住的是,与所有其他通信方式相比,串行端口的传输和接收速度很慢,通过访问主应用程序线程上的串行端口,您会大大降低速度,尤其是在传输数据时。
如果您发现使用 Win32 API 和串行端口直接编码很痛苦,那么this class here 我发现它非常有用。
【讨论】:
感谢克里斯的信息。会调查的。以上是关于使用定时器提高读/写串行端口的速度的主要内容,如果未能解决你的问题,请参考以下文章