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

《ESP32-S3使用指南—IDF版 V1.6》第三十八章 SPIFFS实验

第三十八章 SPIFFS实验

1)实验平台:正点原子DNESP32S3开发板

2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6

3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子DNESP32S3开发板技术交流群:132780729

155537c2odj87vz1z9vj6l

155537nfqovl2gg9faaol9

上一章实验中已经成功驱动SD卡,并可对SD卡进行读写操作,但读写SD卡时都是直接读出或写入二进制数据,这样使用起来显得十分不方便,因此本章将介绍SPIFFS,SPIFFS是一个用于SPI NOR flash设备的嵌入式文件系统,支持磨损均衡以及文件系统一致性检查等功能。通过本章的学习,读者将学习到SPIFFS的基本使用。
本章分为如下几个小节:
38.1 SPIFFS简介
38.2 硬件设计
38.3 程序设计
38.4 下载验证

38.1 SPIFFS介绍
SPIFFS是一个用于嵌入式目标上的SPINOR flash设备的文件系统,并且有如下特点:
l 小目标,没有堆的少量RAM
l 只有大范围的数据块才能被擦除
l 擦除会将块中的所有位重置为1
l 写操作将1置0
l 0只能被擦除成1
l 磨损均衡
以上几点是SPIFFS的特点,下面则说明了SPIFFS具体能做些什么:
l 专门为低ram使用而设计
l 使用静态大小的ram缓冲区,与文件的数量无关
l 类可移植操作系统接口:打开、关闭、读、写、查找、统计等
l 它可以在任何NOR闪存上运行,不仅是SPI闪存,理论上也可以在微处理器的嵌入式闪存上运行
l 多个spiffs配置可以在相同的目标上运行—甚至可以在相同的SPI闪存设备上运行
l 实现静态磨损调平(也就是flash的寿命维护)
l 内置文件系统一致性检查
l 高度可配置的

38.2 硬件设计
38.2.1 例程功能
1.在nor flash指定区域新建holle.txt文件,然后对这文件进行读写操作
2. LED闪烁,指示程序正在运行

38.2.2 硬件资源

  1. LED灯
    LED -IO0
  2. XL9555
    IIC_SDA-IO41
    IIC_SCL-IO42
  3. SPILCD
    CS-IO21
    SCK-IO12
    SDA-IO11
    DC-IO40(在P5端口,使用跳线帽将IO_SET和LCD_DC相连)
    PWR- IO1_3(XL9555)
    RST- IO1_2(XL9555)
  4. SPIFFS

38.2.3 原理图
本章实验使用的SPIFFS为软件库,因此没有对应的连接原理图。
38.3 程序设计
38.3.1 程序流程图
程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:

image002
图38.3.1.1 IIC_EXIO实验程序流程图
38.3.2 SPIFFS函数解析
SPIFFS涉及到的文件并不算多,主要调用到了C库的函数,关于C库的函数我们在这里就不过多介绍了,主要介绍一下调用到ESP32 IDF库中的函数。
1,注册装载SPIFFS
该函数使用给定的路径前缀将SPIFFS注册并装载到VFS,其函数原型如下所示:

esp_err_tesp_vfs_spiffs_register(constesp_vfs_spiffs_conf_t * conf);

该函数的形参描述,如下表所示:

QQ截图20250912170719

表38.3.2.1 函数esp_vfs_spiffs_register ()形参描述
该函数的返回值描述,如下表所示:

QQ截图20250912170732

表38.3.2.2 函数esp_vfs_spiffs_register ()返回值描述
该函数使用esp_vfs_spiffs_conf_t类型的结构体变量传入,该结构体的定义如下所示:

QQ截图20250912170744

表38.3.2.3 esp_vfs_spiffs_conf_t结构体参数值描述
完成上述结构体参数配置之后,可以将结构传递给esp_vfs_spiffs_register函数,用以实例化SPIFFS。
2,获取SPIFFS的信息
该函数用于获取SPIFFS的信息,其函数原型如下所示:

esp_err_tesp_spiffs_info(const char*partition_label,size_t *total_bytes,size_t *used_bytes);

该函数的形参描述,如下表所示:

QQ截图20250912170753

