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

【RP-RV1126】配置一套简单的板级配置

文章目录

  • 官方配置
  • 新建一套新配置
    • 新建板级pro-liefyuan-rv1126.mk配置文件
    • 新建一个Buildroot的defconfigs文件
  • 吐槽:RP-RV1126 的SDK奇怪的地方
    • make ARCH=arm xxx_defconfig 生成的.config文件位置不一样
    • savedefconfig命令直接替换原配置文件
    • 坑爹的地方
  • Buildroot上增加WiFi和BT
    • 增加BT需要确定连接的串口号
    • WiFi/BT模块的模块和固件位置
    • BT使用过程:
    • 进入BT交互模式
  • 测试WiFi速度(AP6256)

官方配置

buildroot官方配置完整编译需要30分钟。我想搞一个简单的配置,可以快速编译,快速测试一些简单的功能。

命令对应的文件描述
./build.sh lunchpro-liefyuan-rv1126.mk选择全局配置文件
source envset.shrockchip_rv1126_rv1109_liefyuan_defconfig选择Buildroot配置文件

新建一套新配置

新建板级pro-liefyuan-rv1126.mk配置文件

定义一个自己的pro-liefyuan-rv1126.mk文件:
基于原来的文件:./device/rockchip/rv1126_rv1109/pro-rv1126.mk
改为:./device/rockchip/rv1126_rv1109/pro-liefyuan-rv1126.mk

拷贝目录sdk/device/rockchip/rv1126_rv1109/下的pro-rv1126.mk改成自己的名字:pro-liefyuan-rv1126.mk

目前的打算,只修改Buildroot文件系统的配置,Uboot和Kernel的配置不变。

# Buildroot config
export RK_CFG_BUILDROOT=rockchip_rv1126_rv1109_facial_gate

改为:

# Buildroot config
export RK_CFG_BUILDROOT=rockchip_rv1126_rv1109_liefyuan

pro-liefyuan-rv1126.mk 的全部内容:

#!/bin/bash# Target arch
export RK_ARCH=arm
# Uboot defconfig
export RK_UBOOT_DEFCONFIG=rv1126
# Uboot image format type: fit(flattened image tree)
export RK_UBOOT_FORMAT_TYPE=fit
# Kernel defconfig
export RK_KERNEL_DEFCONFIG=rv1126_defconfig
# Kernel defconfig fragment
export RK_KERNEL_DEFCONFIG_FRAGMENT=rv1126-facial-gate.config
# Kernel dts
#export RK_KERNEL_DTS=rv1109-evb-ddr3-v13-facial-gate
export RK_KERNEL_DTS=pro-rv1126
# boot image type
export RK_BOOT_IMG=zboot.img
# kernel image path
export RK_KERNEL_IMG=kernel/arch/arm/boot/zImage
# kernel image format type: fit(flattened image tree)
export RK_KERNEL_FIT_ITS=boot.its
# parameter for GPT table
export RK_PARAMETER=parameter-facial-gate.txt
# Buildroot config
export RK_CFG_BUILDROOT=rockchip_rv1126_rv1109_liefyuan
# Recovery config
export RK_CFG_RECOVERY=rockchip_rv1126_rv1109_recovery
# Recovery image format type: fit(flattened image tree)
export RK_RECOVERY_FIT_ITS=boot4recovery.its
# ramboot config
export RK_CFG_RAMBOOT=
# Pcba config
export RK_CFG_PCBA=
# Build jobs
export RK_JOBS=12
# target chip
export RK_TARGET_PRODUCT=rv1126_rv1109
# Set rootfs type, including ext2 ext4 squashfs
export RK_ROOTFS_TYPE=ext4
# rootfs image path
export RK_ROOTFS_IMG=rockdev/rootfs.${RK_ROOTFS_TYPE}
# rootfs system
export RK_ROOTFS_SYSTEM=buildroot
# Set ramboot image type
export RK_RAMBOOT_TYPE=
# Set oem partition type, including ext2 squashfs
export RK_OEM_FS_TYPE=ext2
# Set userdata partition type, including ext2, fat
export RK_USERDATA_FS_TYPE=ext2
#OEM config
export RK_OEM_DIR=oem_facial_gate
# OEM build on buildroot
export RK_OEM_BUILDIN_BUILDROOT=NO
#userdata config, if not define this, system will format by RK_USERDATA_FS_TYPE
export RK_USERDATA_DIR=userdata_normal
#misc image
export RK_MISC=wipe_all-misc.img
#choose enable distro module
export RK_DISTRO_MODULE=
# Define pre-build script for this board
export RK_BOARD_PRE_BUILD_SCRIPT=app-build.sh
# Define package-file for update.img
export RK_PACKAGE_FILE=rv1126_rv1109-package-file

