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

qt的QSerialPort传输较大的串口数据时如何分段发送?

1
回复
6264
查看
[复制链接]
累计签到:57 天
连续签到:1 天
来源: 2017-12-10 20:00:09 显示全部楼层 |阅读模式
1Qter豆
如图所示,要传输的数据大小为binSize=36128字节,如果每次传输byteToSend = 1024个字节。程序代码要如何写才能分段(每段1024个字节)完整的把数据(大小为binSize=36128字节)完整的发送出去?PS:最后一段发送的有效数据不及1024个字节时以F来填充。  本人C++及Qt新手,几天了都没有解决这个问题,如果方便的话请帮忙写下具体的代码,十分感谢!

可复制的图中代码如下:
void FirmwareUpdate::sendBinDataSlot(){    QFile* file = new QFile;    file->setFileName(fileName);    bool ok = file->open(QIODevice::ReadOnly);    if(!ok)    {        QMessageBox::information(this,"Error Message", "File Open Error" + file->errorString());        return;    }    QDataStream in(file);    char * binByte = new char[binSize];    in.setVersion (QDataStream::Qt_5_9);    in.readRawData (binByte, binSize); //binSize=36128 ;读出文件到缓存。    /*** int readRawData(char *, int len); ***/            const char* charBinData=binByte;        int byteToSend = 1024;         tmp = startWidget->my_serialport->write(charBinData,  byteToSend);    /*** qint64 QIODevice::write(const char *data, qint64 maxSize)            Writes at most maxSize bytes of data from data to the device.            Returns the number of bytes that were actually written, or -1 if an error occurred. ***/                qDebug()<<"binSize:"<<binSize<<";"<<"charBinData:"<<charBinData<<";"<<"tmp"<<tmp<<endl;//binSize: 36128 ; temp 1024        delete[] binByte;}

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:57 天
连续签到:1 天
2017-12-11 21:15:28 显示全部楼层
已解决,最后通过定时器分段发送数据。
回复

使用道具 举报

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

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