发现个很奇怪的现象。串口收数据时,不管一次来了多少个字节,只要是超过8个字节的就会给截成几段,按照8个字节一组的方式,比如接收15bytes,就是8+7,每次都这样,但是写入时,是多少个字节就一次性写入多少个字节。不知道什么原因?我用的不是控件,是ReadFile函数哈、有知道什么原因的吗?

解决方案 »

  1.   

    你ReadFile、超时设置、以及串口是如何打开的?检测过串口事件吗。这些不清楚 不好说原因
      

  2.   

    你ReadFile的DWORD nNumberOfBytesToRead是不是设置成8了
      

  3.   

    楼主上代码,BOOL WINAPI ReadFile(
      _In_         HANDLE hFile,
      _Out_        LPVOID lpBuffer,
      _In_         DWORD nNumberOfBytesToRead,
      _Out_opt_    LPDWORD lpNumberOfBytesRead,
      _Inout_opt_  LPOVERLAPPED lpOverlapped);
    想看看你怎么填写的
      

  4.   

    [b]和代码完全没有关系,是读取的comstat->cbInQue个字节。
    这里是我的程序和串口调试助手读写操作的结果截图,可以看到都是始终按照每8个字节一组被分割了。但是写操作却没有被分割我想知道,这个8个字节一组的属性是从哪里来的?
      

  5.   

    1. 如果不是你在ReadFile中指定收8字节的话,我猜测这应该与串口驱动有关,RS-232串口硬件模块16550中有16字节的接收FIFO缓冲。驱动程序可设置收几个字节后发硬件中断。通常设8个比较好。---没人能看到微软的源码。
    2. 发送是另外一回事,是被操作系统缓冲了。
      

  6.   

    你的下位机是单片机,so that is her style