新建一个Buildroot的defconfigs文件

定义一个自己的Buildroot的configs文件:
基于原来的文件:./buildroot/configs/rockchip_rv1126_rv1109_facial_gate_defconfig
改为:./buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig

$ cp ./buildroot/configs/rockchip_rv1126_rv1109_facial_gate_defconfig ./buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig

原来的Buildroot配置太复杂了我精简到如下:

buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig 文件的全部内容:

#include "base.config"
#include "base_extra.config"
#include "debug.config"
#include "audio.config"
#include "wifi.config"
#include "network.config"
#include "rv1126_rv1109_arm.config"
#include "updateEngine.config"
BR2_PACKAGE_RKWIFIBT_AP6256=y
BR2_PACKAGE_RKWIFIBT_BTUART="ttyS0"
BR2_PACKAGE_DRM_DISPLAY_OUTPUT=y
BR2_PACKAGE_LIBERATION=y
BR2_PACKAGE_SOURCE_HAN_SANS_CN=y
BR2_PACKAGE_QT5BASE_WIDGETS=y
BR2_PACKAGE_QT5BASE_FONTCONFIG=y
BR2_PACKAGE_QT5BASE_GIF=y
BR2_PACKAGE_QT5BASE_JPEG=y
BR2_PACKAGE_QT5BASE_PNG=y
BR2_PACKAGE_QT5BASE_USE_RGA=y
BR2_PACKAGE_QT5BASE_LINUXFB_ARGB32=y
BR2_PACKAGE_QT5MULTIMEDIA=y
BR2_PACKAGE_QT5QUICKCONTROLS=y
BR2_PACKAGE_QT5SERIALPORT=y
BR2_PACKAGE_BLUEZ_TOOLS=y
BR2_PACKAGE_BLUEZ5_UTILS=y
BR2_PACKAGE_BLUEZ5_UTILS_OBEX=y
BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y
BR2_PACKAGE_BLUEZ5_UTILS_GATTTOOL=y
BR2_PACKAGE_DHCP=y

这里其实就设置了WiFi蓝牙相关和Qt相关的配置,整个编译下来不到8分钟。

吐槽:RP-RV1126 的SDK奇怪的地方

make ARCH=arm xxx_defconfig 生成的.config文件位置不一样

  • 一般来说(主线Buildroot),我在Buildroot根目录下运行命令:make ARCH=arm xxxx_defconfig,会在当前目录下产生一个.config文件,但是Rockchip的不一样,运行了上述命令后,它是会在这里产生该文件:./output/xxxx/.config

savedefconfig命令直接替换原配置文件

liefyuan@ubuntu:~/rv1126/rp_rv1126_sdk/buildroot$ make ARCH=arm savedefconfigGEN     /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/output/rockchip_rv1126_rv1109_liefyuan/Makefile
grep "#include" /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig > /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig.split || true
cat /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig >> /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig.split
/home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/build/defconfig_hook.py -s /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig.split /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig
rm /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig.split

/home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/build/defconfig_hook.py -s /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig.split /home/liefyuan/rv1126/rp_rv1126_sdk/buildroot/configs/rockchip_rv1126_rv1109_liefyuan_defconfig 这句话把我震惊了,我运行命令make ARCH=arm savedefconfig之后它直接保存到原文件了。。。。

