串口编程总结

1. 问题描述---在下拉菜单中显示目前可用的串口,首先是要检测连到PC上的串口个数,再者就是检测到的串口是否已经打开,若已经打开,则菜单项显示成灰色,即不可用。

 

2. 问题背景:一般PC只有一到两个串口,但是进行测试设备的时候,有一种串口线可以分出多个串口。所以有此需求。

 

3. 解决办法

   

   a. 在Windows平台下,我使用了两种办法:

   

       第一种: 对串口挨个调用CreateFile来打开进行检测, 优点:可以检测到是否已经打开. 缺点: 你不知道要枚举多少个串口号,我还不知道有没有API可以只检测个数? 对存在的串口而言,这样枚举很慢,效果就是菜单“死”在那里了。

 

       第二种: 查找注册表,可以检测到串口的个数,但是没法检测是否已经打开,优点是速度很快,菜单不会“卡住”。

 

 

   b. 在Linux平台下,直接枚举各个串口,用打开检测的方法, 缺点还是你无法知道要枚举到多少,但是速度很快,我枚举了十个串口,用时平均在0.8秒,如果用于菜单的话,基本不会出现“死”的现象。

 

4. 最终的解决方法,在Windows平台下,把前两者的优点结合在一起,用查询注册表的办法统计串口号,再用Linux下的打开方式检测是否已经使用(因为比较快)。

 

   

5.具体方法:

 

    在Cygwin下写一个检测串口的exe小程序,但是用的是Linux的API, 即轮循打开,然后在Windows下调用CreateProcess打开这个小程序,最后用GetExitCodeProcess来获取那个小程序的返回值就可以了。

 

     伪代码:

  CreateProcess("xxxxxx",   NULL,   NULL,   NULL,   FALSE,   0,   NULL,   "xxxxxxxxx",                         &si,   &pi))  
   
  WaitForSingleObject(pi.hProcess,   INFINITE);  
   
  GetExitCodeProcess(pi.hProcess,   &dwExitCode);  

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值