
解决方法:
解决的思路是将写串口事件(m_hWriteEvent)的优先级高于接收事件(m_ov.hEvent),如下:
BOOL CSerialPort::InitPort(......){
......
m_hEventArray[0] = m_hShutdownEvent// highest priority
m_hEventArray[1] = m_hWriteEvent
m_hEventArray[2] = m_ov.hEvent
......
}
UINT CSerialPort::CommThread(LPVOID pParam){
......
switch (Event)
{
case 0:
{
......
}
case 2:
{
memset(&comstat, 0, sizeof(COMSTAT))
GetCommMask(port->m_hComm, &CommEvent)
if (CommEvent &EV_RXCHAR)//接收到字符,并置于输入缓冲区中
// Receive character event from port.
ReceiveChar(port, comstat)
......
break
}
case 1: /// write event发送数据
{
// Write character event from port
WriteChar(port)
break
}
default:
{
......
}
......
}
可以选COM1和COM2。1、安装好VSPD后,首先选择你要虚拟的端口号,点击“添加端口”。一般现在的笔记本电脑都没有串口,所以可以选COM1和COM2。2、虚拟好端口后,左侧能看到新虚拟出的COM1和COM
2,此时两个端口应该都没有被占用,处于停用状态。
3、打开串口调试助手,设置COM1的波特率、奇偶校验位、数据位、停止位等参数,同时确保COM2是未占用状态。我们这样设置,是为了让COM1负责发送数据,COM2负责接收数据。如果COM2也被占用,那么你的程序就无法使用这个端口了。
4、在图中方框位置填入你要模拟的数据,然后点击“自动发送”,这时你应该看到进度条不断前进,而VSPD的COM1的Sent数据不断增长,说明串口调试助手正不断通过COM1发送数据。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)