• 4984阅读
  • 8回复

[提问]一个奇葩的问题,关于串口 [复制链接]

上一主题 下一主题
离线z55716368
 

只看楼主 正序阅读 楼主  发表于: 2015-06-11
回复本帖可获得2RMB金钱奖励!
每人最多可获奖2次,奖池剩余20RMB金钱 (中奖几率10%)
在我设置完串口并且打开之后,返回true说明串口已经成功打开。
然后我int len = myCOM->write("FF");
打印出来len = 2;
表示已经发送出去了
但是  我没有接受到!
请问这个出现的原因是什么呢?表示硬件方面是OK的
每一个问题 都是一次进步
离线z55716368

只看该作者 8楼 发表于: 2015-06-21
回 johnyork 的帖子
johnyork:怀疑是跨线程的事件同步异常造成的。
我曾经犯过一个错误:把子线程中的局部变量地址作为参数通过信号发射出去,并在主线程中使用槽函数处理。因为跨线程的信号和槽默认是按队列方式连接的(Qt::QueuedConnection),子线程中的信号发射后并不会等待主线程的槽函数执行,这样轮到主 .. (2015-06-19 20:31) 

谢谢你的回复 感谢
每一个问题 都是一次进步
离线johnyork

只看该作者 7楼 发表于: 2015-06-19
回 z55716368 的帖子
z55716368:这些都是一致的,现在的情况就是使用信号和槽激活write可以有效发送并且接收回复;但是如果直接在线程里面调用write返回长度,但是实际没有发出去。我串口是自己封装的一个类,应该跟线程无关吧 (2015-06-19 13:07) 

怀疑是跨线程的事件同步异常造成的。
我曾经犯过一个错误:把子线程中的局部变量地址作为参数通过信号发射出去,并在主线程中使用槽函数处理。因为跨线程的信号和槽默认是按队列方式连接的(Qt::QueuedConnection),子线程中的信号发射后并不会等待主线程的槽函数执行,这样轮到主线程的槽函数执行时,信号传递的地址对应的对象已经被销毁,从而产生异常内存访问,最终的结果是串口只能接收14个字节,关闭并重新打开程序后又只能接收14个字节。
自曝家丑,希望对你有所帮助。
离线z55716368

只看该作者 6楼 发表于: 2015-06-19
回 纵刀少年 的帖子
纵刀少年:先用串口助手看看有没有问题
然后看接收部分的函数,信号和槽,显示等部分有没有问题。
用debug和断点看看哪里出错了 (2015-06-19 16:32) 

没有 感觉是线程问题
每一个问题 都是一次进步
离线纵刀少年

只看该作者 5楼 发表于: 2015-06-19
先用串口助手看看有没有问题
然后看接收部分的函数,信号和槽,显示等部分有没有问题。

用debug和断点看看哪里出错了
离线z55716368

只看该作者 4楼 发表于: 2015-06-19
回 johnyork 的帖子
johnyork:发端和收端的波特率设置是否一致?停止位和校验位的设置是否一致? (2015-06-18 23:26) 

这些都是一致的,现在的情况就是使用信号和槽激活write可以有效发送并且接收回复;但是如果直接在线程里面调用write返回长度,但是实际没有发出去。我串口是自己封装的一个类,应该跟线程无关吧
每一个问题 都是一次进步
离线johnyork

只看该作者 3楼 发表于: 2015-06-18
发端和收端的波特率设置是否一致?停止位和校验位的设置是否一致?
离线z55716368

只看该作者 2楼 发表于: 2015-06-16
回 firebolt 的帖子
firebolt:接线也没问题吗? (2015-06-11 15:31) 

恩 没有问题 不好意思 才看到回复 硬件是完全OK的
每一个问题 都是一次进步
离线firebolt

只看该作者 1楼 发表于: 2015-06-11
接线也没问题吗?
快速回复
限100 字节
 
上一个 下一个