win32串口读写多线程同步

在Win32环境下,串口操作如CreateFile、ReadFile、WriteFile在多线程中需处理同步问题,因为串口资源一次只能被一个线程占用。通过使用信号量和CRITICAL_SECTION实现同步,如UartOpen、UartSend、UartRecv、UartClose等函数的调用。串口接收线程通过EnterUART和LeaveUART确保不发生数据冲突,发送时同样进行同步控制。
摘要由CSDN通过智能技术生成

在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");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值