串口写“ReadIntervalTimeout”挂起

时间:2013-11-29 10:56:07

标签: c file-io serial-port

我正在编写一个代码来从串口读取几个字节并异步写入同一个端口。发送代码在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);
  }

0 个答案:

没有答案