请问如何用vc采用api实现同步串行通讯,急!

shenspring 宝信软件 技术总监/研发总监  2005-03-17 08:02:53
想在xp系统下运行,如果能给源码就最好了。另外,不知道xp下能不能在同步串行通讯下同时进行数据的收发。
...全文
72 点赞 收藏 10
写回复
10 条回复
shenspring 2005年03月19日
我在写同步串行通讯的时候碰到了一个奇怪的问题,就是当我向串口发送数据时,采用的是api中的writeFile函数,每次写一个,比如在10400波特率下发送:
DWORD byteSent;
char ch[1];
ch[0] = 0x55;
writeFile(m_hComm, ch, 1, &byteSent, NULL);
writeFile(m_hComm, ch, 1, &byteSent, NULL);
writeFile(m_hComm, ch, 1, &byteSent, NULL);
writeFile(m_hComm, ch, 1, &byteSent, NULL);
这样发送四次,我用CPU频率计时时,发现这4条指令的执行时间分别为:
0.049ms,5.5ms,1.47ms,6.9ms,事实上我是想连续发送4个字节,结果
发现好像好多都超过该波特率下的规定时间了,不知道是怎么回事。
回复 点赞
oyljerry 2005年03月18日
同步方式数据发送完了,就会返回,就认为发送出去了
回复 点赞
nuaawenlin 2005年03月18日
同步方式照样可以使用多线程

同步方式下,数据发送完毕,返回。即证明串口已经成功向外发送数据

异步方式下,有投递的OVERLAPPED结构的事件来判断,数据发送是否完成。
回复 点赞
shenspring 2005年03月17日
另外,我用串口向外发送数据,怎么知道已经发送出去了呢?也就说怎么查询输出缓冲区是否为空
回复 点赞
shenspring 2005年03月17日
那是不是同步通讯方式就不能用多线程了?那么比如我发一个数据出去,然后就不停地论询输入缓冲区是否有数据?
回复 点赞
oyljerry 2005年03月17日
串口读写操作:串口读写有两种方式:同步方式(NonOverlapped)和异步方式(Overlapped)。同步方式是指必须完成了读写操作,函数才返回,这可能造成程序死掉,因为如果在读写时发生了错误,永远不返回就会出错,可能线程将永远等待在那儿。而异步方式则灵活得多,一旦读写不成功,就将读写挂起,函数直接返回,可以通过GetLastError函数得知读写未成功的原因
回复 点赞
Kudeet 2005年03月17日
http://search.csdn.net/Expert/topic/52/52689.xml?temp=.2880823
回复 点赞
Kudeet 2005年03月17日
这里去看看
http://www.gjwtech.com/serialcomm.htm
回复 点赞
shenspring 2005年03月17日
你的是异步串口通讯的吧?我要的是同步的,呵呵
回复 点赞
柯本 2005年03月17日
那里有我的串口通讯程序(用API作的一个类)
http://community.csdn.net/Expert/topic/2707/2707496.xml?temp=.9789545
回复 点赞
发动态
发帖子
硬件/系统
创建于2007-09-28

2260

社区成员

1.7w+

社区内容

VC/MFC 硬件/系统
社区公告
暂无公告