坑爹的地方

  • 清除buildroot的编译内容,需要进入sdk/buildroot/目录进行make clean才可以清除。
  • ./build.sh cleanall并不能清除所有生成文件
  • 重新编译的顺序:
    • 全部清除:./build.sh cleanall
    • 删除固件等:cd ./rockdev 然后 rm ./*
    • 重新编译:./build.sh all
    • 构建一次完整固件:./build.sh updateimg

Buildroot上增加WiFi和BT

增加BT需要确定连接的串口号

在这里插入图片描述

在这里插入图片描述
根据以上信息,确认BT串口连接的是UART0,也就是ttyS0。

因此Buildroot里面配置相应的串口号。

在这里插入图片描述

WiFi/BT模块的模块和固件位置

开发板上的位置

/system/lib/modules/bcmdhd.ko #驱动ko(如果是ko编译的话)
/system/etc/firmware/fw_bcm43455c0_ag.bin #驱动firmware文件存放位置
/system/etc/firmware/nvram_ap6255.txt #驱动nvram文件存放位置
/system/etc/firmware/BCM4345C0.hcd #蓝牙firmware文件(如果有蓝牙功能)

BT使用过程:

killall brcm_patchram_plus1echo 0 > /sys/class/rfkill/rfkill0/state # 下电
echo 1 > /sys/class/rfkill/rfkill0/state # 上电brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2byt
es --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /s
ystem/etc/firmware/bcm43438a1.hcd /dev/ttyS0 &hciconfig -a
hciconfig hci0 uphcitool lescan
hcitool scan

进入BT交互模式

cd /usr/libexec/bluetooth/
./bluetoothd -n -d &bluetoothctl

在bluetoothctl中,我们可以进行手动配对操作。配对时,我们需要提供设备的MAC地址,并且将设备设置为可被发现模式。

$ bluetoothctl
[bluetooth]# power on
[bluetooth]# discoverable on
[bluetooth]# scan on
[bluetooth]# devices
Device 20:13:03:22:66:19 Bose SoundSport Wireless
[bluetooth]# pair 20:13:03:22:66:19
[bluetooth]# trust 20:13:03:22:66:19
[bluetooth]# connect 20:13:03:22:66:19
[bluetooth]# exit

测试WiFi速度(AP6256)

ubuntu端服务器

liefyuan@ubuntu:~/rv1126/rp_rv1126_sdk/buildroot$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.105 port 5001 connected with 192.168.1.111 port 49918
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.4 sec  37.6 MBytes  30.3 Mbits/sec

RV1126开发板端:

[root@RV1126_RV1109:/etc]# iperf -c 192.168.1.105 -i 1
------------------------------------------------------------
Client connecting to 192.168.1.105, TCP port 5001
TCP window size: 43.8 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.111 port 49918 connected with 192.168.1.105 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  3.25 MBytes  27.3 Mbits/sec
[  3]  1.0- 2.0 sec  3.62 MBytes  30.4 Mbits/sec
[  3]  2.0- 3.0 sec  3.75 MBytes  31.5 Mbits/sec
[  3]  3.0- 4.0 sec  4.00 MBytes  33.6 Mbits/sec
[  3]  4.0- 5.0 sec  4.38 MBytes  36.7 Mbits/sec
[  3]  5.0- 6.0 sec  3.62 MBytes  30.4 Mbits/sec
[  3]  6.0- 7.0 sec  3.12 MBytes  26.2 Mbits/sec
[  3]  7.0- 8.0 sec  4.00 MBytes  33.6 Mbits/sec
[  3]  8.0- 9.0 sec  3.88 MBytes  32.5 Mbits/sec
[  3]  9.0-10.0 sec  4.00 MBytes  33.6 Mbits/sec
[  3]  0.0-10.1 sec  37.6 MBytes  31.1 Mbits/sec

测试速度约37.6MByte

相关文章:

【RP-RV1126】配置一套简单的板级配置

文章目录 官方配置新建一套新配置新建板级pro-liefyuan-rv1126.mk配置文件新建一个Buildroot的defconfigs文件 吐槽:RP-RV1126 的SDK奇怪的地方make ARCHarm xxx_defconfig 生成的.config文件位置不一样savedefconfig命令直接替换原配置文件坑爹的地方 Buildroot上增…...

解决uniapp的video标签和transition属性使用时出现错位的问题

template:三个视频都每个占满屏幕,点击按钮滚动最外层bgBox元素, style: 想要加上动画过渡效果: 这是显示第一个视频: 点按钮向上滑动滚动到第二个视频时: 视频错位了 ,因为视频消失又出现的时候…...

电脑校园杂志电脑校园杂志社电脑校园编辑部2023年第9期目录

智慧校园 基于vue.js的“微校园”APP设计 吴秋伟 周慧 董锐 李仙云 余维 邓巧平 彭微1-3 探析AIGC对网络安全的革新:挑战与机遇共存 康良成 张朋4-6 文本信息自动摘要技术综述 滕宇飞7-9《电脑校园》投稿:cn7kantougao163.com 区块链应用于图书馆服务的策…...

NSSCTF做题第十页(1)

[GXYCTF 2019]禁止套娃 看源代码也没什么东西&#xff0c;扫一下看看 发现了git泄露 话不多说直接开整 下载下来了 flag.php 还是代码审计 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){ if (!preg_…...

文件详细操作过程(C语言)

&#x1f31e;&#x1f31e;&#x1f31e;千淘万漉虽辛苦&#x1f31e;&#x1f31e;&#x1f31e; &#x1f31e;&#x1f31e;&#x1f31e;吹尽狂沙始到金&#x1f31e;&#x1f31e;&#x1f31e; &#x1f307;C语言文件操作 &#x1f34a;文件的定义&#x1f34b;什么是文…...

python使用ffmpeg来制作音频格式转换工具(优化版)

简介:一个使用python加上ffmpeg模块来进行音频格式转换的工具。 日志: 20231030:第一版,设置了简单的UI布局和配色,实现音频转为Mp3、AAC、wav、flac四种格式。可解析音频并显示信息,可设置转换后的保存路径 UI界面: 编程平台:visual studio code 编程语言:python 3…...

Debug技巧-不启用前端访问后端

在日常开发中&#xff0c;我们经常会遇到各种问题需要调试&#xff0c;前后端都启动需要耗费一定的时间和内存&#xff0c;方便起见&#xff0c;可以直接用抓包数据访问后端&#xff0c;这里我们需要用到Postman或者ApiFox 抓包数据 在系统前台触发后端请求&#xff0c;在控制…...

由CAB/PAB展开的一些思考

又到了一月保底一篇订阅号文章的时候&#xff0c;上周受到Oracle邀请&#xff0c;参加了在上海Oracle办公室举行的CAB&#xff08;The 13th Oracle China Customer Advisory Board Metting&#xff09;/ PAB&#xff08;The 3th Oracle China Partner Advisory Board Metting&…...

系列十五、idea全局配置

一、全局Maven配置 IDEA启动页面>Customize>All settings>Build,Execution,Deployment>Build Tools>Maven 二、全局编码配置 IDEA启动页面>Customize>All settings>Editor>File Encodings 三、全局激活DevTools配置 IDEA启动页面>Customize>A…...

高德Go生态建设与研发实践

序 高德在构建Go生态演化过程中&#xff0c;已经实现了QPS从0到峰值千万的飞跃&#xff0c;本篇文章主要介绍在此过程中积累的一些技术决策及性能优化和重构经验。阅读本文读者会有以下3点收获&#xff1a; 1.高德Go生态发展历程及现状分析 2.高德云原生Serverless落地情况&…...

SpringCloud中Turbine 1.X版本BUG

错误出现在spring-cloud-turbine-stream 包中&#xff0c;因为这个包会启动一个netty-port容器&#xff0c;并将它的server.port 设置为-1 &#xff0c;从而关闭了Servlet容器&#xff0c;这是官方包的一个Bug&#xff0c;不过Spring Boot 2.0已修复&#xff0c;要么升级包要么…...

SCSS的用法有哪些?分别举例

SCSS的用法主要有&#xff1a; 1&#xff1a; 变量&#xff1a;在SCSS中&#xff0c;我们可以通过 $ 符号来定义变量。比如&#xff0c;我们可以定义一个颜色变量 $color: red;&#xff0c;然后在我们需要使用这个颜色的时候&#xff0c;直接使用 $color 就可以了。 2&#x…...

Spring controller层请求数据和响应数据的简单方法

记录一些很基本的使用方法。 一、GET请求传参方法&#xff1a; 1.方法一&#xff1a;把参数传到&#xff1f;之后 使用注解RequestParam // 假如传值了current和limit /students?current1&limit20 RequestMapping(value "/students", method RequestMetho…...

中国商界杂志中国商界杂志社中国商界编辑部2023年第10期目录查询

要闻 我国旅游市场步入理性繁荣阶段 赵熠如; 10-11 产业 老国货品牌再迎高光时刻 能否留住流量 涂瀚文; 12-13《中国商界》投稿&#xff1a;cnqikantg126.com 金融集聚有力 促进长三角城市高质量发展 刘盛坤; 14-17 辽宁农贸市场亟待优化升级路径在哪儿&#x…...

记录 vue + vuetify + electron 安装过程

NodeJs 版本&#xff1a; 20 内容来自&#xff1a; Electron Vue.js Vuetify 构建跨平台应用_思月行云的博客-CSDN博客文章浏览阅读61次。Go coding!https://blog.csdn.net/kenkao/article/details/132600542 npm config set registry https://registry.npm.taobao.org np…...

短视频账号矩阵系统saas源码搭建/技术

一、短视频矩阵系统建模----技术api接口--获取用户授权 技术文档分享&#xff1a; 本系统采用MySQL数据库进行存储&#xff0c;数据库设计如下&#xff1a; 1.用户表&#xff08;user&#xff09;&#xff1a; - 用户ID&#xff08;user_id&#xff09; - 用户名&#xff08…...

词向量模型Word2Vec

Word2Vec CBOW连续词袋模型例子CBOW模型的embeddings层CBOW模型的线性层 总结 skip-gram跳字模型例子Skip-Gram模型的结构 CBOW和skip-gram的目标都是迭代出词向量字典&#xff08;嵌入矩阵&#xff09;——embeddings CBOW连续词袋模型 根据上下文词汇预测目标词汇 例子 使…...

公会发展计划(GAP):经过实战考验的 Web3 任务模式

2020 年 12 月&#xff0c;Yield Guild Games 踏上了一段征程&#xff0c;以表彰兢兢业业的 Web3 游戏玩家所付出的时间和努力&#xff0c;同时为他们提供利用自己的技能促进个人成长的机会。这一旅程的第一步是于 2022 年 7 月推出的公会发展计划&#xff08;GAP&#xff09;。…...

网络工程师基础知识(2)

一、端口可以分为系统端口、登记端口、客户端使用端口。 (1) 系统端口。该端口的取值范围为[0,1023]. (2) 登记端口。登记端口是为没有熟知端口号的应用程序使用的&#xff0c;端口范围为[1024,49151]。这些端口必须在 IANA 登记以避免重复。 (3) 客户端使用端口。这类端口仅…...

创建ABAP数据库表和ABAP字典对象-理解表字段02

理解表字段 这一步&#xff0c;您将定义表字段。首先&#xff0c;你需要了解你的需求: 内置的ABAP类型和新定义的字段类型 下面我们将会创建3个字段类型在数据库表中。 ●内置字段类型&#xff1a;最快的方法:应用系统已经提供好的字段类型&#xff0c;基本类型、长度和描述…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...