Qt应用开发--国产工业开发板全志T113-i的部署教程

Qt在工业上的使用场景包括工业自动化、嵌入式系统、汽车行业、航空航天、医疗设备、制造业和物联网应用。Qt被用来开发工业设备的用户界面、控制系统、嵌入式应用和其他工业应用,因其跨平台性和丰富的功能而备受青睐。

Qt能够为工业领域带来什么好处:
- Qt提供了强大的图形引擎,使开发人员能够创建具有吸引力和高性能的用户界面
- Qt允许开发人员根据具体需求定制用户界面和功能。这对于满足不同行业和项目的独特需求至关重要,使工业应用能够实现个性化的解决方案
- Qt提供了丰富的库和工具,涵盖了各种应用程序开发需求,包括图形、网络通信、多媒体处理、数据存储等。这简化了工业应用程序的开发流程
- Qt可以轻松与各种硬件设备和通信协议集成,这对于工业自动化和控制系统来说非常重要,因为它们需要与各种传感器、执行器和其他工业设备进行通信

创龙科技基于全志双核Cortex-A7@1.2GHz处理器T113-i,精心设计的全国产工业开发板,它提供了Qt的运行环境,可以让我们快速的部署工业领域的用户交互界面,控制系统等。

接下来我们来聊聊如何在创龙科技T113-i工业开发板上部署Qt应用。

开发板Qt运行环境

开发板SDK准备
  • 创龙科技的资料中提供了开发板的SDK-T113-i_v1.0.tar.gz,需要解压ubuntu中解压出来:
rice@rice:~$ mkdir t113             //创建t113工作目录,然后将压缩包拷贝到此目录
rice@rice:~$ cd t113
....rice@rice:~/t113$ tar -zxvf SDK-T113-i_v1.0.tar.gz
rice@rice:~/t113$ cd T113-i_v1.0/
rice@rice:~/t113/T113-i_v1.0$ ls
brandy  buildroot  device  install_tools.sh  out       rtos-dsp  tools
build   build.sh   kernel  platform          test
  • 安装依赖软件,创龙科技提供了安装脚本:install_tools.sh,我们执行该脚本即可完成依赖工具的安装:
rice@rice:~/t113/T113-i_v1.0$ ./install_tools.sh
[sudo] password for rice: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
texinfo is already the newest version (6.5.0.dfsg.1-2).
0 upgraded, 0 newly installed, 0 to remove and 121 not upgraded.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
pkg-config is already the newest version (0.29.1-0ubuntu2).
0 upgraded, 0 newly installed, 0 to remove and 121 not upgraded.
Reading package lists... Done......
  • 解压Buildroot dl–dl.tar.gz,其为 Buildroot dl 目录压缩包,用于存放从官网下载的开源软件包:
rice@rice:~/t113$ tar -xvf dl.tar.gz -C ~/t113/buildroot/buildroot-201902/
构建Qt固件
  • 在编译固件前,先清理一下SDK的编译和配置生成文件:
rice@rice:~/t113/T113-i_v1.0$ ./build.sh distclean
  • 配置linux内核,处理器型号,显示方式,编译器等信息
rice@rice:~/t113/T113-i_v1.0$ ./build.sh config
Welcome to mkscript setup progress
All available platform:0. linux
Choice [linux]: 0
All available linux_dev:0. bsp1. dragonboard2. longan3. tinyos
Choice [longan]: 2
All available kern_ver:0. linux-5.4
Choice [linux-5.4]: 0
All available ic:0. t1131. t113_i
Choice [t113_i]: 1
All available board:0. evb11. evb1_auto2. evb1_auto_nand3. evb1_auto_nor4. tlt113-evm-emmc5. tlt113-evm-nand6. tlt113-minievm-emmc7. tlt113-minievm-nand
Choice [tlt113-evm-nand]: 5
All available output_configs:0. hdmi1. lvds-lcd2. mipi-lcd3. tft-lcd4. cvbs
Choice [hdmi]: 0
All available flash:0. default1. nor
Choice [default]: 0
All available build_root:0. buildroot-2019021. ubuntu
Choice [buildroot-201902]: 0
All available gnueabi:0. gnueabi1. gnueabihf
Choice [gnueabi]: 0
  • 设置编译的环境变量:
rice@rice:~/t113/T113-i_v1.0$ source ./build/envsetup.sh
  • 我们采用一键编译 SPL、U-Boot、Linux 内核和 buildroot文件系统。
