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

shenspring 2005-03-17 08:02:53
想在xp系统下运行,如果能给源码就最好了。另外,不知道xp下能不能在同步串行通讯下同时进行数据的收发。
...全文
133 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