表38.3.2.4 函数esp_spiffs_info ()形参描述
该函数的返回值描述,如下表所示:

QQ截图20250912170801

表38.3.2.5 函数esp_spiffs_info ()返回值描述
3,注销和卸载SPIFFS
该函数从VFS注销和卸载SPIFFS,其函数原型如下所示:

esp_err_tesp_vfs_spiffs_unregister(const char*partition_label);

该函数的形参描述,如下表所示:

QQ截图20250912170810

表38.3.2.6 函数esp_vfs_spiffs_unregister ()形参描述
该函数的返回值描述,如下表所示:

QQ截图20250912170817

表38.3.2.7 函数esp_vfs_spiffs_unregister ()返回值描述

38.3.3 SPIFFS驱动解析
在IDF版的27_spiffs例程中,作者在分区表中添加了SPIFFS的内容,27_spiffs \components\BSP路径下并无新的驱动文件增加。分区表内容如下:

# ESP-IDFPartition Table
# Name,     Type,    SubType,     Offset,     Size,    Flagsnvs,      data,     nvs,         0x9000,     0x6000,   ,phy_init, data,     phy,         0xf000,     0x1000,   ,factory,  app,      factory,     0x10000,    0x1F0000, ,vfs,      data,     fat,         0x200000,   0xA00000, ,storage,  data,     spiffs,      0xc00000,   0x400000, ,

38.3.4 CMakeLists.txt文件
打开本实验BSP下的CMakeLists.txt文件,其内容如下所示:

set(src_dirsIICLCDLEDSPIXL9555)
set(include_dirsIICLCDLEDSPIXL9555)
set(requiresdriver)
idf_component_register(SRC_DIRS${src_dirs}
INCLUDE_DIRS ${include_dirs}REQUIRES ${requires})
component_compile_options(-ffast-math -O3 -Wno-error=format=-Wno-format)

该例程驱动文件与依赖库并没有新的文件添加。
38.3.5 实验应用代码
打开main/main.c文件,该文件定义了工程入口函数,名为app_main。该函数代码如下。

i2c_obj_ti2c0_master;
#defineDEFAULT_FD_NUM          5
#define DEFAULT_MOUNT_POINT     "/spiffs"
#defineWRITE_DATA              "ALIENTEKESP32-S3\r\n"
static const char               *TAG = "spiffs";
/**
* @brief      spiffs初始化
* @param      partition_label:分区表的分区名称
* @param      mount_point:文件系统关联的文件路径前缀
* @param      max_files:可以同时打开的最大文件数
* @retval     无
*/
esp_err_tspiffs_init(char *partition_label,char *mount_point,size_tmax_files)
{/* 配置spiffs文件系统各个参数 */esp_vfs_spiffs_conf_t conf = {.base_path= mount_point,.partition_label= partition_label,.max_files= max_files,.format_if_mount_failed= true,};/* 使用上面定义的设置来初始化和挂载SPIFFS文件系统 */esp_err_t ret_val =esp_vfs_spiffs_register(&conf);/* 判断SPIFFS挂载及初始化是否成功 */if (ret_val!= ESP_OK){if (ret_val== ESP_FAIL){printf("Failedto mount or format filesystem\n");}else if (ret_val== ESP_ERR_NOT_FOUND){printf("Failedto find SPIFFS partition\n");}else{printf("Failed to initialize SPIFFS(%s)\n",esp_err_to_name(ret_val));}returnESP_FAIL;}/* 打印SPIFFS存储信息 */size_t total = 0, used = 0;ret_val =esp_spiffs_info(conf.partition_label, &total, &used);if (ret_val!= ESP_OK){ESP_LOGE(TAG,"Failed to get SPIFFS partitioninformation(%s)",esp_err_to_name(ret_val));}else{ESP_LOGE(TAG, "Partitionsize: total: %d, used: %d", total, used);}return ret_val;
}
/**
* @brief      注销spiffs初始化
* @param      partition_label:分区表标识
* @retval     无
*/
esp_err_tspiffs_deinit(char *partition_label)
{returnesp_vfs_spiffs_unregister(partition_label);
}
/**
* @brief      测试spiffs
* @param      无
* @retval     无
*/
voidspiffs_test(void)
{ESP_LOGI(TAG, "Openingfile");/* 建立一个名为/spiffs/hello.txt的只写文件 */FILE* f = fopen("/spiffs/hello.txt", "w");if (f == NULL){ESP_LOGE(TAG, "Failedto open file for writing");return;}/* 写入字符 */fprintf(f,WRITE_DATA);fclose(f);ESP_LOGI(TAG, "Filewritten");/* 重命名之前检查目标文件是否存在 */struct stat st;if (stat("/spiffs/foo.txt", &st) == 0) /* 获取文件信息,获取成功返回0 */{/*  从文件系统中删除一个名称。如果名称是文件的最后一个连接,并且没有其它进程将文件打开,名称对应的文件会实际被删除。 */unlink("/spiffs/foo.txt");}/* 重命名创建的文件 */ESP_LOGI(TAG, "Renamingfile");if (rename("/spiffs/hello.txt", "/spiffs/foo.txt") != 0){ESP_LOGE(TAG, "Renamefailed");return;}/* 打开重命名的文件并读取 */ESP_LOGI(TAG, "Readingfile");f = fopen("/spiffs/foo.txt", "r");if (f == NULL){ESP_LOGE(TAG, "Failedto open file for reading");return;}char line[64];fgets(line, sizeof(line), f);fclose(f);char* pos =strchr(line, '\n'); /* 指针pos指向第一个找到‘\n’*/if (pos){*pos = '\0';                /* 将‘\n’替换为‘\0’ */}ESP_LOGI(TAG, "Readfrom file: '%s'", line);lcd_show_string(90, 110, 200, 16, 16, line, RED);
}

