RT:
使用Qt5开发上位机,完成二进制文件传输至底层,被底层接受转存至flash中!
上位机只负责发送文件即可,由于上位机会遇到发送较大的文件的情况,所以上位机将文件进行分块切割,再传输:
具体代码:
/*******************************************************************************************************************************************/
QString filename = ui->File_LineEdit->text();
QFile file(filename);
ui->textEdit_recv->append("send bin file");
if(!file.open(QIODevice::ReadOnly)){
QMessageBox::warning(this,"bin file","cannot open",QMessageBox::Yes);
}
ui->textEdit_recv->append("read file and send to uart\n");
ui->textEdit_recv->append("start send file\n");
QDataStream in(&file);
time.start();
while(!file.atEnd())
{
int len = in.readRawData((char *)data,sizeof(data));
if(len < 0)
{
ui->textEdit_recv->append("read file error\n");
return;
}
QByteArray tinyData((char *)data,len);
QDelay(10);
ret = serial->write(tinyData);
if(ret < 0)
{
qDebug("send file error");
ui->textEdit_recv->append("send file error\n");
}
QDelay(100);
size += len;
//ui->textEdit_recv->append(QString("%1").arg(ret));
//ui->textEdit_recv->append(QString("%1").arg(len));
//ui->textEdit_recv->append(QString("%1").arg(size));
//ui->textEdit_recv->append("\n");
}
//计算文件传输时间
ui->textEdit_recv->append("文件传输时间:");
ui->textEdit_recv->append(QString("%1s").arg(time.elapsed()/1000.0));
ui->textEdit_recv->append("\n");
if(size != file.size()){
ui->textEdit_recv->append("send file error\n");
//goto exit;
return ;
}
ui->textEdit_recv->append("send file over\n");
file.close();
/*******************************************************************************************************************************************/
文件编译通过发布测试结果,分析发现串口类的write函数未将分块数据发送到底层,导致底层接受函数一直反馈接收状态失败!!!但exe执行却未跳入异常代码中,很无语!!!