当前位置: 首页 > news >正文

QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏

QT 串口调试工具

  • 第一节 虚拟串口工具安装
  • 第二节 QT创建一个基于QWidget的项目
  • 第三节 UI界面设计
  • 第三节 项目头文件widget.h
  • 第四节 项目实现文件widget.cpp
  • 第五节 main函数
  • 第六节 编译结果重点
  • 第七节 使用QT打包程序,不安装QT的电脑可使用

在这里插入图片描述


第一节 虚拟串口工具安装

-----------------------------------------下载所需工具---------------------------------------------------------------------
链接:https://pan.baidu.com/s/1QkT36S4EnH2HEAhZ1TZ8ug?pwd=ilqg
提取码:ilqg

在这里插入图片描述
-------------------------------------首先点击.exe文件-----------------------------------------------------------------------
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

------------------------------------安装在指定目录等下要用--------------------------------------------------
将vspdctl.dll替换掉你安装文件的所在目录,不然出现错误,就掉头发了哦
在这里插入图片描述

-------------------------------------打开软件看看有啥---------------------------------------------------=
注意:请记住这里的操作,后面还要用到
在这里插入图片描述
-------------------------------------------通过上面的操作,出现以下界面,说明设置成功---------------------
点击电脑—管理—设备管理器–端口–可以看到成功了
在这里插入图片描述


第二节 QT创建一个基于QWidget的项目

在这里插入图片描述
项目.pro添加以下信息

# 添加串口
QT      += serialport

在这里插入图片描述


第三节 UI界面设计

这里不多说,只要是按钮都要转到槽,具体槽函数请看源代码
在这里插入图片描述

第三节 项目头文件widget.h

使用两个串口对象实现

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QSerialPort>          //提供访问串口得到功能
#include <QSerialPortInfo>   //提供系统中存在的串口信息
#include <QMessageBox>    //信息弹出框
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE//使用枚举保存波特率
typedef enum
{B1200 =1200,B9600 = 9600,B115200 = 115200,B921600 = 921600
}Baud;class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots://接收串口数据void SerialPortReadyRead();    //比作COM6void Serial2PortReadyRead();  //比作COM7private slots:void on_PB_receive_clicked();void on_PB_send_clicked();void on_PB_detectserial_clicked();void on_PB_openserial_clicked();void on_comboBox_b_currentIndexChanged(int index);void on_PB_openserial_2_clicked();void on_PB_send_2_clicked();private:Ui::Widget *ui;QSerialPort serial;   //串口1QSerialPort serial2; //串口2
};
#endif // WIDGET_H

-------------------------------------------------------------------------------------------------------------------------------------

第四节 项目实现文件widget.cpp

----------------------实现信号与槽,信号为缓冲区有数据时,槽函数作为接收数据------------------------------------

  //连接信号与槽QObject::connect(&serial, SIGNAL(readyRead()),this, SLOT(SerialPortReadyRead()));QObject::connect(&serial2, SIGNAL(readyRead()),this, SLOT(Serial2PortReadyRead()));

------------------------------------------------串口对象一次性读取全部----------------------------------------------------------

//串口2接收串口1数据
void Widget::SerialPortReadyRead()
{qDebug()<<"===============有数据==================";//从缓冲区读取文件QByteArray buffer = serial.readAll();//获取界面已经读取的数据QString recv = ui->plainTextEdit_2->toPlainText();recv +=QString(buffer);//显示全部ui->plainTextEdit_2->appendPlainText(recv);
}
//串口1接收串口2数据
void Widget::Serial2PortReadyRead()
{qDebug()<<"===============有数据2==================";//从缓冲区读取文件QByteArray buffer = serial2.readAll();//获取界面已经读取的数据QString recv = ui->plainTextEdit->toPlainText();recv +=QString(buffer);//显示全部ui->plainTextEdit->appendPlainText(recv);
}

--------------------------------------------------------------向串口写入数据------------------------------------------------------

