实现Com端口终端的最简单方法。(Windows,C)
我需要编写一个终端来与COM端口通信,并且我需要能够从COM端口以及同时从控制台发送命令。 (我想通过两个相互无线通信的传感器节点访问计算机,因此我仍然需要一种从节点向计算机发送信息的方法) 现在,我已经实现了非重叠串行通信,但我不确定如何实现“同时发送和接收”部分,我只有大约4天的时间来解决这个问题。这里并没有太多的信息,所以我欢迎任何关于如何实现这种最快或最简单的方法的建议 就我所见,重叠I/O通信对时间不太友好。 是否可以使用多线程(仅重叠)执行此操作?实现Com端口终端的最简单方法。(Windows,C),c,windows,serial-port,C,Windows,Serial Port,我需要编写一个终端来与COM端口通信,并且我需要能够从COM端口以及同时从控制台发送命令。 (我想通过两个相互无线通信的传感器节点访问计算机,因此我仍然需要一种从节点向计算机发送信息的方法) 现在,我已经实现了非重叠串行通信,但我不确定如何实现“同时发送和接收”部分,我只有大约4天的时间来解决这个问题。这里并没有太多的信息,所以我欢迎任何关于如何实现这种最快或最简单的方法的建议 就我所见,重叠I/O通信对时间不太友好。 是否可以使用多线程(仅重叠)执行此操作? 我猜在这种情况下,我必须每隔几毫秒
我猜在这种情况下,我必须每隔几毫秒读取一次缓冲区,并为输入创建一个自己的线程?是否使用重叠I/O并不是真正的问题:重叠只是为程序腾出一些时间。我写过很多这样的程序,结论总是使用一个线程来处理所有COM例程。只要线程空闲地执行WaitForMultipleObjects(),该线程调用重叠方法还是同步方法就不那么重要了 我最近编写COM终端的方式如下(伪): 当然,这是一个过于简化的问题,因为您需要打开/关闭COM端口、数据洗牌等各种功能。可能需要几个功能
如果不是公司财产,我会分享真实的、有效的生产代码:(4天似乎有点乐观,从我的项目日志来看,我花了几个月的时间开发了一个工作的COM端口终端,使其达到生产质量水平。仅COM端口驱动程序就在1k loc左右,到处都是Win API调用。非常感谢您的快速回答。我只需要一些东西来传输几KB的数据(图片)也许还有一些命令。我想,我必须尽可能地简化这个过程,并以一种只接收数据而我不能输入任何东西的模式进行构建(它应该是远程控制的)这是一个短期暑期学校项目的一部分,我告诉我的导师,建造一个航站楼太多了,但无论如何,非常感谢,这证实了我的观点,这是“一点”如果你的程序除了串行通信没有做很多其他的事情,那么这个项目就容易多了,因为你可以不用线程或者重叠的I/O。
thread()
{
while not kill the thread event
{
WaitForMultipleObjects (open port, close port, kill the thread event)
if (open port)
{
send();
receive();
wait_for_send_and_receive();
}
}
}
send()
{
take COM_port mutex
if(there is something to send)
{
copy send_data to local_data, protect this with mutex
WriteFileEx(COM_port,
local_data,
size,
some_overlapped_struct_stuff);
handle errors
}
release COM_port mutex
}
receive()
{
take COM_port mutex
ReadFileEx(COM_port, ...);
handle errors
release COM_port mutex
}
wait_for_send_and_receive()
{
WaitForMultipleObjects (open port,
close port,
kill the thread event,
send done event from send callback routine (overlapped I/O),
receive done event from receive callback routine (overlapped I/O)
);
}