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