ESP-IDF教程2 GPIO - 输入、输出和中断
文章目录
- 1、前提
- 1.1、基础知识
- 1.1.1、GPIO 分类
- 1.1.2、FALSH SPI 模式
- 1.1.3、过滤器
- 1.1.4、外部中断
- 1.2、数据结构
- 1.2.1、GPIO
- 1.2.2、毛刺过滤器
- 1.3、硬件原理图
- 2、示例程序
- 2.1、GPIO 输出 - 点亮 LED 灯
- 2.2、GPIO 输入 - 按键响应
- 2.3、GPIO 外部中断 - 按键响应
- 3、常用函数
- 4、烧录验证
1、前提
1.1、基础知识
1.1.1、GPIO 分类
ESP32 系列芯片按照 GPIO 特殊的使用限制分类,可以将其分为如下几类:
- GPIO PIN
- GPI PIN
- Strapping PIN
- SPI FLASH PIN
- 特殊功能引脚
GPIO 引脚
表示通用的输入输出引脚,无使用限制,可以随意使用。
GPI 引脚
表示仅支持输入的引脚,不具备软件使能的上拉或下拉功能,谨慎使用。
Strapping 引脚
用于 ESP32 的启动配置项,ESP32 启动时需要配置如启动模式、内置 LDO 电压、U0TXD 打印使能等参数,这些参数需要芯片在上电或硬件复位时通过 Strapping 管脚采样其电平并锁存来决定,但当采样结束后 Strapping 引脚将恢复为普通 GPIO ,谨慎使用。
SPI FLASH 引脚
因为大部分 ESP32 芯片封装内部无 FLASH 存储,因此需要依赖外部 FLASH 芯片存储程序和数据,SPI FLASH 引脚就是用于 ESP32 FLASH 通信使用的,共有 4-6 个引脚,不要使用这些引脚。
特殊功能引脚
JTAG 和 UART0 这类专用于某一功能的引脚,除非不使用该特殊功能,否则不建议将其作为普通 GPIO 使用
1.1.2、FALSH SPI 模式
根据通信不同阶段使用的引脚数不同,ESP32 的 FALSH SPI 模式有如下四种:
- QIO
- QOUT
- DIO
- DOUT
四种 FLASH SPI 模式的具体区别如 SPI Flash Modes / Summary 所示,其中 QIO 和 QOUT 需要全部的 6 个 SPI FLASH 引脚,而 DIO 和 DOUT 仅需要其中的 4 个引脚,剩下未使用的引脚可做普通 GPIO 使用。
1.1.3、过滤器
ESP32 某些系列芯片支持 GPIO 过滤器,有如下两种:
- 毛刺过滤器
- 管脚毛刺过滤器(pin_glitch_filter)
- 灵活毛刺过滤器(flex_glitch_filter)
- 迟滞过滤器
管脚毛刺过滤器 pin_glitch_filter
仅能将脉冲宽度窄于 2 个采样时钟的信号剔除掉,采样时钟默认为 80MHz 的
SOC_MOD_CLK_APB
宏,因此过滤宽度 = 2 × (1/80 MHz) = 25 ns 。
灵活毛刺过滤器 flex_glitch_filter
会在
window_width_ns
时间窗口内,对信号采样多次,若某次“高”或“低”持续时间小于window_thres_ns
,则当作毛刺丢弃,该功能仅部分型号支持,比如 ESP32-C6、ESP32-H2 和 ESP32-P4 ,笔者尚未测试。
管脚毛刺过滤器和灵活毛刺过滤器是各自独立的,支持为同一 GPIO 同时启用这两种过滤器。
GPIO 迟滞过滤器
“支持输入引脚的硬件迟滞,可以减少由于输入电压在逻辑 0、1 临界值附近时采样不稳定造成的 GPIO 中断误触”,看起来或许可以作为按键消抖使用,该功能仅部分型号支持,比如 ESP32-C5、ESP32-H2 和 ESP32-P4 ,笔者尚未测试。
1.1.4、外部中断
ESP32 的 GPIO 支持如下类型的几种中断:
typedef enum {GPIO_INTR_DISABLE = 0, /* 不使用中断*/GPIO_INTR_POSEDGE = 1, /* 上升沿触发 */GPIO_INTR_NEGEDGE = 2, /* 下降沿触发 */GPIO_INTR_ANYEDGE = 3, /* 边沿(上升沿/下降沿)触发 */GPIO_INTR_LOW_LEVEL = 4, /* 低电平触发 */GPIO_INTR_HIGH_LEVEL = 5, /* 高电平触发 */GPIO_INTR_MAX,
} gpio_int_type_t;
与 STM32 逻辑开发环境的不同, ESP-IDF 从上到下已经有很多层,如下所示:
- APP
- Components
- HAL
- FreeRTOS
- FLASH BootLoader
- ROM BootLoader
- SoC
某些情况下,ESP32 的 FALSH 访问会被中断或者锁住,为确保中断服务函数能在任何时候可靠运行,要求中断服务函数满足以下两点要求:
- 纯粹运行在内部 RAM(IRAM)中
- 不访问 FLASH 中的数据或代码
使用属性宏 IRAM_ATTR
来告诉编译器,该函数必须放到 IRAM 中执行,外部中断服务函数模板如下:
static void IRAM_ATTR exti_isr_handler(void* arg) {//...
}
printf
函数存储在 FLASH 中,因此不要在中断中使用,如果非要使用请用以下函数代替:
#include <rom/ets_sys.h>int ets_printf(const char *fmt, ...);
此外,不能在中断中执行能引起上下文切换的函数和中断不安全的函数,建议在中断中利用 FreeRTOS 的队列、事件组等任务间通信机制来传递信息。
中断在分配时有一些标志位 intr_alloc_flags
,这些标志位控制着 ISR 的行为,主要有如下一些标志位:
#define ESP_INTR_FLAG_LEVELx (1<<x) /* 中断优先级,x 从 1 到 6 */
#define ESP_INTR_FLAG_NMI (1<<7) /* 最高中断优先级 7 */
#define ESP_INTR_FLAG_SHARED (1<<8) /* 共享中断 */
#define ESP_INTR_FLAG_EDGE (1<<9) /* 边沿触发中断 */
#define ESP_INTR_FLAG_IRAM (1<<10) /* 将中断处理函数放在 IRAM 中,避免访问 FLASH */
#define ESP_INTR_FLAG_INTRDISABLED (1<<11) /* ISR 安装时默认不使能中断 */#define ESP_INTR_FLAG_LOWMED (ESP_INTR_FLAG_LEVEL1|ESP_INTR_FLAG_LEVEL2|ESP_INTR_FLAG_LEVEL3) /* 低中等级别优先级 */
#define ESP_INTR_FLAG_HIGH (ESP_INTR_FLAG_LEVEL4|ESP_INTR_FLAG_LEVEL5|ESP_INTR_FLAG_LEVEL6|ESP_INTR_FLAG_NMI) /* 高等级优先级 */
使用 GPIO 外部中断时一般只需以下两步即可:
gpio_install_isr_service
gpio_isr_handler_add
1.2、数据结构
1.2.1、GPIO
ESP-IDF 驱动头文件
#include "driver/gpio.h"
GPIO 配置结构体
typedef struct {uint64_t pin_bit_mask; /* GPIO 引脚掩码 */gpio_mode_t mode; /* GPIO 模式 */gpio_pullup_t pull_up_en; /* GPIO 上拉使能 */gpio_pulldown_t pull_down_en; /* GPIO 下拉使能 */gpio_int_type_t intr_type; /* GPIO 中断类型*/
#if SOC_GPIO_SUPPORT_PIN_HYS_FILTERgpio_hys_ctrl_mode_t hys_ctrl_mode; /* GPIO 迟滞控制模式 */
#endif
}gpio_config_t;
1.2.2、毛刺过滤器
ESP-IDF 驱动头文件
#include "driver/gpio_filter.h"
管脚毛刺滤波器 配置结构体
typedef struct {glitch_filter_clock_source_t clk_src; /* 时钟源 */gpio_num_t gpio_num; /* 引脚号 */
}gpio_pin_glitch_filter_config_t;
灵活毛刺滤波器 配置结构体
typedef struct {glitch_filter_clock_source_t clk_src; /* 时钟源 */gpio_num_t gpio_num; /* 引脚号 */uint32_t window_width_ns; /* 采样窗口宽度(ns) */uint32_t window_thres_ns; /* 采样窗口阈值(ns) */
} gpio_flex_glitch_filter_config_t;
1.3、硬件原理图
笔者使用了合宙的 ESP32-C3 开发板,本文仅涉及 KEY 和 LED 两部分硬件,KEY 和 LED 部分的硬件原理图如下图所示:
其中两个 LED 灯 D4 和 D5 分别由 ESP32-C3 的 GPIO12 和 GPIO13 控制,当引脚输出高电平时对应的 LED 灯会被点亮。
ESP32-C3 的 GPIO9 被 10K 的电阻 R4 上拉至高电平,当按键 S2 按下时,GPIO9 被拉低至地,因此可以通过 GPIO9 输入获取按键的状态。
2、示例程序
2.1、GPIO 输出 - 点亮 LED 灯
功能:
- 固定每隔 1s 翻转一次 LED 灯的状态
程序流程:
- 使用
gpio_config()
配置 LED 引脚为 输出模式 - 通过
gpio_set_level()
固定周期设置引脚输出的高低电平
示例程序:
#include "freertos/FreeRTOS.h"
#include "driver/gpio.h"#define LED_GPIO_PIN GPIO_NUM_13/* 以下内容无需修改 */
uint8_t led_pin_level = 0;void led_init(void) {gpio_config_t io_cfg = {.pin_bit_mask = 1 << LED_GPIO_PIN,.mode = GPIO_MODE_OUTPUT,.pull_up_en = 0,.pull_down_en = 0,.intr_type = GPIO_INTR_DISABLE,};gpio_config( & io_cfg);
}void app_main(void) {led_init();while (1) {led_pin_level = !led_pin_level;gpio_set_level(LED_GPIO_PIN, led_pin_level);vTaskDelay(1000);}
}
2.2、GPIO 输入 - 按键响应
功能:
- 按键 KEY 按下翻转 LED 状态
程序流程:
- 使用
gpio_config()
配置 LED 引脚为 输出模式 - 使用
gpio_config()
配置 KEY 引脚为 输入模式 - 通过
gpio_get_level()
获得 KEY 引脚输入的高低电平 - 当 KEY 引脚输入的电平为低电平时表示按键按下,通过
gpio_set_level()
翻转 LED 引脚输出电平
示例程序:
#include "freertos/FreeRTOS.h"
#include "driver/gpio.h"#define KEY_GPIO_PIN GPIO_NUM_9
#define LED_GPIO_PIN GPIO_NUM_13/* 以下内容无需修改 */
uint8_t led_pin_level = 0;void led_init(void) {gpio_config_t io_cfg = {.pin_bit_mask = 1 << LED_GPIO_PIN,.mode = GPIO_MODE_OUTPUT,.pull_up_en = 0,.pull_down_en = 0,.intr_type = GPIO_INTR_DISABLE,};gpio_config( & io_cfg);
}void key_init(void) {gpio_config_t io_cfg = {.pin_bit_mask = 1 << KEY_GPIO_PIN,.mode = GPIO_MODE_INPUT,.pull_up_en = 1,.pull_down_en = 0,.intr_type = GPIO_INTR_DISABLE,};gpio_config( & io_cfg);
}void app_main(void) {led_init();key_init();while (1) {if (gpio_get_level(KEY_GPIO_PIN) == 0) {vTaskDelay(5);if (gpio_get_level(KEY_GPIO_PIN) == 0) {gpio_set_level(LED_GPIO_PIN, led_pin_level);led_pin_level = !led_pin_level;while (!gpio_get_level(KEY_GPIO_PIN)) {};}}vTaskDelay(10);}
}
2.3、GPIO 外部中断 - 按键响应
功能:
- 按键按下翻转 LED 状态
程序流程:
- 使用
gpio_config()
配置 LED 引脚为 输出模式 - 使用
gpio_config()
配置 KEY 引脚为 输入下降沿中断模式 - 调用
gpio_install_isr_service()
和gpio_isr_handler_add()
注册并使能 KEY 引脚中断 - 按键 KEY 按下触发下降沿中断,进入中断服务子程序,发送事件到队列
- 当检测到队列非空时,通过
gpio_set_level()
翻转 LED 灯状态
具体示例程序如下:
#include "freertos/FreeRTOS.h"
#include "driver/gpio.h"#define KEY_GPIO_PIN GPIO_NUM_9
#define LED_GPIO_PIN GPIO_NUM_13/* 以下内容无需修改 */
static uint8_t led_pin_level = 0;
static QueueHandle_t key_event_queue = NULL;static void IRAM_ATTR exti_isr_handler(void * arg) {uint32_t gpio_num = (uint32_t) arg;BaseType_t hp = pdFALSE;xQueueSendFromISR(key_event_queue, & gpio_num, & hp);if (hp) portYIELD_FROM_ISR();
}void led_init(void) {gpio_config_t io_cfg = {.pin_bit_mask = 1 << LED_GPIO_PIN,.mode = GPIO_MODE_OUTPUT,.pull_up_en = 0,.pull_down_en = 0,.intr_type = GPIO_INTR_DISABLE,};gpio_config( & io_cfg);
}void key_init(void) {gpio_config_t io_cfg = {.pin_bit_mask = 1 << KEY_GPIO_PIN,.mode = GPIO_MODE_INPUT,.pull_up_en = 1,.pull_down_en = 0,/* edge */.intr_type = GPIO_INTR_NEGEDGE,};gpio_config( & io_cfg);/* Register a interrupt */gpio_install_isr_service(ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM);/* Add exti callback function to key gpio */gpio_isr_handler_add(KEY_GPIO_PIN, exti_isr_handler, (void * ) KEY_GPIO_PIN);
}static void key_task(void * arg) {uint32_t io_num;while (1) {if (xQueueReceive(key_event_queue, & io_num, portMAX_DELAY)) {// 消抖vTaskDelay(10);if (gpio_get_level(io_num) == 0) {// 抬手检测while (gpio_get_level(io_num) == 0) {vTaskDelay(10);}gpio_set_level(LED_GPIO_PIN, led_pin_level);led_pin_level = !led_pin_level;}}vTaskDelay(10);}// Will not executegpio_uninstall_isr_service();
}void app_main(void) {/* Configure the peripheral */led_init();key_init();/* Create event queue */key_event_queue = xQueueCreate(10, sizeof(uint32_t));xTaskCreate(key_task, "key_task", 2048, NULL, 10, NULL);
}
3、常用函数
/* GPIO 配置函数 */
esp_err_t gpio_config(const gpio_config_t *pGPIOConfig)/* 设置 GPIO 输出电平 */
esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level)/* 获取 GPIO 输入电平 */
int gpio_get_level(gpio_num_t gpio_num);/* 注册 GPIO 中断服务 */
esp_err_t gpio_install_isr_service(int intr_alloc_flags)
/* 添加 GPIO 中断服务函数 */
esp_err_t gpio_isr_handler_add(gpio_num_t gpio_num, gpio_isr_t isr_handler, void *args)
/* GPIO 中断使能 */
esp_err_t gpio_intr_enable(gpio_num_t gpio_num)
4、烧录验证
“GPIO 输出 - 点亮 LED 灯” 实验效果如下:
可能由于 GIF 帧率原因 LED ,看起来不是以固定周期闪烁,因此使用逻辑分析仪捕获了 LED 引脚的电平,证明了其确实是 1s 翻转一次 LED 状态,结果如下所示:
“GPIO 输入 - 按键响应” 和 “GPIO 外部中断 - 按键响应” 实验效果一样,如下所示:
相关文章:
ESP-IDF教程2 GPIO - 输入、输出和中断
文章目录 1、前提1.1、基础知识1.1.1、GPIO 分类1.1.2、FALSH SPI 模式1.1.3、过滤器1.1.4、外部中断 1.2、数据结构1.2.1、GPIO1.2.2、毛刺过滤器 1.3、硬件原理图 2、示例程序2.1、GPIO 输出 - 点亮 LED 灯2.2、GPIO 输入 - 按键响应2.3、GPIO 外部中断 - 按键响应 3、常用函…...
Ubuntu安装MySQL步骤及注意事项
一、安装前准备 1. 系统更新:在安装 MySQL 之前,确保你的 Ubuntu 系统软件包是最新的,这能避免因软件包版本问题导致的安装错误,并获取最新的安全补丁。打开终端,执行以下两条命令: sudo apt update sudo …...
支持mingw g++14.2 的c++23 功能print的vscode tasks.json生成调试
在mingw14.2版本中, print库的功能默认没有开启, 生成可执行文件的tasks.json里要显式加-lstdcexp, 注意放置顺序. tasks.json (支持mingw g14.2 c23的print ) {"version": "2.0.0","tasks": [{"type": "cppbuild","…...
WPF常用技巧汇总
主要用于记录工作中发现的一些问题和常见的解决方法。 此文会持续更新。 >abp new Evan.MyWpfApp -t wpf --old --framework .net8 1. 解决不同屏幕分辨率下的锯齿问题 UseLayoutRounding"True" <Grid UseLayoutRounding"True"><Border Mar…...
【文件操作与IO】详细解析文件操作与IO (一)
本篇博客给大家带来的是文件操作的知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺便进步 一. …...
yaffs_write_new_chunk()函数解析
yaffs_write_new_chunk() 是 YAFFS(Yet Another Flash File System)文件系统中用于将数据写入新物理块(chunk)的关键函数。以下是其详细解析: 函数原型 int yaffs_write_new_chunk(struct yaffs_dev *dev, const u8 *…...
「数据可视化 D3系列」入门第九章:交互式操作详解
交互式操作详解 一、交互式操作的核心概念二、当前柱状图的交互实现三、交互效果的增强建议四、为饼图做准备五、交互式柱状图代码示例小结核心要点 下章预告:将这些交互技术应用于饼图实现 在上一章的柱状图基础上,我们增加了交互功能,让图表…...
吃透LangChain(五):多模态输入与自定义输出
多模态数据输入 这里我们演示如何将多模态输入直接传递给模型。我们目前期望所有输入都以与OpenAl 期望的格式相同的格式传递。对于支持多模态输入的其他模型提供者,我们在类中添加了逻辑以转换为预期格式。 在这个例子中,我们将要求模型描述一幅图像。 …...
数据结构基本概念
1 数据结构概述 数据结构是计算机组织(逻辑结构)、存储(物理结构)数据的方式。和具体的计算机编程语言无关,可以使用任何编程语言来实现数据结构 1.1 数据逻辑结构 反映数据元素之间的逻辑关系,逻辑关系…...
flutter app实现分辨率自适应的图片资源加载
在 Flutter 中,为了实现分辨率自适应的图片资源加载,确实需要遵循特定的目录结构和命名规则。这种机制允许 AssetImage 根据设备的 设备像素比(Device Pixel Ratio, DPR) 自动选择最合适的图片资源。以下是详细的说明和实现步骤&a…...
Webpack基础
目录 一、Webpack概念 二、Webpack使用步骤 三、Webpack.config.js配置文件 四、entry 和 output 1. entry 2. output 五、module 1. CSS 2. 图片 3. babel 4. 总结 六、plugins 1.自动生成 html 文件 七、其它 1.webpack-dev-server 开发服务器 2. mode 打包模…...
极狐GitLab 用户 API 速率限制如何设置?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 用户 API 速率限制 (BASIC SELF) 您可以为对 Users API 的请求配置每个用户的速率限制。 要更改速率限制: 1.在…...
用 Go 实现一个轻量级并发任务调度器(支持限速)
前言 在日常开发中,我们经常会遇到这样的场景: • 有一堆任务要跑(比如:发请求、处理数据、爬虫等)• 不希望一次性全部跑完,担心打爆服务端或者被封• 想要设置并发数、限速,还能控制任务重试…...
华为OD机试真题——最长的顺子(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录全流程解析/备考攻略/经验…...
3.8/Q1,GBD数据库最新文章解读
文章题目:Regional and National Burden of Traumatic Brain Injury and Spinal Cord Injury in North Africa and Middle East Regions, 1990-2021: A Systematic Analysis for The Global Burden of Disease Study 2021 DOI:10.1007/s44197-025-00372-…...
Java面试中问单例模式如何回答
1. 什么是单例模式? 单例模式(Singleton Pattern)是一种设计模式,确保某个类在整个应用中只有一个实例,并且提供全局访问点。它有以下特点: 确保只有一个实例。提供全局访问点。防止多次实例化࿰…...
再看开源多模态RAG的视觉文档(OCR-Free)检索增强生成方案-VDocRAG
前期几个工作提到,基于OCR的文档解析RAG的方式进行知识库问答,受限文档结构复杂多样,各个环节的解析泛化能力较差,无法完美的对文档进行解析。因此出现了一些基于多模态大模型的RAG方案。如下: 【RAG&多模态】多模…...
【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
Go 语言中的 GC 简介与调优建议 一、GC 简介 Go 的 GC(Garbage Collection)用于自动管理内存,开发者无需手动释放内存,可以专注于业务逻辑,降低出错概率,提升开发效率。 GC 能够自动发现和回收不再使用的…...
ctfshow-大赛原题-web702
因为该题没有理解到位,导致看wp也一直出错,特此反思一下。 参考yu22x师傅的文章 :CTFSHOW大赛原题篇(web696-web710)_ctfshow 大赛原题-CSDN博客 首先拿到题目: // www.zip 下载源码 我们的思路就是包含一个css文件,…...
基于Redis的4种延时队列实现方式
延时队列是一种特殊的消息队列,它允许消息在指定的时间后被消费。在微服务架构、电商系统和任务调度场景中,延时队列扮演着关键角色。例如,订单超时自动取消、定时提醒、延时支付等都依赖延时队列实现。 Redis作为高性能的内存数据库&#x…...
基于Django实现农业生产可视化系统
基于Django实现农业生产可视化系统 项目截图 登录 注册 首页 农业数据-某一指标表格展示 农业数据-某一指标柱状图展示 农业数据-某一指标饼状图展示 气候数据-平均气温地图展示 气候数据-降水量合并图展示 后台管理 一、系统简介 农业生产可视化系统是一款基于DjangoMVTMyS…...
yocto编译使用共享缓存
注意 服务器端与客户端系统的版本号需为Ubuntu20.04执行用户需要为sudo权限服务器端nfs目录权限必须为nobody:nogroup 服务端配置: 在服务器192.168.60.142上配置 NFS 共享: 1.安装 NFS 服务器: 1 sudo apt-get install nfs-kernel-serve…...
uCOS3实时操作系统(系统架构和中断管理)
文章目录 系统架构中断管理ARM中断寄存器相关知识ucos中断机制 系统架构 ucos主要包含三个部分的源码: 1、OS核心源码及其配置文件(ucos源码) 2、LIB库文件源码及其配置文件(库文件,比如字符处理、内存管理࿰…...
web后端语言下篇
#作者:允砸儿 #日期:乙巳青蛇年 三月廿一 笔者今天将web后端语言PHP完结一下,后面还会写一个关于python的番外。 PHP函数 PHP函数它和笔者前面写的js函数有些许类似,都是封装的概念。将实现某一功能的代码块封装到一个结构中…...
Tensorflow释放GPU资源
语言:python 框架:tensorflow 现有问题:用tensorflow进行模型训练,训练完成后用tf.keras.backend.clear_session()命令无法真正实现释放资源的效果。 解决方案:创建多进程,将模型训练作为子进程,…...
vscode、cherry studio接入高德mcp服务
最近mcp协议比较火,好多平台都已经开通了mcp协议,今天来接入下高德的mcp看看效果如何。 话不多说,咱们直接开干。 先来看下支持mcp协议的工具有cusor、cline等等。更新cherrystudio后发现上面也有mcp服务器了。今天咱就来试试添加高德的mcp协…...
软考高级-系统架构设计师 论文范文参考(二)
文章目录 论企业应用集成论软件三层结构的设计论软件设计模式的应用论软件维护及软件可维护性论信息系统安全性设计论信息系统的安全性设计(二)论信息系统的架构设计论信息系统架构设计(二) 论企业应用集成 摘要: 2016年9月,我国某省移动通信有限公司决定启动VerisB…...
熵权法+TOPSIS+灰色关联度综合算法(Matlab实现)
熵权法TOPSIS灰色关联度综合算法(Matlab实现) 代码获取私信回复:熵权法TOPSIS灰色关联度综合算法(Matlab实现) 摘要: 熵权法TOPSIS灰色关联度综合算法(Matlab实现)代码实现了一种…...
【java 13天进阶Day05】数据结构,List,Set ,TreeSet集合,Collections工具类
常见的数据结构种类 集合是基于数据结构做出来的,不同的集合底层会采用不同的数据结构。不同的数据结构,功能和作用是不一样的。数据结构: 数据结构指的是数据以什么方式组织在一起。不同的数据结构,增删查的性能是不一样的。不同…...
极狐GitLab 议题和史诗创建的速率限制如何设置?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 议题和史诗创建的速率限制 (BASIC SELF) 速率限制是为了控制新史诗和议题的创建速度。例如,如果您将限制设置为 …...
AIGC-几款本地生活服务智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…...
十、数据库day02--SQL语句01
文章目录 一、新建查询1.查询窗口的开启方法2. 单语句运行方法 二、数据库操作1.创建数据库2. 使用数据库3. 修改数据库4. 删除数据库和查看所有数据库5. 重点:数据库备份5.1 应用场景5.2 利用工具备份备份操作还原操作 5.3 扩展:使用命令备份 三、数据表…...
2025年MathorCup数学应用挑战赛D题问题一求解与整体思路分析
D题 短途运输货量预测及车辆调度 问题背景 问题分析:四个问题需要建立数学模型解决就业状态分析与预测,旨在通过数学建模对宜昌地区的就业数据进行深入分析,并基于此预测就业状态。提供的数据涵盖了被调查者的个人信息、就业信息、失业信息…...
关于三防漆清除剂
成分及原理 主要成分:通常包含有机溶剂,如丙酮、甲苯、二甲苯等,以及一些表面活性剂、缓蚀剂等添加剂。工作原理:有机溶剂能够溶解三防漆中的树脂等成分,使其失去粘性和附着性,从而可以被轻易地擦拭或冲洗…...
2025年MathorCup数学应用挑战赛【选题分析】
【25MathorCup选题分析】 🙋♀🙋♂数模加油站初步分析评估了此次竞赛题目: ✅A题:该题新颖性强,属于“算子学习深度学习几何建模”的交叉问题,涉及PINN、FNO、KAN等算子神经网络模型构建,任…...
在windows上交叉编译opencv供RK3588使用
环境 NDK r27、RK3588 安卓板子、Android 12 步骤操作要点1. NDK 下载选择 r27 版本,解压到无空格路径(如 C:/ndk)2. 环境变量配置添加 ANDROID_NDK_ROOT 和工具链路径到系统 PATH3. CMake 参数调整指定 ANDROID_NATIVE_API_LEVEL31、ANDRO…...
零基础玩转AI数学建模:从理论到实战
前言 数学建模作为连接数学理论与现实世界的桥梁,在科学研究、工程实践和商业决策等领域发挥着越来越重要的作用。随着人工智能技术的迅猛发展,以ChatGPT为代表的大语言模型为数学建模领域带来了革命性的变革。本书旨在帮助读者掌握这一变革带来的新机遇…...
IDEA 2025.1更新-AI助手试用和第三方模型集成方案
今天刚把 IntelliJ IDEA 更新到了 2025.1 版本,主要是想看看这次 AI Assistant 有什么新东西。之前看到消息说功能有更新,而且似乎可以免费试用,就动手试了试,顺便把过程和一些发现记录下来,给可能需要的朋友一个参考。…...
static关键字
思维导图: 在 Java 中,static 是一个非常重要的关键字,它可以用来修饰类的成员,包括变量、方法、代码块以及内部类。下面为你详细介绍 static 关键字的各种用法和特点。 一.修饰内部类 静态内部类:当 static 修饰内部类…...
gl-matrix 库简介
gl-matrix 库简介 gl-matrix 是一个高性能的 JavaScript 矩阵和向量库,专门为 WebGL 和其他 3D 图形应用设计。它提供了处理 2D、3D 和 4D 向量以及矩阵运算的高效方法。 主要特性 高性能:经过高度优化,执行速度快轻量级:体积小…...
Spring Boot 核心注解全解:@SpringBootApplication背后的三剑客
大家好呀!👋 今天我们要聊一个超级重要的Spring Boot话题 - 那个神奇的主类注解SpringBootApplication!很多小伙伴可能每天都在用Spring Boot开发项目,但你真的了解这个注解背后的秘密吗?🤔 别担心&#x…...
Android 音频架构全解析:从 AudioTrack 到 AudioFlinger
在开发音视频相关应用时,我们常会接触到 MediaPlayer、SoundPool、AudioTrack、OpenSL ES、AAudio、Oboe 等名词,它们都与 Android 的音频播放息息相关。然而,真正理解它们之间的关系以及背后运行机制,才能写出高性能、低延迟的音…...
【教程】无视硬件限制强制升级Windows 11
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 1、下载升级工具:https://github.com/builtbybel/Flyby11/releases 2、解压后打开软件: 3、拖入win11.iso或者自动下载…...
ICPR-2025 | 让机器人在未知环境中 “听懂” 指令精准导航!VLTNet:基于视觉语言推理的零样本目标导航
作者:Congcong Wen, Yisiyuan Huang, Hao Huang ,Yanjia Huang, Shuaihang Yuan, YuHao, HuiLin and Yi Fang 单位:纽约大学阿布扎比分校具身人工智能与机器人实验室,纽约大学阿布扎比分校人工智能与机器人中心,纽约大学坦登工程…...
替代升级VMware | 云轴科技ZStack构建山西证券一云多芯云平台
通过云轴科技ZStack Cloud云平台,山西证券打造了敏捷部署、简单运维的云平台,不仅兼容x86、海光、鲲鹏三种异构服务器实现一云多芯,还通过云平台虚拟化纳管模块纳管原有VMware虚拟化资源,并对接第三方集中式存储,在保护…...
Houdini python code:参数指定文件路径
创建null节点并命名为control并增加filedir参数 创建python节点 node hou.pwd() geo node.geometry()node hou.node(/obj/output_tetgen/control) filedir node.parm(filedir).eval() print("filedir:",filedir)得到输出...
ChatGPT-o3辅助学术写作的关键词和引言效果如何?
目录 关键词 引言 论文引言(≈300 字) 大家好这里是AIWritePaper官方账号,官网👉AIWritePaper~ 关键词 摘要是文章的精华,通常在200-250词左右。要包括研究的目的、方法、结果和结论。让AI工具作为某领域内资深的研…...
树莓派5+Vosk+python实现语音识别
简介 Vosk是语音识别开源框架,支持二十种语言 - 中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷…...
Selenium之 CSS 选择器详细讲解
Selenium之 CSS 选择器详细讲解 引言 在.Selenium.自动化测试中,元素定位是至关重要的一环。而.CSS.选择器作为一种强大且灵活的定位工具,在.Selenium.中得到了广泛的应用。本文将详细介绍.CSS.选择器的基本语法、常用类型以及如何在.Selenium.中高效地…...
【LeetCode】大厂面试算法真题回忆(61)--组装新的数组
题目描述 给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R,组装规则: R中元素总和加起来等于M。R中的元素可以从N中重复选取。R中的元素最多只能有1个不在N中,且比N中的数字都要小(不能为负数)。请输出:数组R一共有多少组装办法。 输入描…...