在SPIFFS驱动中,首先初始化并挂载了一个SPIFFS分区,然后使用POSIX和C库API写入和读取数据。

i2c_obj_ti2c0_master;
/**
* @brief      程序入口
* @param      无
* @retval     无
*/
voidapp_main(void)
{esp_err_t ret;ret =nvs_flash_init();                                   /* 初始化NVS */if (ret ==ESP_ERR_NVS_NO_FREE_PAGES || ret==ESP_ERR_NVS_NEW_VERSION_FOUND){ESP_ERROR_CHECK(nvs_flash_erase());ret =nvs_flash_init();}ESP_ERROR_CHECK(ret);led_init();                                               /* LCD初始化 */i2c0_master =iic_init(I2C_NUM_0);                         /* 初始化IIC0 */spi2_init();                                               /*SPI初始化 */xl9555_init(i2c0_master);                                  /*XL9555初始化 */lcd_init();                                               /* LCD初始化 */spiffs_init("storage",DEFAULT_MOUNT_POINT, DEFAULT_FD_NUM);/*SPIFFS初始化*//* 显示实验信息 */lcd_show_string(10, 50, 200, 16, 16, "ESP32", RED);lcd_show_string(10, 70, 200, 16, 16, "SPIFFSTEST", RED);lcd_show_string(10, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);lcd_show_string(10, 110, 200, 16, 16, "Readfile:", BLUE);spiffs_test();                                             /*SPIFFS测试 */while (1){LED_TOGGLE();vTaskDelay(500);}
}

可以看到,本实验的应用代码中,在一系列初始化之后,配置spiffs文件系统各个参数,再建立一个名为/spiffs/hello.txt的只写文件,LED闪烁表明程序正在运行。

38.4 下载验证
在完成编译和烧录操作后,在指定区域新建hello.txt文件,然后对这文件进行读写操作。

image003
图38.4.1 程序运行效果图

相关文章:

《ESP32-S3使用指南—IDF版 V1.6》第三十八章 SPIFFS实验

第三十八章 SPIFFS实验 1)实验平台:正点原子DNESP32S3开发板 2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6 3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/…...

技术交流社区基础防诈指南

技术交流社区基础防诈指南技术交流社区基础防诈指南 若已确认被骗或发现违法内容,请立即通过以下渠道举报:公安部网络违法犯罪举报网站:12321.cn (网络不良信息) 国家反诈中心:拨打 110 或通过官方APP举报 (注意:报警时务必索要《受案回执》) 中央网信办违法和不良信息举报…...