//作为串口1
void Widget::on_PB_send_clicked()
{//向串口写入数据QByteArray data = ui->plainTextEdit_2->toPlainText().toUtf8();qDebug()<<"发送数据 data = "<<data;serial.write(data);if(!serial.isWritable())qDebug()<<"写入失败";
}
//作为串口2
void Widget::on_PB_send_2_clicked()
{//向串口2写入数据QByteArray data = ui->plainTextEdit->toPlainText().toUtf8();qDebug()<<"发送数据 data2 = "<<data;serial2.write(data);if(!serial2.isWritable())qDebug()<<"写入失败";
}

-----------------------------------------配置串口并打开--------------------------------------------------------------------

void Widget::on_PB_openserial_clicked()
{if(ui->PB_openserial->text() == QString("打开串口1")){//设置串口名serial.setPortName(ui->comboBox_id->currentText());//设置波特率serial.setBaudRate(ui->comboBox_b->currentText().toUInt());//设置数据位switch (ui->comboBox_data->currentIndex()){case 8:serial.setDataBits(QSerialPort::Data8);break;default:break;}//设置奇偶校验 无switch (ui->comboBox_crc->currentIndex()){case 0:serial.setParity(QSerialPort::NoParity);break;default:break;}//设置停止位switch (ui->comboBox_stop->currentIndex()){case 1:serial.setStopBits(QSerialPort::OneStop);break;default:break;}//设置流控 无serial.setFlowControl(QSerialPort::NoFlowControl);//打开串口if(!serial.open(QIODevice::ReadWrite)){QMessageBox::about(NULL,"提示","串口1打开失败");}if(serial.isOpen())QMessageBox::about(NULL,"提示","串口1打开成功");//下拉菜单控件失能ui->comboBox_b->setEnabled(false);ui->comboBox_id->setEnabled(false);ui->comboBox_crc->setEnabled(false);ui->comboBox_data->setEnabled(false);ui->comboBox_stop->setEnabled(false);ui->PB_openserial->setText(tr("关闭串口1"));//发送按键使能ui->PB_send->setEnabled(true);}else{//关闭串口serial.close();//下拉使能ui->comboBox_b->setEnabled(true);ui->comboBox_id->setEnabled(true);ui->comboBox_crc->setEnabled(true);ui->comboBox_data->setEnabled(true);ui->comboBox_stop->setEnabled(true);ui->PB_openserial->setText(tr("打开串口1"));//发送失能ui->PB_send->setEnabled(false);}
}//获取波特率索引
void Widget::on_comboBox_b_currentIndexChanged(int index)
{if(ui->comboBox_b->itemText(index).toUInt() == B9600){qDebug()<<"itemText = "<<ui->comboBox_b->itemText(index);ui->comboBox_b->setCurrentIndex(index);}else if(ui->comboBox_b->itemText(index).toUInt() == B115200){qDebug()<<"itemText = "<<ui->comboBox_b->itemText(index);ui->comboBox_b->setCurrentIndex(index);}
}void Widget::on_PB_openserial_2_clicked()
{if(ui->PB_openserial_2->text() == QString("打开串口2")){//设置串口名serial2.setPortName(ui->comboBox_id_2->currentText());//设置波特率serial2.setBaudRate(ui->comboBox_b->currentText().toUInt());//设置数据位switch (ui->comboBox_data->currentIndex()){case 8:serial2.setDataBits(QSerialPort::Data8);break;default:break;}//设置奇偶校验 无switch (ui->comboBox_crc->currentIndex()){case 0:serial2.setParity(QSerialPort::NoParity);break;default:break;}//设置停止位switch (ui->comboBox_stop->currentIndex()){case 1:serial2.setStopBits(QSerialPort::OneStop);break;default:break;}//设置流控 无serial2.setFlowControl(QSerialPort::NoFlowControl);//打开串口if(!serial2.open(QIODevice::ReadWrite)){QMessageBox::about(NULL,"提示","串口2打开失败");}if(serial2.isOpen())QMessageBox::about(NULL,"提示","串口2打开成功");//下拉菜单控件失能ui->comboBox_b->setEnabled(false);ui->comboBox_id_2->setEnabled(false);ui->comboBox_crc->setEnabled(false);ui->comboBox_data->setEnabled(false);ui->comboBox_stop->setEnabled(false);ui->PB_openserial_2->setText(tr("关闭串口2"));//发送按键使能ui->PB_send_2->setEnabled(true);}else{//关闭串口serial2.close();//下拉使能ui->comboBox_b->setEnabled(true);ui->comboBox_id_2->setEnabled(true);ui->comboBox_crc->setEnabled(true);ui->comboBox_data->setEnabled(true);ui->comboBox_stop->setEnabled(true);ui->PB_openserial_2->setText(tr("打开串口2"));//发送失能ui->PB_send_2->setEnabled(false);}
}

-----------------------------------------------------------------源码------------------------------------------------------------

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//连接信号与槽QObject::connect(&serial, SIGNAL(readyRead()),this, SLOT(SerialPortReadyRead()));QObject::connect(&serial2, SIGNAL(readyRead()),this, SLOT(Serial2PortReadyRead()));//发送按钮不使能ui->PB_send->setDisabled(true);ui->PB_send_2->setDisabled(true);
}Widget::~Widget()
{delete ui;
}//串口2接收串口1数据
void Widget::SerialPortReadyRead()
{qDebug()<<"===============有数据==================";//从缓冲区读取文件QByteArray buffer = serial.readAll();//获取界面已经读取的数据QString recv = ui->plainTextEdit_2->toPlainText();recv +=QString(buffer);//显示全部ui->plainTextEdit_2->appendPlainText(recv);
}
//串口1接收串口2数据
void Widget::Serial2PortReadyRead()
{qDebug()<<"===============有数据2==================";//从缓冲区读取文件QByteArray buffer = serial2.readAll();//获取界面已经读取的数据QString recv = ui->plainTextEdit->toPlainText();recv +=QString(buffer);//显示全部ui->plainTextEdit->appendPlainText(recv);
}void Widget::on_PB_receive_clicked()
{//清空接收框数据ui->plainTextEdit->clear();ui->plainTextEdit_2->clear();
}
//作为串口1
void Widget::on_PB_send_clicked()
{//向串口写入数据QByteArray data = ui->plainTextEdit_2->toPlainText().toUtf8();qDebug()<<"发送数据 data = "<<data;serial.write(data);if(!serial.isWritable())qDebug()<<"写入失败";
}
//作为串口2
void Widget::on_PB_send_2_clicked()
{//向串口2写入数据QByteArray data = ui->plainTextEdit->toPlainText().toUtf8();qDebug()<<"发送数据 data2 = "<<data;serial2.write(data);if(!serial2.isWritable())qDebug()<<"写入失败";
}
//检测串口
void Widget::on_PB_detectserial_clicked()
{//清空串口idui->comboBox_id->clear();ui->comboBox_id_2->clear();//通过这个类查找可用串口1foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){qDebug()<<"info.portName() = "<<info.portName();ui->comboBox_id->addItem(info.portName());}//通过这个类查找可用串口2foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){qDebug()<<"info.portName() = "<<info.portName();ui->comboBox_id_2->addItem(info.portName());}
}void Widget::on_PB_openserial_clicked()
{if(ui->PB_openserial->text() == QString("打开串口1")){//设置串口名serial.setPortName(ui->comboBox_id->currentText());//设置波特率serial.setBaudRate(ui->comboBox_b->currentText().toUInt());//设置数据位switch (ui->comboBox_data->currentIndex()){case 8:serial.setDataBits(QSerialPort::Data8);break;default:break;}//设置奇偶校验 无switch (ui->comboBox_crc->currentIndex()){case 0:serial.setParity(QSerialPort::NoParity);break;default:break;}//设置停止位switch (ui->comboBox_stop->currentIndex()){case 1:serial.setStopBits(QSerialPort::OneStop);break;default:break;}//设置流控 无serial.setFlowControl(QSerialPort::NoFlowControl);//打开串口if(!serial.open(QIODevice::ReadWrite)){QMessageBox::about(NULL,"提示","串口1打开失败");}if(serial.isOpen())QMessageBox::about(NULL,"提示","串口1打开成功");//下拉菜单控件失能ui->comboBox_b->setEnabled(false);ui->comboBox_id->setEnabled(false);ui->comboBox_crc->setEnabled(false);ui->comboBox_data->setEnabled(false);ui->comboBox_stop->setEnabled(false);ui->PB_openserial->setText(tr("关闭串口1"));//发送按键使能ui->PB_send->setEnabled(true);}else{//关闭串口serial.close();//下拉使能ui->comboBox_b->setEnabled(true);ui->comboBox_id->setEnabled(true);ui->comboBox_crc->setEnabled(true);ui->comboBox_data->setEnabled(true);ui->comboBox_stop->setEnabled(true);ui->PB_openserial->setText(tr("打开串口1"));//发送失能ui->PB_send->setEnabled(false);}
}//获取波特率索引
void Widget::on_comboBox_b_currentIndexChanged(int index)
{if(ui->comboBox_b->itemText(index).toUInt() == B9600){qDebug()<<"itemText = "<<ui->comboBox_b->itemText(index);ui->comboBox_b->setCurrentIndex(index);}else if(ui->comboBox_b->itemText(index).toUInt() == B115200){qDebug()<<"itemText = "<<ui->comboBox_b->itemText(index);ui->comboBox_b->setCurrentIndex(index);}
}void Widget::on_PB_openserial_2_clicked()
{if(ui->PB_openserial_2->text() == QString("打开串口2")){//设置串口名serial2.setPortName(ui->comboBox_id_2->currentText());//设置波特率serial2.setBaudRate(ui->comboBox_b->currentText().toUInt());//设置数据位switch (ui->comboBox_data->currentIndex()){case 8:serial2.setDataBits(QSerialPort::Data8);break;default:break;}//设置奇偶校验 无switch (ui->comboBox_crc->currentIndex()){case 0:serial2.setParity(QSerialPort::NoParity);break;default:break;}//设置停止位switch (ui->comboBox_stop->currentIndex()){case 1:serial2.setStopBits(QSerialPort::OneStop);break;default:break;}//设置流控 无serial2.setFlowControl(QSerialPort::NoFlowControl);//打开串口if(!serial2.open(QIODevice::ReadWrite)){QMessageBox::about(NULL,"提示","串口2打开失败");}if(serial2.isOpen())QMessageBox::about(NULL,"提示","串口2打开成功");//下拉菜单控件失能ui->comboBox_b->setEnabled(false);ui->comboBox_id_2->setEnabled(false);ui->comboBox_crc->setEnabled(false);ui->comboBox_data->setEnabled(false);ui->comboBox_stop->setEnabled(false);ui->PB_openserial_2->setText(tr("关闭串口2"));//发送按键使能ui->PB_send_2->setEnabled(true);}else{//关闭串口serial2.close();//下拉使能ui->comboBox_b->setEnabled(true);ui->comboBox_id_2->setEnabled(true);ui->comboBox_crc->setEnabled(true);ui->comboBox_data->setEnabled(true);ui->comboBox_stop->setEnabled(true);ui->PB_openserial_2->setText(tr("打开串口2"));//发送失能ui->PB_send_2->setEnabled(false);}
}

第五节 main函数

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

第六节 编译结果重点

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


--------------------------------不想编写两个串口的,安装的串口助手里面有一个工具----------------------------------
在这里插入图片描述
在这里插入图片描述
可以看到,可以实现所需的功能

第七节 使用QT打包程序,不安装QT的电脑可使用

第一步QT编译使用如下
在这里插入图片描述
第二部,执行上述以后,去以下目录复制.exe文件到一个新建的文件夹
在这里插入图片描述
以管理员身份打开cmd,进入的这个新建的文件夹

windeployqt.exe 你的.exe文件名

在这里插入图片描述

由于没有一台未安装QT的电脑作为模拟,有些遗憾
为了提高成功率打开如下:
在这里插入图片描述

cd D:\Qt\Qt5.14.2\Tools\QtCreator\bin

进入以上目录,执行如下命令

D:\Qt\Qt5.14.2\5.14.2\mingw73_64>windeployqt.exe C:\Users\ll\Desktop\QT串口工具\QSerialPort.exe

在这里插入图片描述

在这里插入图片描述

-------------------------------------本次任务over-----------------------------------------------------------

相关文章:

QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏

QT 串口调试工具第一节 虚拟串口工具安装第二节 QT创建一个基于QWidget的项目第三节 UI界面设计第三节 项目头文件widget.h第四节 项目实现文件widget.cpp第五节 main函数第六节 编译结果重点第七节 使用QT打包程序&#xff0c;不安装QT的电脑可使用第一节 虚拟串口工具安装 -…...

OpenSumi 是信创开发云的首选

原文作者&#xff1a;行云创新技术总监 邓冰寒 引言 随着云原生应用的日益普及&#xff0c;开发上云也逐步被越来越多的厂商和开发者接受&#xff0c;在这个赛道国内外有不少玩家&#xff0c;国外的 GitHub Codespaces、CodeSandbox&#xff0c;GitPod、亚马逊 Cloud9&#xf…...

JdbcTemplate常用方法解析

文章目录1.JdbcTemplate简介2.JdbcTemplate主要方法&#xff1a;3.常用方法介绍update()方法增删改query()查询方法1.JdbcTemplate简介 JdbcTemplate是Spring JDBC的核心类&#xff0c;借助该类提供的方法可以很方便的实现数据的增删改查。 Spring对数据库的操作在jdbc上面做…...

生物素标记试剂1869922-24-6,Alkyne-PEG3-Biotin PC,炔烃PEG3生物素PC

1、试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a;PC alkyne-PEG3-Biotin含一个炔烃和一个 PEG 链接的可光裂解生物素基团。含 3 个单元 PEG 的 ADC linker&#xff0c;生物素本身是个游离的小分子&#xff0c;在生物实验中常常…...

CS224W课程学习笔记(三):DeepWalk算法原理与说明

引言 什么是图嵌入&#xff1f; 图嵌入&#xff08;Graph Embedding&#xff0c;也叫Network Embedding&#xff09; 是一种将图数据&#xff08;通常为高维稠密的矩阵&#xff09;映射为低微稠密向量的过程&#xff0c;能够很好地解决图数据难以高效输入机器学习算法的问题。…...

rk3568 开发板Ubuntu系统说明

Ubuntu MinimalUbuntu Minimal系统基于Ubuntu 64bit系统构建&#xff0c;目前发布有Ubuntu18.04这个版本。与Ubuntu Desktop 相比具有以下特性&#xff1a;没有桌面环境&#xff0c;占用资源少&#xff0c;在简化网络管理之后&#xff0c;只需40M内存&#xff1b;针对嵌入式平台…...

Windows和Linux常用HASH算法使用命令

Windows和Linux常用hash算法使用命令 Windows&#xff0c;以文件xxx.zip为例 Windows 求文件 md5 certutil -hashfile xxx.zip md5Windows 求文件 sha1 certutil -hashfile xxx.zip sha1Windows 求文件 sha256 certutil -hashfile xxx.zip sha256Linux&#xff0c;以文件xxx.z…...

货仓选址 AcWing(JAVA)

在一条数轴上有 N家商店&#xff0c;它们的坐标分别为 A1∼AN。 现在需要在数轴上建立一家货仓&#xff0c;每天清晨&#xff0c;从货仓到每家商店都要运送商品。 为了提高效率&#xff0c;求把货仓建在何处&#xff0c;可以使得货仓到每家商店的距离之和最小。 输入格式&#…...

SPI+DMA传输性能比较

本文章仅仅简单记录32单片机的SPIDMA驱动显示屏的性能测试&#xff0c;这里不花费时间介绍SPI和DMA。 硬件材料&#xff1a;SPI显示屏一个&#xff0c;32单片机 软件材料&#xff1a; 1.LCD的SPI驱动显示程序&#xff08;SPI / SPIDMA&#xff09;&#xff1a; &#xff08;1&a…...

Centos7系统编译Hadoop3.3.4

1、背景 最近在学习hadoop&#xff0c;此篇文章简单记录一下通过源码来编译hadoop。为什么要重新编译hadoop源码&#xff0c;是因为为了匹配不同操作系统的本地库环境。 2、编译源码 2.1 下载并解压源码 [roothadoop01 ~]# mkdir /opt/hadoop [roothadoop01 ~]# cd /opt/had…...

pb并发控制

并发控制(一) 并发能力是指多用户在同一时间对相同数据同时访问的能力。一般的关系型数据库都具 有并发控制的能力,但是这种并发功能也会对数据的一致性带来危险。试想若有两个用 户都试图访问某个银行用户的记录并同时要求修改该用户的存款余额时,情况将会怎样 呢?我们可以…...

登录拦截器

文章目录前言一、interceptor1.interceptor 包下新建loginInterceptor.java2.config 包下新建 AdminWebConfig.java3.返回登录页面接收提示信息前言 本篇主要介绍spring框架里提供的 HandlerInterceptor 拦截器做登录拦截。 一、interceptor 1.interceptor 包下新建loginInte…...

STM32 - HAL库UART串口

1.串口初始化配置/******************************************************************************* Function: BSP_UART_Init Description: 串口初始化 Input: instance 串口号baudRate: 波特率 Output: 无 Return: 无 ************************************************…...

Vue3 的状态管理库(Pinia)

目录前言&#xff1a;一、什么是 Pinai二、安装与使用pinia三、什么是 store四、state1. 定义 state2. 组件中访问 state五、Getters1. 定义 Getters2. 在组件中使用 Getters六、Actions1. 定义Actions2. 组件中访问 Actions总结&#xff1a;前言&#xff1a; 在编写vue里的项目…...

信息系统项目管理师知识点汇总(2023最新)

信息系统项目管理师 信息系统项目管理师简介如何应对考试考试细节与学习 十大管理 十大管理四十七过程 信息化和信息系统 项目管理基础 项目整体管理 项目范围管理 项目进度管理 项目成本管理 项目质量管理 项目人力资源管理 项目沟通管理 项目干系人管理 项目风险…...

标题标题标题

图床&#xff08;Typora uPic/PicGo 七牛云&#xff09; 图床&#xff08;Typora uPic/PicGo 七牛云&#xff09; 笔者平时使用 Typora 编写 markdown 文档&#xff0c;文档中常常会放置图片&#xff0c;如果文档不需要分享的话&#xff0c;其实讲图片存放在本地就可以了…...

OKR学习总结二

总结 绩效管理不是进行事后管理&#xff0c;而是参与整个过程并进行实时把控。 我们将受益目标分为两个子目标&#xff1a; 新增收入和重复收入。第一部分目标由市场营销部承担&#xff0c;第二个目标则由产品部承担。 简而言之&#xff0c;文化是一系列价值观和信仰的体现&…...

MAC中docker搭建fastdfs

1:首先搭建Docker2:通过Docker搭建fastdfs&#xff08;1&#xff09;查找镜像打开终端通命令查找fastdfs的镜像docker search fastdfs&#xff08;二&#xff09;拉取镜像在找到合适的镜像后执行命令:docker pull delron/fastdfs&#xff08;三&#xff09; 创建storage和track…...

JavaScript 变量

变量是用于存储信息的"容器"。实例var x5;var y6;var zxy;尝试一下 就像代数那样x5y6zxy在代数中&#xff0c;我们使用字母&#xff08;比如 x&#xff09;来保存值&#xff08;比如 5&#xff09;。通过上面的表达式 zxy&#xff0c;我们能够计算出 z 的值为 11。在…...

【前端验证】环境仿真中对于寄存器配置的随机策略讨论

前言 本篇文章旨在讨论环境仿真中对于寄存器配置的随机。 寄存器域的随机性 使用ralgen生成的寄存器本身是rand属性的,也就是说其自身是可以通过约束随机的方式在用例中进行随机性配置的,比如下面这个寄存器: class ral_reg_REG_PRJ_sys_cfg_base_config extends uvm_re…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...