rice@rice:~/t113/T113-i_v1.0$ ./build.sh
ACTION List: mklichee;========
Execute command: mklichee 
INFO: ----------------------------------------
INFO: build lichee ...
INFO: chip: sun8iw20p1
INFO: platform: linux
INFO: kernel: linux-5.4
INFO: board: tlt113-evm-nand
INFO: output: /home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan
INFO: ----------------------------------------
INFO: build buildroot ...
Prepare br toolchain gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi.tar.xz...
make: Entering directory '/home/rice/t113/T113-i_v1.0/buildroot/buildroot-201902'...
  • 编译Qt库,使其开发板固件支持Qt应用运行环境:
rice@rice:~/t113/T113-i_v1.0$ ./build.sh qt
ACTION List: mkqt;========
Execute command: mkqt 
INFO: build Qt ...
INFO: build arm-linux-gnueabi version's Qt
/home/rice/t113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix.....
  • 打包系统镜像文件,执行之后,可以看到生成的固件文件,它默认生成两个版本的固件,分别是:nand固件和SD卡固件,我们是采用SD卡启动,所以使用SD卡固件。
rice@rice:~/t113/T113-i_v1.0$ ./build.sh pack
ACTION List: mkpack ;========
Execute command: mkpack  
INFO: packing firmware ...
INFO: Use BIN_PATH: /home/rice/t113/T113-i_v1.0/device/config/chips/t113_i/bin
copying tools file
copying configs file
copying product configs file
/home/rice/t113/T113-i_v1.0/out/pack_out/aultls32.fex
/home/rice/t113/T113-i_v1.0/out/pack_out/aultools.fex
/home/rice/t113/T113-i_v1.0/out/pack_out/boot_package.cfg
/home/rice/t113/T113-i_v1.0/out/pack_out/boot_package.fex...... dsp0.fex Len: 0x3fc78
Vdsp0.fex Len: 0x4
BuildImg 0
Dragon execute image.cfg SUCCESS !
----------image is at----------size:613M  /home/rice/t113/T113-i_v1.0/out/t113_i_linux_tlt113-evm-nand-sdboot_uart0.imgpack finish

运行环境验证

下载运行实例
  • 将编译打包后的固件(t113_i_linux_tlt113-evm-nand-sdboot_uart0.img)放到windows上,通过工具PhoenixCard.exe烧录到SD卡上。将SD卡插到读卡器上,然后插进电脑:

  • 创龙科技提供了qt的demo,我们将led_control的实例拷贝到板子上:
rice@rice:~/t113/qt-demos/led_control/bin$ scp led_control root@ip:~/
创龙T113-i上运行实例
  • 关闭默认的Qt运行程序,设置qt的环境变量
root@T113-Tronlong:~# killall Launcher
root@T113-Tronlong:~# source /etc/qtenv.sh 
add /dev/input/event1 to Qt Application.
find qt5 installed done
  • 运行实例验证Qt功能,运行效果如图:
root@T113-Tronlong:~# ./led_control

Qt开发环境

开发环境下载
  • Qt开发环境下载,作者是使用Qt 5.12.0,下载链接:https://download.qt.io/archive/qt/5.12/5.12.0/,Ubuntu需要下载:qt-opensource-linux-x64-5.12.0.run

开发环境交叉编译环境配置
  • 配置Debuggers
    • 点击菜单栏"Tools -> Options"
    • 击"Kits -> Debuggers -> Add -> Browse…"
    • 选择目标平台的GDB,路径:/home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan/buildroot/host/usr/bin/arm-linux-gnueabi-gdb

  • 配置交叉工具链
    • 点击菜单栏"Tools -> Options"
    • 击"Kits -> Compilers -> Add -> GCC -> C++ -> Browse…"
    • 选择目标平台的交叉工具链,路径:/home/rice/t113/T113-i_v1.0/out/t113_i/tlt113-evm-nand/longan/buildroot/host/usr/bin/arm-linux-gnueabi-g++

  • 配置Qt Versions
    • 点击菜单栏"Tools -> Options"
    • 击"Kits -> Qt Versions -> Add -> GCC -> C++ -> Browse…"
    • 选择目标平台的Qt Versions,路径:/home/rice/t113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/bin/qmake

  • 配置Kits
    • 点击菜单栏"Tools -> Options"
    • 击"Kits -> Kits"
    • 将 Name 修改为"T113",Device type 选择"Generic Linux Device",Compiler 的 C++选择"T113-GCC",Debugger 选择"T113-Debugger",Qt version 选择"T113-qt5",点击 Apply,然后点击 OK 完成配置

