首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-11-05 
非常底层的串口编程操作,遇到的不同平台间差异问题近期在实现一个外设的上位机软件,这个设备要求PC上使用

非常底层的串口编程操作,遇到的不同平台间差异问题
近期在实现一个外设的上位机软件,这个设备要求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

热点排行