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

qcom中有关readMycom的问题

2
回复
7217
查看
[复制链接]
累计签到:29 天
连续签到:1 天
来源: 2013-8-8 14:38:17 显示全部楼层 |阅读模式
1Qter豆
      求助!{:soso_e154:}还是串口程序的问题,我在使用现在用qcom调试一个单片机,功能大致是我发送一组16进制数给单片机,然后单片机反馈给qcom一些信息,现在发送数据没什么问题,接受到了板子的反馈信息,但是反馈信息读取出现了一定是32字节一读,少于32字节的就等待后面来的信息凑足32字节才会发过来,这样会十分影响我在qcom的QTextBroswer中的显示

这是qcom中的readMycom函数,我除了加了一句qDebug其他什么都没改:

void MainWindow::readMyCom()
{
    qDebug()<<"read:"<<myCom->bytesAvailable()<<"bytes";        //这里是我加的调试信息
    QByteArray temp = myCom->readAll();
    QString buf;

    if(!temp.isEmpty()){
            ui->textBrowser->setTextColor(Qt::black);
            if(ui->ccradioButton->isChecked()){
                buf = temp;
                //qDebug()<<"temp="<<temp;
            }else if(ui->chradioButton->isChecked()){
                QString str;
                for(int i = 0; i < temp.count(); i++){
                    QString s;
                    s.sprintf("0x%02x, ", (unsigned char)temp.at(i));
                    buf += s;
                }
            }

        if(!write2fileName.isEmpty()){
            QFile file(write2fileName);
            //如果打开失败则给出提示并退出函数
            if(!file.open(QFile::WriteOnly | QIODevice::Text)){
                QMessageBox::warning(this, tr("写入文件"), tr("打开文件 %1 失败, 无法写入\n%2").arg(write2fileName).arg(file.errorString()), QMessageBox::Ok);
                return;
            }
            QTextStream out(&file);
            out<<buf;
            file.close();
        }

        ui->textBrowser->setText(ui->textBrowser->document()->toPlainText() + buf);
        QTextCursor cursor = ui->textBrowser->textCursor();
        cursor.movePosition(QTextCursor::End);
        ui->textBrowser->setTextCursor(cursor);

        ui->recvbyteslcdNumber->display(ui->recvbyteslcdNumber->value() + temp.size());
        ui->statusBar->showMessage(tr("成功读取%1字节数据").arg(temp.size()));
    }
}

然后QTextBroswer显示的反馈信息如下面所示;
问题在于如图1显示的最后一行:“channel 0:<0.01450”,明显是少了个“>”的。
我加了一句qDebug()<<"read:"<<myCom->bytesAvailable()<<"bytes"后,发现每次read的都是32bytes,其实后面的“>”并没有丢,是因为他前面到0刚好是32字节,所以他被分割到下面那段去了,但是如果他要是下面那段也发过来也就好了,但是感觉他好像是等着下面的数据来一起凑够32bytes才能发过来,就像图2那样,我又发了一次,可以看到前面一段的丢失“>”也已经发过来了,但是依旧是32一读,所以可以看到空了一行是因为那个32bytes是刚好读到的回车字符开头的;我不知道是不是单片机问题,但是另外一个人用JAVA写的一个串口也是用这个单片机显示没什么问题,所以我感觉应该是这个只有满32字节才读的问题导致的,我希望能够在单片机发送一次内把全部信息传送过来,不管最后那段是否小于32字节,请问下要如何解决,串口教程里面好像也有提到过这些问题,但是看了几遍着实没看懂...
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

嗯。当时记着测试是8字节,应该是在windows xp下测试的。可以按照 通信专题 里面讲到再测试下。
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-8-8 14:38:18 显示全部楼层
嗯。当时记着测试是8字节,应该是在windows xp下测试的。可以按照 通信专题 里面讲到再测试下。
回复

使用道具 举报

累计签到:29 天
连续签到:1 天
2013-8-9 11:42:00 显示全部楼层
本帖最后由 uiaxiaobo 于 2013-8-9 11:45 编辑

没人吗?{:soso_e149:}
@yafeilinux  @hzzhou  @竞风
我怀疑可能是系统的问题了
因为我用minicom来读也发现和qcom读出来是一样的,最后不足32bytes的根本就收不到
然后我在windows7下试了下sourceCRT软件和其他的串口软件来读,都不存在Ububtu下qcom运行的问题
回复

使用道具 举报

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

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