开发Qt应用

  • 作者开发了一个快速验证硬件功能的,主要功能包含:
  1. 板载LED灯控制,代码实现:
static QString ledPath = "/sys/class/leds/user-led0";void rice::ledInit()
{setLedStatus(0);ui->ledPushButton->setText("LED OFF");ui->ledPushButton->setStyleSheet("border-width:1px;""border-style:solid; ""border-color:white;""background-color:rgba(88, 88, 88, 200)");
}void rice::ledDeinit()
{}bool rice::setLedStatus(int status)
{QString cmd = "echo " + QString::number(status) + " > " + ledPath + "/brightness";if (system(cmd.toStdString().c_str()) == -1) {printf("set led status failed!\n");return false;}return true;
}int rice::getLedStatus(void)
{QString cmd = "cat " + ledPath + "/brightness";FILE *fp = popen(cmd.toStdString().c_str(), "r");if (fp == nullptr) {return -1;}char led_status[32];if (fgets(led_status, sizeof(led_status), fp) == nullptr) {printf("fgets error: %s\n", cmd.toStdString().c_str());pclose(fp);return -1;}pclose(fp);return atoi(led_status);
}void rice::on_ledPushButton_clicked()
{int ledStatus = getLedStatus();if (ledStatus == 0) {setLedStatus(1);ui->ledPushButton->setText("LED ON");ui->ledPushButton->setStyleSheet("border-width:1px;""border-style:solid; ""border-color:white;""background-color:rgba(00, 205, 00, 255)");}else {setLedStatus(0);ui->ledPushButton->setText("LED OFF");ui->ledPushButton->setStyleSheet("border-width:1px;""border-style:solid; ""border-color:white;""background-color:rgba(88, 88, 88, 200)");}
}
  1. 板载按键检测,代码实现:
void rice::keyInit()
{keyFd = open(keyPath.toUtf8().data(), O_RDONLY);if(keyFd == -1){printf("Can not open file(%s)", keyPath.toUtf8().data());return;}ui->keyTextEdit->append("Key Monitor!\n");ui->keyTextEdit->append("Key user0 pressed!");keyNotify = new QSocketNotifier(this->keyFd, QSocketNotifier::Read, this);connect(this->keyNotify, SIGNAL(activated(int)), this, SLOT(keyHandler()));
}void rice::keyDeinit()
{}void rice::keyHandler()
{struct input_event buf;if(read(keyFd, &buf, sizeof(struct input_event)) > 0){if(buf.code == KEY_PROG1 && buf.value == 1){ui->keyTextEdit->append("Key user0 pressed!");}}
}
  1. RTC时钟获取并显示,代码实现:
void rice::dateInit()
{struct rtc_time rtc_tm_temp;dateFd = open(datePath.toUtf8().data(), O_RDONLY);if(dateFd == -1){printf("Can not open file(%s)", keyPath.toUtf8().data());return;}if(ioctl(dateFd, RTC_RD_TIME, &rtc_tm_temp) < 0){printf("Get date failed");return;}ui->yearLineEdit->setText(QString::number(rtc_tm_temp.tm_year + 1900));ui->monthLineEdit->setText(QString::number(rtc_tm_temp.tm_mon + 1));ui->dayLineEdit->setText(QString::number(rtc_tm_temp.tm_mday));
}void rice::dateDeint()
{}
  1. 网络调试助手,代码实现:
