我正在编写一个代码来从串口读取几个字节并异步写入同一个端口。发送代码在main()中连续运行,我开始一个新线程从中读取。最初我遇到了从连接到串口的硬件设备读取帧的问题。问题是因为两个字节之间的readFile()超时设置为MAXDWORD。所以,我收到了不完整的字节。所以我将ReadIntervalTimeout = MAXDWORD更改为ReadIntervalTimeout = 20。然后接收全帧工作。但是,发送字节就是悬而未决。 我知道读写串口是完全独立的。或者不是吗?该文件配置为非重叠(设置为0)如果需要更多详细信息,请告诉我。
1)这些是COMMTIMEOUTS设置
Cptimeouts.ReadIntervalTimeout = MAXDWORD; //changed to 20 for a gap of 20ms
Cptimeouts.ReadTotalTimeoutMultiplier = 0;
Cptimeouts.ReadTotalTimeoutConstant = 0;
Cptimeouts.WriteTotalTimeoutMultiplier = 0;
Cptimeouts.WriteTotalTimeoutConstant = 0;
2)这是在main()
中运行的send()while(1)
{
int RS232_SendBuf(int comport_number, unsigned char *buf, int size)
{
int n;
if(WriteFile(Cport[comport_number], buf, size, (LPDWORD)((void *)&n), NULL))
{
return(n);
}
return(-1);
}
}
3)这是receive(),在不同的线程中连续运行(轮询)
int RS232_PollComport(int comport_number, unsigned char *buf, int size)
{
int n;
if(size>4096) size = 4096;
/* added the void pointer cast, otherwise gcc will complain about */
/* "warning: dereferencing type-punned pointer will break strict aliasing rules" */
ReadFile(Cport[comport_number], buf, size, (LPDWORD)((void *)&n), NULL);
return(n);
}