在Win32下进行串口的操作时,会用到CreateFile、ReadFile、Writefile等几个函数,其中涉及串口的同步模式和异步模式,
在单线程时使用同步模式和异步模式没有太大的关系,都可以很好的使用。但是在多线程中进行读写就需要考虑串口资源的
同步问题了,以为windows下串口资源同时只能被一个线程占用,读写同时进行会导致程序锁死,因此可以使用信号量进行同步控制。
例如,封装之后的串口操作函数为:UartOpen、UartSend、UartRecv、UartClose
串口接收为一个单独的线程,接收到数据之后进行处理
那么在调用UartSend 和 UartRecv 前后要进行同步
CRITICAL_SECTION UART_mutex;
InitializeCriticalSection(&UART_mutex);
EnterCriticalSection(&UART_mutex);
LeaveCriticalSection(&UART_mutex);
DeleteCriticalSection(&UART_mutex);
串口接收
while(((CANPort*)port)->used)
{
EnterUART(); //printf("recvive wait\n");
res = Receive();
LeaveUART(); //printf("recvive leave \n");
}
串口发送:
EnterUART(); //printf("send wait\n");
res = canSend();
LeaveUART(); //printf("send leave\n");