void rice::netInit()
{server = new QTcpServer();socket = new QTcpSocket();
}void rice::netDeint()
{}void rice::netNewClientConnect()
{socket = server->nextPendingConnection();connect(socket, &QTcpSocket::readyRead, this, &rice::netNewRcve);
}void rice::on_netPushButton_clicked()
{int port = ui->portLineEdit->text().toInt();if(ui->netPushButton->text() == tr("Open")){if(ui->typeComboBox->currentText() == tr("Server")){connect(server, &QTcpServer::newConnection, this, &rice::netNewClientConnect);if(!server->listen(QHostAddress::Any, port)){printf("Listen failed\n");return;}}else if(ui->typeComboBox->currentText() == tr("Client")){QString ip = ui->ipComboBox->currentText();socket->abort();socket->connectToHost(ip, port);if(!socket->waitForConnected(3000)){printf("Connect server failed");return;}connect(socket, &QTcpSocket::readyRead, this, &rice::netNewRcve);}ui->netPushButton->setText("Close");}else if(ui->netPushButton->text() == tr("Close")){if(ui->typeComboBox->currentText() == tr("Server")){socket->abort();server->close();}else if(ui->typeComboBox->currentText() == tr("Client")){socket->disconnectFromHost();}ui->netPushButton->setText("Open");}
}void rice::on_sendPushButton_clicked()
{if(socket->isOpen()){socket->write(ui->sendLineEdit->text().toUtf8().data());}
}void rice::netNewRcve()
{ui->recvTextEdit->append(socket->readAll());
}void rice::on_typeComboBox_currentIndexChanged(const QString &arg1)
{if(arg1 == tr("Server")){ui->ipComboBox->setEditable(false);}else{ui->ipComboBox->setEditable(true);}
}

Qt应用验证

  1. 板载LED灯控制验证,当点击开关LED按钮时,LED灯会根据状态亮灭:

  1. 当应用运行起来时,会获取RTC时间,并显示:

  1. 当板载按键按下时,窗口会显示按键按下:

  1. 网络调试助手支持TCP客户端和TCP服务器两种类型,下面演示服务器验证。开发板上设置板子的IP,和端口号,然后通过PC上网络调试助手连接上板子,并克实现数据的收发:
  • 客户端往服务器发送数据

  • 服务器往客户端发送数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/211176.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顺丰JAVA开发一面—面试实战经验分析【已通过】

文章目录 面试总结面试开始项目相关基础知识反问环节 顺丰JAVA开发一面面试过程中的问题确实涵盖了很多方面&#xff0c;从项目架构到基础知识再到具体技术细节都有所涉及。 面试官的提问风格也是比较开放的&#xff0c;注重考察面试者的深度理解和解决问题的能力。以下是对每个…

tcpdump抓包命令

tcpdump抓包命令 tcpdump 的抓包保存到文件的命令参数是-w xxx.cap 抓eth1的包 tcpdump -i eth1 -w /tmp/xxx.cap抓 192.168.1.123的包 tcpdump -i eth1 host 192.168.1.123 -w /tmp/xxx.cap抓192.168.1.123的80端口的包 tcpdump -i eth1 host 192.168.1.123 and port 80 -w …

深度学习火车票识别系统 计算机竞赛

文章目录 0 前言1 课题意义课题难点&#xff1a; 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 图像识别 火车票识别系统 该项目较为新颖&#xff0c;适…

【人工智能Ⅰ】实验7:K-means聚类实验

实验7 K-means聚类实验 一、实验目的 学习K-means算法基本原理&#xff0c;实现Iris数据聚类。 二、实验内容 应用K-means算法对iris数据集进行聚类。 三、实验结果及分析 0&#xff1a;输出数据集的基本信息 参考代码在main函数中首先打印了数据、特征名字、目标值、目标…

【STM32】TIM定时器基本定时功能

第一部分&#xff1a;定时器基本定时的功能&#xff1b; 第二部分&#xff1a;定时器的输出比较功能&#xff1b; 第三部分&#xff1a;定时器输入捕获的功能&#xff1b; 第四部分&#xff1a;定时器的编码接口。 1 TIM简介 TIM&#xff08;Timer&#xff09;定时器&#…

实验报告-实验四(时序系统实验)

软件模拟电路图 说明 SW&#xff1a;开关&#xff0c;共六个Q1~Q3&#xff1a;输出Y0~Y3&#xff1a;输出 74LS194 首先&#xff0c;要给S1和S0高电位&#xff0c;将A~D的数据存入寄存器中&#xff08;如果开始没有存入数据&#xff0c;那么就是0000在里面移位&#xff0c;不…

“新KG”视点 | 知识与大模型融合技术在电信领域应用探索

OpenKG 大模型专辑 导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力&#xff0c;知识图谱则丰富了表示知识的方式&#xff0c;两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下&#xff0c;OpenKG组织…

SI24R03 高度集成低功耗SOC 2.4G 收发一体芯片

今天给大家介绍一款Soc 2.4G 收发一体模块-SI24R03 Si24R03是一款高度集成的低功耗无线SOC芯片&#xff0c;芯片为QFN32 5x5mm封装&#xff0c;集成了资源丰富的MCU内核与2.4G收发器模块&#xff0c;最低功耗可达1.6uA&#xff0c;极少外围器件&#xff0c;大幅降低系统应用成本…