神秘题

Trick排列置换题,考虑转化乘环上移动问题。题目 精灵之环 假设知道排列 \(p\)。 那么把这个排列 \(p\) 的环连出来,环上点的编号是排列的下标,点的值是编号对应的值。 就比如排列 4 1 2 3 的环为: val: 4 1 2 3 4 id : 1->2->3->4->1...可以发现把这些环上…...

技术群高级防骗指南

技术群高级防骗指南技术群高级防骗指南 怎么骗的 怎么防 被骗会怎么样 怎么骗的 1.资源储备与身份伪装: 1.盗盗取大量高等级账号并使用,给人友好可信的虚假印象2.养 ​ 骗子可能会花时间养这些盗来的号, 参与正常讨论,发一些专业的言论, 或者爆出自己是某某名牌大学来的 / 某…...

集训游记

前言 关于我 2025-9-16 开始写游击这件事情,其实已经考了 10 多次了,感觉前几次还好,后面被削弱了/kk,肯定是感冒debuff的问题,目前是能碾压ysh和lh的部分时候可以干掉xch,别的没咋关注.exe 2025-9-16 上午考试,比赛题目居然叫做 fish、oblivious、array、digit...

SQL Server 中的 STUFF 函数与FOR XML PATH详解 - 实践

SQL Server 中的 STUFF 函数与FOR XML PATH详解 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mono…...

2025/9/16 总结

A 用时:2h 预期:0pts 实际:0pts 考试是没有想到可以考虑 \(p_k\) 的置换环,思考许久没有思路。 然后打表找构造方法没有找出来心态就炸了,导致后面基本没有写暴力,直接垫底了。 总结:对于这种排列问题,可以考虑置换处理。考试心态不要炸,即使不会做也要打暴力。B 用时…...

Linux备份数据

linux备份常用技术一、备份数据库 1、准备一份备份命令sh文件,比如将其存放在/opt/db_bak中,命名为bak_mysql.sh#!/bin/bash # MySQL备份配置 MYSQL_USER="root" MYSQL_PASSWORD="root" MYSQL_HOST="10.10.10.10" MYSQL_PORT="3306"…...

np.argmax

argmax 是 NumPy 和许多其他科学计算库(如 PyTorch、TensorFlow)中的一个非常常用的函数,它的作用是返回数组中最大值的索引。 简单来说,argmax 告诉你最大值在哪里,而不是最大值是多少。 argmax 的基本用法 np.argmax(a, axis=None, out=None)a: 你要查找最大值索引的数组…...

TQ322数字PIR使用笔记

