找回密码
 立即注册
收起左侧

用第三方串口类 Win_QextSerialPort 读数据问题

8
回复
8242
查看
[复制链接]

尚未签到

来源: 2013-4-2 11:12:40 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 skylovett09 于 2013-4-2 12:09 编辑

工程背景:
    开了一个线程A专门用来接收串口数据(数据长度不会超过15字节),收到数据后发送信号给主线程B进行解析。 主线程B中有一个定时器周期200ms来判断收数据所花时间。
    现在的问题是:
从readAll() 这条指令执行完成到发信号指令居然要超过200ms,主线程定时器已经进中断了readAll()还没执行完成,求高手帮忙分析一下原因。
    代码如下:
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

单步调试,定时器还是会有200m后就会发出信号。等你再单步下一条语句的时候,200ms早就过了。执行顺序当然是这样的啊。这种情况下不能单步的。
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-4-2 11:12:41 显示全部楼层
单步调试,定时器还是会有200m后就会发出信号。等你再单步下一条语句的时候,200ms早就过了。执行顺序当然是这样的啊。这种情况下不能单步的。
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-4-2 11:53:43 显示全部楼层
操作系统对线程的调度本身是需要时间的。你并不能保证你的读串口线程一定会在你的主线程之前执行。你的这个机制有问题,这样的机制可能不能实现你想要的功能。另外,如果你只有一个线程来操作串口,可以不用加锁。还有,请注意你帖子里代码的格式,这么乱的代码想看懂太难了。
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-4-2 11:59:43 显示全部楼层
另外,几天后,qter.org会发布串口调试工具,你也可以参考一下,敬请关注
回复

使用道具 举报

尚未签到

2013-4-2 12:12:38 显示全部楼层
hzzhou 发表于 2013-4-2 11:53
操作系统对线程的调度本身是需要时间的。你并不能保证你的读串口线程一定会在你的主线程之前执行。你的这个 ...

麻烦帅哥重新看一下,我就是搞不懂为啥读取完到发信号要执行这么久?
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-4-2 12:31:02 显示全部楼层
你是怎么判定readAll()开始执行到发送信号的时间的?还有,在200ms之内,串口是不是一定会有数据过来。另外,你判断两次len的时候,已经过去超过40ms了。如果你的串口上一直在收到数据,你的这长度的判断是不是还准确?你的波特率是多少,串口要发送你需要接收的数据长度需要多少时间?
回复

使用道具 举报

尚未签到

2013-4-2 13:05:38 显示全部楼层
hzzhou 发表于 2013-4-2 12:31
你是怎么判定readAll()开始执行到发送信号的时间的?还有,在200ms之内,串口是不是一定会有数据过来。另外 ...

你是怎么判定readAll()开始执行到发送信号的时间的?
===我是这样测试的:完成一次收发的操作,打4个断点;
[1]定时器->start(200);
[2]temp = mainCom->readAll();
[3]emit this->comData( temp );
[4]定时器timeout()函数入口;
然后执行发送操作,结果到断点的顺序是[2]-[1]-[4]-[3];
所以有点不明白,仅仅就是一次收发的操作,收到的数据时13个字节,没有一直收
回复

使用道具 举报

尚未签到

2013-4-2 13:12:25 显示全部楼层
串口设置是这样:
     mainCom = new Win_QextSerialPort( "com1", QextSerialBase:olling );
        mainCom->open( QIODevice::ReadWrite );
        mainCom->setBaudRate( BAUD9600 );
        mainCom->setDataBits( DATA_8 );
        mainCom->setParity( PAR_NONE );
        mainCom->setStopBits( STOP_1 );
        mainCom->setFlowControl( FLOW_OFF );
        mainCom->setTimeout(1);
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2013-4-16 22:22:37 显示全部楼层
这段时间我忙些别的事情。就没有上论坛,不知道你的问题解决了没有。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了