DNS协议(DNS规范、DNS报文、DNS智能选路)

目录 DNS协议基本概念 DNS相关规范 DNS服务器的记录 DNS报文 DNS域名查询的两种方式 DNS工作过程 DNS智能选路 DNS协议基本概念 DNS的背景 我们知道主机通信需要依靠IP地址&#xff0c;但是每次通过输入对方的IP地址和对端通信不够方便&#xff0c;IP地址不好记忆 因此提…

【Spring Boot】如何在IntelliJ IDEA中由同一份spring boot源码运行多个不同端口的实例

我们需要使用一个服务有多个实例的测试场景&#xff0c;那么我们就需要在IntelliJ IDEA中通过不同的端口运行不同的实例&#xff0c;并且运行时的源代码是一样的&#xff0c;那么我们可以在IntelliJ IDEA这样操作&#xff0c;接下来以UserApplication服务为例&#xff1a; 复制…

华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

Linux系统之部署Plik临时文件上传系统

Linux系统之部署Plik临时文件上传系统 一、Plik介绍1.1 Plik简介1.2 Plik特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、下载Plik软件包4.1 创建下载目录4.2 下载Plik软件包4.3 查看下载的Plik软件…

Python sorted函数及用法以及如何用json模块存储数据

Python sorted函数及用法 sorted() 函数与 reversed() 函数类似&#xff0c;该函数接收一个可迭代对象作为参数&#xff0c;返回一个对元素排序的列表。 在交互式解释器中测试该函数&#xff0c;可以看到如下运行过程&#xff1a; >>> a [20, 30, -1.2, 3.5, 90, 3.…

【已解决】Win10端口被占用

​ 我总是在启动项目的时候失败&#xff0c;被告知端口号被占用&#xff0c;明明没有被占用(可能是系统卡了或者其它问题)&#xff0c;但是又不想改端口号&#xff0c;或者重启电脑&#xff0c;那怎么办呢&#xff1f; 第一步&#xff1a;打开命令行窗口&#xff0c;以管理员…

植物单细胞基础工程之标记基因数据库

前 言 单细胞转录组这把火已经爆燃到了植物领域。 单次实验即可获得上万个细胞的基因表达数据&#xff08;大老远都觉得香&#xff09;&#xff0c;直接把分辨率从组织水平干到了单个细胞水平&#xff08;当然&#xff0c;最后说事大多数还是基于细胞cluster或者sub cluster&…

vr工业制造流程3D模拟仿真可视化展示

工业仿真3D数字化展示系统具有多方面的独特之处&#xff0c;主要体现在以下几个方面&#xff1a; 1、真实感和交互性&#xff1a;该系统可以将实际的工业设备、产品、场景等进行数字化建模&#xff0c;通过三维图形技术将其呈现在计算机屏幕上&#xff0c;使用户可以在虚拟环境…

Matlab 加权均值质心计算(WMN)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很简单,即将之前的均值中心,引入相关的权重函数(通常与距离有关),以此为每个点进行赋权,最后即可得到一个加权均值中心: 二、实现代码 %% ********<

vue+elementUI的tabs与table表格联动固定与滚动位置

有个变态的需求&#xff0c;要求tabs左侧固定&#xff0c;右侧是表格&#xff0c;点击左侧tab&#xff0c;右侧表格滚动到指定位置&#xff0c;同时&#xff0c;右侧滚动的时候&#xff0c;左侧tab高亮相应的item 上图 右侧的高度非常高&#xff0c;内容非常多 常规的瞄点不适…

stm32项目(11)——基于stm32的俄罗斯方块游戏机

1.功能设计 使用stm32f103zet6平台&#xff0c;以及一块LCD屏幕&#xff0c;实现了一个俄罗斯方块游戏机。可以用按键调整方块的位置、还可以控制方块下降的速度&#xff01; 2.视频演示 俄罗斯方块 3.俄罗斯方块发展史 俄罗斯方块是一种经典的拼图游戏&#xff0c;由苏联俄罗…

SpringBoot_02

Web后端开发_07 SpringBoot_02 SpringBoot原理 1.配置优先级 1.1配置 SpringBoot中支持三种格式的配置文件&#xff1a; application.propertiesapplication.ymlapplication.yaml properties、yaml、yml三种配置文件&#xff0c;优先级最高的是properties 配置文件优先级…