弄了一天也没搞定。c++ builder下用pcomm开发遇到的奇怪问题

mansea163 2011-08-24 10:24:10
放置一个按钮,点击按钮就用sio_write写字符串"abcdefghijklmnopqrstuvwxyz"
然后用sio_cnt_irq事件驱动的方式调用一个中断服务函数来读取串口。sio_read放在中断服务函数中。
问题是:整个字符串是分两次或更多次才读取到的。为什么不是一次。没有改变读写超时设置。
什么原因?
...全文
42 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zzbinfo 2011-08-25
每次发多少个跟波特率是没有关系得,不知道你得需求是什么,你看看这个控件有没有一个属性,是接收到一定长度得数据才触发这个回调函数得,或者你要在接收到数据后判断处理一下[Quote=引用 4 楼 mansea163 的回复:]
还有我发送a到z 26个字符串,波特率设置为50。放置一个定时timer,定时间隔为100mS,。每次发送字符串后,总是分4次读取到26个字符。分别是:
abcdefgh //8个
ijklmnop //8个
qrstuvwx //8个
yz //2个
把波特率改成110,1200,结果也是一样。
如果是因为串口写出需要时间的话,那么波特率50应该是够慢的了。
可是为什么读取到的总是……
[/Quote]
回复
mansea163 2011-08-24
还有我发送a到z 26个字符串,波特率设置为50。放置一个定时timer,定时间隔为100mS,。每次发送字符串后,总是分4次读取到26个字符。分别是:
abcdefgh //8个
ijklmnop //8个
qrstuvwx //8个
yz //2个
把波特率改成110,1200,结果也是一样。
如果是因为串口写出需要时间的话,那么波特率50应该是够慢的了。
可是为什么读取到的总是每8个一组呢??按说timer的读取时刻是每次不一样的呀
回复
mansea163 2011-08-24
还有pcomm应该都是异步(重叠)的
回复
mansea163 2011-08-24
可是我使用的写串口函数sio_write的超时设置里面提到,如果采用默认超时设置的话,则 Block until all data sent out.
这应该就是说write函数会发送完所有数据才返回吧?

回复
zzbinfo 2011-08-24
这个是很多做串口通讯都遇到过的问题,因为串口发数据也不是一次都发完的呀,你点发送,只是放到了缓冲区,接收的时候,只要有数据就接收,但接收到的数据长度却是不一定等于你发送的长度的。
回复
相关推荐
发帖
网络及通讯开发
创建于2007-08-02

1300

社区成员

C++ Builder 网络及通讯开发
申请成为版主
帖子事件
创建了帖子
2011-08-24 10:24
社区公告
暂无公告