TQ322 数字PIR特性: 双元单通数字输出热释电红外传感器我使用中断读取的方式即时获取数字PIR传感器内最新的数据具体时序如下: 单片机IO 模拟时序程序如下: (代码中NOP数量根据单片机主频和型号自行调整)/*-------------------------------------------------* 函数名:D…...

使用Apache做web服务器时无法断点续传的怎么办?

Apache 作为 Web 服务器时,如果无法实现 断点续传 功能,通常是因为配置问题或文件系统的限制。断点续传是指用户在中断下载后,可以从上次中断的地方继续下载,而不是重新开始。以下是可能的原因分析和解决方法。1. 什么是断点续传?断点续传(HTTP Range 请求):由客户端发…...

Rust使用rbatis

toml rbs = { version = "4.6"} rbatis = { version = "4.6"} #drivers rbdc-mysql = { version = "4.6" } # 其他依赖 serde = { version = "1", features = ["derive"] } serde_json = "1.0" tokio = { version…...

2025ICPC网络赛第一场(A,B,C,D,G,I,M)

A. Who Can Win https://qoj.ac/contest/2513/problem/14301 思路 按题意模拟,统计第 \(239min\) 时成绩最好的队伍,记为冠军队伍,从 \(240min\) 开始到比赛结束的所有队伍都假设提交通过,实时计算成绩,一旦超过 \(239min\) 前的成绩最好队伍同样记作冠军。 细节: 1.输出…...

Google Maps

Google Maps...

【TES600G】基于JFM7K325T FPGA+FT-M6678 DSP的全国产化信号处理平台

​ 产品概述 TES600G是一款基于FPGA+DSP协同处理架构的通用高性能实时信号处理平台,该平台采用1片国防科大的银河飞腾多核浮点/定点DSP FT-M6678作为主处理单元,采用1片复旦微的Kintex-7系列FPGA JFM7K325T16作为协处理单元,具有1个FMC子卡接口,具有4路SFP+万兆光纤接口,…...

KMS激活Windows系统(win10)

在开始菜单上右键,选择 Windows PowerShell(管理员),依次输入以下命令即可激活成功 slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 slmgr /skms kms.03k.org slmgr /ato 1、安装产品密钥,不同的操作系统激活码不一样,网上搜索下有很多,这些激活码不能在线直接激活,但可以通过…...

基于python3的http文件服务器

前言跨环境或者跨跳板机传输文件很麻烦,比如从windows系统跨跳板机传输文件到linux系统,这时候scp就不适用了。 比较简单的方式是,从windows系统开一个http文件服务,然后从linux系统直接使用http链接下载。 如果是自己的环境,直接使用python3 -m http.server --bind 0.0.0…...

大阪府

大阪府名称大阪城 心斋桥 道顿崛 海游馆 通天阁 四天王寺 环球影城 万博纪念公园 中之岛公园 天保山摩天轮...

sql server2008大批量插入数据

谨慎使用update 最好对应字段 直接使用insertDECLARE @pageIndex INTDECLARE @pageSize INTDECLARE @TotalpageIndex INTdeclare @rows as int SET @pageIndex = 1SET @pageSize = 10000set @TotalpageIndex=((select top 1 ID from [NewWeBusiness_PJM].[dbo].[Scale] order …...

【Office 2010】经典办公套件Office 2010——保姆级详细图文下载安装教程 - 详解

【Office 2010】经典办公套件Office 2010——保姆级详细图文下载安装教程 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…...

Eth-Trunk实验

...

HCIP—Eth-Trunk

...

一个还不错的,简单的,前端vue2后台框架

https://gitee.com/e4glet/vue-cli4-framwork相信坚持的力量,日复一日的习惯....

P4099 [HEOI2013] SAO

题意:给定一棵有 \(n\) 个点(\(n \le 1000\))的树,每条边 \((u, v)\) 有参数 \(c\) 表明 \(u\) 和 \(v\) 谁必须排在前面,求满足所有边条件的排列种数。思路:采用容斥原理解决。先以 \(1\) 为根,将所有 \(c = 1\) 的边看作无限制,求方案数,再通过容斥调整。可在树形DP…...

Linux chronyd 时间同步服务器,命令

Linux chronyd 时间同步服务器,命令chronyd 是 Linux 系统中常用的时间同步服务工具,以下是其常用命令:启动 / 停止 / 重启服务:# 启动服务 sudo systemctl start chronyd # 停止服务 sudo systemctl stop chronyd # 重启服务 sudo systemctl restart chronyd # 查看服务状…...

2025暑假集训总结lh

暑假进行了一个月的集训,也刷了不少题,参加了几场萌新赛。让我看出来我目前最大的问题:基础不太牢固。 以前学习c语言,从来没有看过具体的课程,从来都是用到什么就搜什么来学习,导致没有具体的框架在脑子里。 不少题,大致思路我能看出来,也大概知道要用哪些板子,但是一…...

ET框架的 阻止 ddos 设计,软路由

https://et-framework.cn/d/17ET7 软路由 ET7分支已经添加软路由功能~早期分享 最近在做防攻击设计,今天终于完成并且实现了,这里分享给大家,特别是搞棋牌的项目,还有小公司没法通过法律手段来防止别人攻击。特别有用处。因为高防实在太贵,用不起。 设计思路如下:需要有很…...

Serena 最佳实践方案

1. 全局安装 Serena 你需要用 包名 serena-agent 来安装,但安装完后命令行工具叫 serena: uv tool install --from git+https://github.com/oraios/serena serena-agent安装成功后,全局会有一个可执行命令: serena --help后续操作 升级: uv tool upgrade serena-agent卸载…...

C++ 零散记录:条件编译与 if constexpr 的区别

核心区别 条件编译发生在预处理期,由预处理器根据条件关掉代码片段,即不让这些代码到达编译期。 if constexpr:发生在编译期,由编译器在编译期确定要执行的分支。 其他所有的区别都是此核心区别的衍生。 用法的区别 能放的位置 条件编译几乎在哪都行。 if constexpr 只能在…...

ubuntu 22.04安装mysql8.0.41(glibc2.17)

环境Os:ubuntu 22.04 desktop桌面版mysql:mysql:8.0.41 glibc2.17查看操作系统信息root@db:/soft# ldd --version ldd (Ubuntu GLIBC 2.35-0ubuntu3) 2.35 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. …...

cURL调试功能磁盘空间耗尽导致拒绝服务漏洞分析

本文详细分析了cURL工具在使用--trace或--trace-ascii选项时存在的磁盘空间耗尽漏洞,攻击者可通过发送大量数据使日志文件无限增长,导致系统拒绝服务,并提供了修复方案。报告 #3250490 - 磁盘空间耗尽导致拒绝服务(DoS) 描述 当使用--trace或--trace-ascii选项处理大量数据时…...

mysql常用函数,数据处理效率提升实战指南

还在为SQL查询效率低下而烦恼吗?MySQL内置的强大函数库能让你事半功倍!无论是字符串处理、日期计算还是数值运算,熟练使用这些函数能极大简化开发工作。本文将全面解析MySQL最实用的内置函数,助你轻松应对各种数据处理需求。 字符串处理函数的妙用 在处理用户输入、日志分析…...

Tita 一体化管理:赋能互联网企业产品迭代全流程

在互联网行业,产品迭代速度直接决定企业的市场竞争力。然而,多数互联网企业在产品从需求提出到最终上线的全流程中,常面临需求混乱、开发低效、上线失控等问题。Tita 以一体化管理思维,打通产品迭代的全链路,让每一次版本更新都精准、高效、可控。 一、互联网企业产品迭代…...

【2025-09-15】动起来了

20:00仅仅通过改变自己,我们就能改变我们的整个人生和身边人的态度。——鲁道夫德雷克斯今天打算下班在园区投投篮,缓解一下职业病问题。临下班前的一个多小时,突然下起了大雨。那在还要想想,换种运动方式。我的车后备箱有几种运动装备,例如跑步、篮球和游泳。下雨天最好的…...

二叉树的层次遍历

前言 代码 非递归,使用size记录我们到第几层了,每次存入一层的node只有遍历完了才进入下一次循环,queue为空了就结束 代码: class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> que;if (root != NULL) que.push…...

Mysql索引失效场景

以下是导致索引失效的常见情况,分类并举例说明: 1. 对索引列进行运算或函数操作 当在索引列上使用函数、表达式、计算或类型转换时,MySQL无法直接使用索引来定位数据。 失效示例:sql-- 使用函数 SELECT * FROM users WHERE YEAR(create_time) = 2023; -- 使用表达式 SELECT…...

写了一个BBP算法的实现库,欢迎讨论

BBP 算法可以直接计算 π 的第 n 个十六进制数字,而无需计算前面的所有数字。 我的仓库:https://github.com/davelet/bbp先来说说π这个老朋友吧。π,3.14159……,数学界的“网红”,从古希腊的阿基米德开始,就有无数人试图用它丈量圆的秘密。为什么这么迷人?因为它是个无…...

统计建模库 statsmodels(时序单变量数据)

statsmodels 是一个基于 Python 的科学计算库,专注于统计数据分析、统计模型估计、统计检验和数据探索。它提供了对 R 语言中许多统计方法的完整复现,同时紧密集成在 Python 的科学计算生态(NumPy, Pandas, SciPy)中。 1. 线性模型 这是最基础也是最常用的部分。普通最小二…...

【云栖大会】AI原生、AI可观测、AI Serverless、AI中间件,4场论坛20+议题公布!

【云栖大会】AI原生、AI可观测、AI Serverless、AI中间件,4场论坛20+议题公布!大模型技术既展现出重塑生产力的巨大潜力 也孕育着重构生产关系的无限可能 为全球数字经济的智能化升级注入全新动能 2025 年 9 月 24 日至 26 日,杭州云栖小镇 4 大论坛、20+ 主题分享 从云原生…...

docker-oracle安装

1.dockere 拉取oracle镜像 # 下载镜像 docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c[!TIP] 备注:镜像有6.2G,我上传了夸克网盘 链接:https://pan.quark.cn/s/32ea287adca8?pwd=E19X 打包和解压命令 docker save > oracle-19c.tar registry.cn-han…...

static注意事项

static方法中没有this.xxx 不带static的方法可以调用所有变量或方法 带static只能访问带static的变量或方法...

微算法科技(NASDAQ: MLGO)研究隐私计算区块链框架,赋能敏感数据流通

在当今数字化时代,数据成为了极为重要的资产,然而在医疗、金融等诸多关键领域,数据孤岛现象严重,各机构间难以实现有效的数据共享。同时,隐私泄露风险又如同高悬之剑,让数据所有者顾虑重重,不敢轻易开放数据。微算法科技(NASDAQ: MLGO)正是敏锐察觉到这一困境,决心结…...

2D变换——坐标系

Halcon的坐标系主要分为三类。像素坐标系、亚像素坐标系、亚像素边缘坐标系。像素坐标系和亚像素坐标系统称为Halcon标准坐标系。亚像素边缘坐标系(Edge Centered)称为Halcon非标准坐标系。 Halcon标准坐标系 在Halcon标准坐标系下,坐标系的原点在图像的左上角像素的中心位置。…...

关于POST NETLIST (后提网表)备注

Calibre PEX SPI & calibreview ,以及StarRC介绍 Calibre PEX SPI & calibreview ,以及StarRC PEX SPI 和 PEX CALIBREVIEW 是输出结果的两种不同形式,代表了处理寄生参数的两种方法论:合并 vs 反标。 Synopsys StarRC 是生成这些结果所需要的工具之一。它是一个“提…...

P13693 [CEOI 2025] Equal Mex 题解

Description 罗马尼亚贵族们普遍认为,一个整数数组 \(a[0], a[1], a[2], \ldots, a[m - 1]\) 的美丽值定义为:满足以下条件的正整数 \(k\) 的个数——你可以将该数组划分为 \(k\) 个互不重叠的子数组(即连续元素的序列),使得:每个元素恰好属于一个子数组; 所有子数组具有…...

力扣46题 全排列

题型属于回溯算法 1.递归函数参数 排列有序,因此需要一个used数组,标记已经选择的元素 2.递归终止条件 当收集元素的数组path的大小达到和nums数组一样大的时候,说明找到了一个全排列,也表示达到了叶子节点。 3.单层搜索的逻辑 与组合问题相比最大的不同就是for循环里不用s…...

C++ std::unordered_map

std::unordered_map 是 C++ STL 中无序键值对容器的核心成员,底层基于哈希表实现,存储唯一键(key)与对应值(value)的映射关系,且不保证键的顺序。其最大优势是插入、查找、删除操作的平均时间复杂度为 O(1),适合对效率敏感且无需键有序的场景。 1、底层数据结构与特性 …...

Rust mut

fn main() {// `let mut var`: mutable bindinglet mut i = 5;i = 6; // 整体替换println!("i: i32= {}", i);let mut s = String::from("Hi");s = String::from("Hello"); // 整体替换s.push_str(" World!"); // 部分修改println!(&q…...

数论与组合(模板)

gcd与exgcd inline int gcd(int a, int b) { return b == 0 : a ? gcd(b, a % b); } inline ll exgcd(ll a, ll b, ll &x, ll &y) {if (b == 0) { x = 1, y = 0; return a; }ll d = exgcd(b, a % b, x, y);ll z = x; x = y; y = z - y * (a / b);return d; }...

自动感应门的感应雷达怎么选型?

​  感应门目前在市面上用的还是比较多的,不仅能给人一种高级感同时还能够给开空调的空间起到节能的作用,广泛应用在公共营业场所比如商超酒店机场等场所。在感应门控制系统中,雷达传感器作为核心检测模块,其选型直接决定了整个感应门的响应门的速度、检测精度、抗干扰能…...