欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

非常底层的串口编程操作,遇到的不同平台间差异有关问题

更新时间: 2014-01-05 03:14:39 责任编辑: Author_N1

 

非常底层的串口编程操作,遇到的不同平台间差异问题
近期在实现一个外设的上位机软件,这个设备要求PC上使用非普通串口,也就是用DTR 作为时钟SCK,RTS CTS 分别为Dout、Din。

我编写完一套测试程序,大致内容如下:

int main()
{
   while(true)
   {
      for(i=0; i<12; i++) //SCK的12个周期为一次通信
      {
         //1. 拉低SCK
         //2. 跳变Dout
         //3. 拉高SCK
         //4. 读取Din
      }
      //此处处理片选CS信号
   }
   return 0;
}


就是这同一套程序,却出现了让我感到非常意外的问题:
当该程序运行于 windowsXP 系统上时,完成一次通信大约需要 200ms 的时间
运行于 windows8 系统上,完成一次通信需要 100ms 的时间
运行于 windows7 系统上,完成一次通信大约需要 500ms 的时间,居然比 XP上还慢!

对于出现的这个问题,我做出了一下假设:不同的系统间的差异,很有可能是由于 串口设置不同导致的,比如说波特率的设置等等……(这里并非是利用标准的串口,而是使用串口的4、7、8引脚自定义协议方式地进行通信的,所以不能确定这个假设的成立性)一时半会没想到什么方式,于是就按照这个假设先试一试:

     对于windows XP上的串口属性,先记录下 GetCommState(hCom, &dcb); 得到 XP 的串口属性: dcb
    在 windows7 系统上,将串口属性设成跟 windowsXP上的一模一样,(记得在程序结尾要改回来,否则程序退出时系统会直接奔溃,本人已经领教过了厉害了,各位勿重蹈覆辙……)
     这样做了之后,然而结果是,传输速率并没有因此改变,由此,我认为这个速率差异跟这个标准串口速率设置无关。所以就没有继续设置什么超时等等了……
     
     请教各位前辈和网友,这种问题是什么愿意导致的?
     先谢谢给位!
--参考方法--
这个时间差异可能和OS的时间片有关,你提高下进程的优先级看看
--参考方法--
PC端不熟悉,只找到个MFC下如何提高的帖子
http://bbs.csdn.net/topics/50469904
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:39
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20001/
本文WWW.DOC100.NET DOC100.NET版权所有。