用单片机和PC进行长文件传输:其中串口除简单的3线相连外RTS和CTS相连。问题:
1,如果执行了WriteFile还没有把需要写的数据写完,这是单片机的RTS置位,不让PC传输了,这时的WriteFile会返回吗?
2,PC端响应CTS有些什么函数?谢谢

解决方案 »

  1.   

    1,如果执行了WriteFile还没有把需要写的数据写完,这是单片机的RTS置位,不让PC传输了,这时的WriteFile会返回吗?
    =============================================================
    首先RTS应该表示通知对方发送数据(当然你要定义为停止发送数据也行,比如低电平停止发送数据),RTS和你的程序协议有关,和WriteFile没有任何关系,WriteFile不会受到RTS的任何影响,因此你必须在调用WriteFile之前判断CTS信号,然后来计算怎样去调用WriteFile
    2,PC端响应CTS有些什么函数?
    =============================================================
    开一单独的监控串口的线程在里面使用WaitCommEvent可以等待到CTS信号
    WaitCommEvent
    The WaitCommEvent function waits for an event to occur for a specified communications device. The set of events that are monitored by this function is contained in the event mask associated with the device handle. BOOL WaitCommEvent(
      HANDLE hFile,                // handle to comm device
      LPDWORD lpEvtMask,           // event type
      LPOVERLAPPED lpOverlapped,   // overlapped structure
    );
    Parameters
    hFile 
    [in] Handle to the communications device. The CreateFile function returns this handle. 
    lpEvtMask 
    [out] Pointer to a variable that receives a mask indicating the type of event that occurred. If an error occurs, the value is zero; otherwise, it is one of the following values. Value Meaning 
    EV_BREAK A break was detected on input. 
    EV_CTS The CTS (clear-to-send) signal changed state. 
    EV_DSR The DSR (data-set-ready) signal changed state. 
    EV_ERR A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. 
    EV_RING A ring indicator was detected. 
    EV_RLSD The RLSD (receive-line-signal-detect) signal changed state. 
    EV_RXCHAR A character was received and placed in the input buffer. 
    EV_RXFLAG The event character was received and placed in the input buffer. The event character is specified in the device's DCB structure, which is applied to a serial port by using the SetCommState function. 
    EV_TXEMPTY The last character in the output buffer was sent. 
    lpOverlapped 
    [in] Pointer to an OVERLAPPED structure. This structure is required if hFile was opened with FILE_FLAG_OVERLAPPED. 
    If hFile was opened with FILE_FLAG_OVERLAPPED, the lpOverlapped parameter must not be NULL. It must point to a valid OVERLAPPED structure. If hFile was opened with FILE_FLAG_OVERLAPPED and lpOverlapped is NULL, the function can incorrectly report that the operation is complete. If hFile was opened with FILE_FLAG_OVERLAPPED and lpOverlapped is not NULL, WaitCommEvent is performed as an overlapped operation. In this case, the OVERLAPPED structure must contain a handle to a manual-reset event object (created by using the CreateEvent function). If hFile was not opened with FILE_FLAG_OVERLAPPED, WaitCommEvent does not return until one of the specified events or an error occurs. Return Values
    If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError. Res
    The WaitCommEvent function monitors a set of events for a specified communications resource. To set and query the current event mask of a communications resource, use the SetCommMask and GetCommMask functions. If the overlapped operation cannot be completed immediately, the function returns FALSE and the GetLastError function returns ERROR_IO_PENDING, indicating that the operation is executing in the background. When this happens, the system sets the hEvent member of the OVERLAPPED structure to the not-signaled state before WaitCommEvent returns, and then it sets it to the signaled state when one of the specified events or an error occurs. The calling process can use one of the wait functions to determine the event object's state and then use the GetOverlappedResult function to determine the results of the WaitCommEvent operation. GetOverlappedResult reports the success or failure of the operation, and the variable pointed to by the lpEvtMask parameter is set to indicate the event that occurred. If a process attempts to change the device handle's event mask by using the SetCommMask function while an overlapped WaitCommEvent operation is in progress, WaitCommEvent returns immediately. The variable pointed to by the lpEvtMask parameter is set to zero. Example Code
    For an example, see Monitoring Communications Events. Requirements 
      Windows NT/2000/XP: Included in Windows NT 3.1 and later.
      Windows 95/98/Me: Included in Windows 95 and later.
      Header: Declared in Winbase.h; include Windows.h.
      Library: Use Kernel32.lib.See Also
    Communications Resources Overview, Communications Functions, CreateFile, DCB, GetCommMask, GetOverlappedResult, OVERLAPPED, SetCommMask, SetCommState