江协科技GPIO输入输出hal库实现
首先先介绍一下GPIO在hal库里面的函数
GPIOhal库函数介绍
GPIO在hal库里面有两个文件,一个hal_gpio.h一个hal_gpio_ex.h
第一个文件主要存放的就是hal库里面对gpio的相关函数以及GPIO配置的结构体,还有hal库与标准库的一大区别回调函数。以及一些对gpio配置的检测宏定义
第二个文件主要存放的就是AFIO的相关宏定义,比如说AFIO的事件输出中断引脚设置,AFIO的引脚重映射功能宏定义。(AFIO的两个主要功能就是重映射以及输出中断引脚的选择。重映射:对于一个GPIO口,硬件会定义它的相关外设功能,如果两个外设同时用到一个引脚,就得看他有没有重映射功能了,如果有,就可以通过AFIO的重映射功能把另一个功能放到别的GPIO口上,但是如果没有就得对引脚的设计进行修改了。输出中断引脚的选择:对于多个GPIOX对应的PIN口,同一时刻只有一个能正常中断输出,我们通过AFIO来对这几个GPIOX的PIN口进行仲裁判断,选择我们要运用的GPIOX口,比如说Pin8的中断引脚,我们可以选择为GPIOA口也可以选择为GPIOB口,但是PIN8一次性只能选择一个GPIOX口)。
如图为STM32F103C8T6的引脚定义图
hal库的外设初始化,比标准库的初始化更加的严谨和丰富。
typedef struct
{uint32_t Pin; /*GPIO对应的Pin引脚*/uint32_t Mode; /*GPIO输入输出模式*/uint32_t Pull; /*GPIO对应的引脚上下拉设置*/uint32_t Speed; /*GPIO输出速率*/
} GPIO_InitTypeDef;
首先就是一样的结构体配置GPIO口,下面就是GPIO在hal库里面的所有库函数了
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
这个函数就是用来初始化我们GPIO口的,参数为GPIOx和GPIO的初始化结构体,和标准库的几乎一模一样,DeInit函数也和标准库的一样是恢复到默认状态,释放资源并清除配置。
而对于标准库的GPIO口的读取和写入,hal库只剩下Read_Pin和Write_Pin两个函数,且多了一个电平翻转函数TogglePin。
如果我们需要锁定GPIO的端口配置的话,和标准库一样给我们提供了一个LockPin的函数
接着就是对应的GPIO_Pin的中断函数,GPIO_EXTI_IRQHandler,学完了标准库再来看这个就不会很陌生了。
相比于标准库,hal库多了一个Callback回调函数,在hal库里面,回调函数才是真正处理数据的地方,而中断服务函数IRQHandler只是在函数里面调用回调函数而不对数据进行处理。
GPIOCubeMx初始化步骤
GPIO的hal库初始化和标准库是一模一样的,就是函数代码改变了
思路是一样的:首先打开GPIOX的时钟,然后结构体初始化GPIO口
这个我们通过CubeMx能很快速的设置好我们需要的GPIO口的初始化代码
在创建文件的界面下找到我们的STMF103C8T6芯片。可以设置为收藏方便我们的使用
双击右下角的芯片,进入芯片设置界面
首先就是点开System Core 里面设置SYS里面的Debug内容为SW,也就是江科大里面的USB转串口的串行线下载方式,如果不设置会导致芯片的锁死,当你遇到编译的时候芯片报错无法连接,在MDK里面看Debug的设置,可以检测到Stlink但是检测不到芯片,大概率就是这个问题了。解决方法的问题就是修改完Debug方式后,通过Bootloader的下载方式进行一次程序的下载。
然后对于我们要设置的引脚在右侧的芯片上直接点击在配置即可,这里我们按照江科大的引脚来配置,选择PA0,推挽输出模式,速度为高速(50Mhz,hal库还可以设置为超高速100Mhz)
在CubeMx里面我们还可以对引脚进行命名,GPIO output level是用来设置GPIO口上电时的电平的,我们按照标准库默认为低电平。
这样就完成了GPIO的初始化,相比于标准库的初始化配置,速度和效率快上了无数倍。
接着就是配置我们的时钟树,也可以直接一步到位
首先在RCC这里把HSE和LSE都配置成CryStall.ceramic Resonator模式即可,也可以不需要配置LSE,因为我们现在只需要对CPU的主时钟进行配置。
接着直接在蓝色框的HCLK里面输入72点击回车,CubeMx就能帮你自动配置好系统的时钟树了。
设置好项目名称和Toolchain即可,我们使用的MDK,所以这边就选择MDK-ARM即可,版本按照你的MDK版本设置即可,CubeMx的下载和固件配置去看正点原子的课程即可,视频总会比文字讲的更加清楚。
Code Generator推荐这个配置,只使用当前运用到的文件,且生成对应的外设.c.h文件
再点击右上角的GENERATE CODE即可生成成功。
如果生成不成功就是你的固件和ARM版本不适应,自己重装升级ARM就行了,教程CSDN上很多
GPIO的输出:LED闪烁
我们只需要在CubeMx给我们配置好的文件里面,在主函数while循环实现我们的闪烁代码即可。
在while循环里面,对电平进行翻转且延时一段时间。
我们直接使用 HAL_GPIO_TogglePin函数即可,在使用hal库内部自己的延时函数HAL_Delay来进行延时,hal_Delay里面的数字对应延时的毫秒数。
while (1){/* USER CODE END WHILE */HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);HAL_Delay(500);/* USER CODE BEGIN 3 */}
我们的代码最好是写在他给我们定义的地方,这样我们再次进行CubeMx初始化这个文件的时候就不会对我们的代码进行覆盖。
已经会点一个灯了剩下的LED流水灯程序也是如法炮制即可,就不再写相关程序了。
GPIO的输入:按键控制LED灯
首先就是通过GPIO口的输入功能实现按键功能,接着在主函数里面对按键键值进行判断即可。
CubeMx初始化
通过PB1和PB11作为按键的输入,控制PA1PA2,两个端口的输出,进而实现按键控制Led灯亮灭的功能。
这边我就使用了用户自定义变量名称,这样也有利于我们的代码的复用,输出和上面的设置一样,输入为上拉输入模式,输入就不用设置输出速率了,但是不能不设置,CubeMx里面会先把结构体全部初始化为0,再开始赋值,避免因为有的结构体变量没有赋值而出现问题。
输入输出配置完成后,我们再完成按键的文件:
对于按键的输入,我们就得读取GPIO口的电平,上拉输入,所以默认为高电平,按键按下后变为低电平被检测。
我们使用到了ReadPin函数来读取GPIO口的状态,Delay用来延时消除按键抖动,这部分江科大应该是讲的很详细的。
uint8_t Key_Read(){uint8_t temp = 0;if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin) == GPIO_PIN_RESET){HAL_Delay(10);temp = 1;while(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin) == GPIO_PIN_RESET);HAL_Delay(10);}if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == GPIO_PIN_RESET){HAL_Delay(10);temp = 2;while(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == GPIO_PIN_RESET);HAL_Delay(10);}return temp;
}
Key底层文件的定义和调用就不多说了,我们定义的用户变量名都会在main.h里面显示,我们要查询就可以在这里进行查询.
这样的编程习惯有助于我们以后修改变量,维护代码,只需要在这边对变量名定义的部分进行修改就行了。
引用头文件以及变量定义的部分我就不多赘述了。
while (1){/* USER CODE END WHILE */Key_Num = Key_Read();if(Key_Num == 1){HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);}else if(Key_Num == 2){HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);}/* USER CODE BEGIN 3 */}
效果很好,完成!
相关文章:
江协科技GPIO输入输出hal库实现
首先先介绍一下GPIO在hal库里面的函数 GPIOhal库函数介绍 GPIO在hal库里面有两个文件,一个hal_gpio.h一个hal_gpio_ex.h 第一个文件主要存放的就是hal库里面对gpio的相关函数以及GPIO配置的结构体,还有hal库与标准库的一大区别回调函数。以及一些对gp…...
软件设计师教程—— 第二章 程序设计语言基础知识(上)
前言 在竞争激烈的就业市场中,证书是大学生求职的重要加分项。中级软件设计师证书专业性强、认可度高,是计算机相关专业学生考证的热门选择,既能检验专业知识,又有助于职业发展。本教程将聚焦核心重点,以点带面构建知…...
Java 快速转 C# 教程
以下是一个针对 Java 开发者快速转向 C# 的简明教程,重点对比 Java 与 C# 的异同,帮助你快速上手。 项目结构: .sln :解决方案文件,管理多个项目之间的依赖关系。.csproj :项目文件,定义目标框…...
Linux面试题集合(5)
把文件1的内容追加到文件2 cat 文件1>>文件2 把文件1和文件2合并成文件3 cat 文件1 文件2>文件3 使用less查看文件时,搜寻ab字符 /ab 用more和less如何查看文件 more: CtrlF -- 向下滚动一屏 CtrlB -- 返回上一屏 f -- 向下翻屏 b -- 向上翻屏 …...
OpenCV 光流估计:从原理到实战
在计算机视觉领域,光流估计(Optical Flow Estimation)是一项至关重要的技术,它能够通过分析视频序列中图像像素的运动信息,捕捉物体和相机的运动情况。OpenCV 作为强大的计算机视觉库,为我们提供了高效实现…...
星火杯大模型应用创新赛学习笔记——datawhale
背景——赛事任务 聚焦大学生真实应用场景,围绕阅读、写作、搜索、聊天、问答等方向,聚焦口语学习、面试招聘、论文写作、学习笔记等一个或多个细分应用场景,完成具有创新性、实用性的应用方案,呈现可演示、可落地、具备商业价值…...
Ulyssess Ring Attention
https://zhuanlan.zhihu.com/p/689067888https://zhuanlan.zhihu.com/p/689067888DeepSpeed Ulysess:切分Q、K、V序列维度,核心卖点保持通信复杂度低,和GPU数无关,和序列长度呈线性关系。 Ring-Attention:切分Q、K、V序…...
c++重要知识点汇总(不定期更新)
前言 真心希望各位dalao点赞收藏~ 树状数组 作用:高效求出区间前缀和,允许进行修改操作。 举个栗子: 刚开始有8项,分别为1-8。 首先构建二叉树: 1-8/ |/ |/ |/ |/ |1-4 5-8/ | / |/ | / |1-…...
重排序模型解读 mxbai-rerank-base-v2 强大的重排序模型
mxbai-rerank-base-v2 强大的重排序模型 模型介绍benchmark综合评价安装 模型介绍 mxbai-rerank-base-v2 是 Mixedbread 提供的一个强大的重排序模型,旨在提高搜索相关性。该模型支持多语言,特别是在英语和中文方面表现出色。它还支持代码和 SQL 排序&a…...
电子电路:到底该怎么理解电容器的“通交流阻直流”?
电容器“通交流,阻直流”的特性源于其对不同频率电信号的响应差异,具体可通过以下步骤理解: 一、电容器的基本结构与充放电机制 结构:由两个导体极板(如金属)和中间的绝缘介质组成。充放电过程:…...
售前工作.工作流程和工具
第一部分 售前解决方案及技术建议书的制作 售前解决方案编写的标准操作步骤SOP: 售前解决方案写作方法_哔哩哔哩_bilibili 第二部分 投标过程关键活动--商务标技术方案 1. 按项目管理--售前销售项目立项 销售活动和销售线索的跟踪流程和工具 1)拿到标书ÿ…...
ORACLE数据库实例报错ORA-00470: LGWR process terminated with error宕机问题分析报告
服务概述 10月21号03:22分,BOSS数据库实例发生异常宕机;工程师及时响应此问题并对此故障原因进行分析及相关建议,详细的故障情况及相关日志、TRACE文件的分析及总结、建议,请参阅本文档。 hzboss数据库实例宕机分析 4.1 数据库层面日志的分…...
深度学习---知识蒸馏(Knowledge Distillation, KD)
一、知识蒸馏的本质与起源 定义: 知识蒸馏是一种模型压缩与迁移技术,通过将复杂高性能的教师模型(Teacher Model)所学的“知识”迁移到轻量级的学生模型(Student Model),使学生模型在参数量和计…...
AI日报 - 2024年5月17日
🌟 今日概览 (60秒速览) ▎🤖 大模型前沿 | OpenAI推出自主编码代理Codex;Google DeepMind发布Gemini驱动的编码代理AlphaEvolve,能设计先进算法;Meta旗舰AI模型Llama 4 Behemoth发布推迟。 Codex能并行处理多任务&…...
OAuth2.0
OAuth2.0 1. 什么是OAuth2.02.OAuth2.0的应用场景3. OAuth2.0基本概念4. 经典OAuth2.0认证流程5. 四种授权模式5.1 授权码模式(Authorization Code Grant)5.2 隐式授权(Implicit Grant)5.3 密码模式(Resource Owner Pa…...
deepin v23.1 音量自动静音问题解决
有的机器上会有音量自动静音问题, 如果你的电脑上也遇到, 这个问题是 Linux 内核的原因, ubuntu上也可能会遇到相同问题(比如你升级了最新内核6.14), 而我测试得6.8.0的内核是不会自动静音的. Index of /mainline 到上面这个链接(linux 内核的官方链接)下载6.8.0的内核, s…...
Spring Security 集成指南:避免 CORS 跨域问题
Spring Security 集成指南:避免 CORS 跨域问题 在现代 Web 应用开发中,前后端分离架构已成为主流。当我们使用 Spring Security 保护后端 API 时,经常会遇到跨域资源共享(CORS)问题。这篇文章将详细解析 Spring Secur…...
stack和queue简单模拟实现
stackreverse_iteratorqueuepriority_queue仿函数具体代码 stack Stacks are a type of container adaptor, specifically designed to operate in a LIFO context (last-in first-out), where elements are inserted and extracted only from one end of the container. 上述描…...
2.单链表两数相加(java)
题目描述: 分析: 1.首先创建一个虚拟节点 ListNode dummy new ListNode(-1);再创建一个节点来保存虚拟节点,因为使用虚拟节点来移动,如果不保存,最后就会丢失。保存虚拟节点:ListNode pdummy; 2.进位标志…...
JDBC 的编写步骤及原理详解
一、JDBC 简介 JDBC(Java DataBase Connectivity)即 Java 数据库连接,是 Java 语言用于操作数据库的一套 API。它为多种关系数据库提供了统一的访问方式,允许 Java 程序与不同类型的数据库(如 MySQL、Oracle、SQL Ser…...
AIStarter Windows 版本迎来重磅更新!模型插件工作流上线,支持 Ollama / ComfyUI 等多平台本地部署模型统一管理
如果你正在使用 AIStarter 工具进行本地 AI 模型部署 ,那么这条消息对你来说非常重要! 在最新推出的 AIStarter Windows 正式版更新中 ,官方对整个平台进行了功能重构和性能优化,尤其是新增了「模型插件工作流 」功能,…...
卸载和安装JDK
文章目录 卸载JDK安装JDK 卸载JDK 删除java的安装目录删除JAVA_HOME删除path下关于java的目录在cmd命令提示符中输入 java -version 安装JDK 浏览器搜索JDK8 下载电脑对应版本 双击安装JDK 记住安装的路径 配置环境变量 我的电脑 -> 右键 -> 属性 新建系统环境变量…...
【蓝桥杯省赛真题51】python石头运输 第十五届蓝桥杯青少组Python编程省赛真题解析
python石头运输 第十五届蓝桥杯青少年组python比赛省赛真题详细解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解 <...
USRP 射频信号 采集 回放 系统
USRP 射频信号采集回放系统 也可以叫做: 利用宽带RF录制和回放系统实现6G技术研究超宽带射频信号采集回放系统使用NI USRP平台实现射频信号录制和回放操作演示USRP也能实现多通道宽带信号流盘回放了! 对于最简单的实现方法就是使用LabVIEW进行实现 采…...
产品经理入门(2)产品体验报告
产品体验报告大纲:重点在产品体验——优点。 1.产品概括 可以从各大平台搜产品介绍。 2.市场分析 按照产品方向分析各个指标——包括有效使用时间,市场规模等。 3. 用户分析——对用户通过各项指标画像。 4.产品体验——对各项功能与设计的体验。 5.报告总结...
区块链基本理解
文章目录 前言一、什么是分布式账本(DLT)二、什么是P2P网络?二、共识算法三、密码算法前言 区块链是由一个一个数据块组成的链条,按照时间顺序将数据块逐一链接,通过哈希指针链接,所有的数据块共同维护一份分布式账本(DLT),每个节点(可以理解为一个玩家,一台计算机)都拥…...
数字万用表与指针万用表使用方法及注意事项
在电子测量领域,万用表是极为常用的工具,数字万用表和指针万用表各具特点。熟练掌握它们的使用方法与注意事项,能确保测量的准确性与安全性。下面为您详细介绍: 一 、数字万用表按钮功能 > 进入及退出手动量程模式 每 按 […...
C语言查漏补缺
1、数组初始化时,例如char arr[5] "abcde",因为字符串中有6个字符,即末尾还有个结束符,但是数组容量为5,所以仅接纳5个字符,末尾的结束符不会被接纳,故而这样的字符数组在直接输出时…...
【JDBC】JDBC常见错误处理方法及驱动的加载
MySQL8中数据库连接的四个参数有两个发生了变化 String driver "com.mysql.cj.jdbc.Driver"; String url "jdbc:mysql://127.0.0.1:3306/mydb?useSSLfalse&useUnicodetrue&characterEncodingutf8&serverTimezoneAsia/Shanghai"; 或者Strin…...
从紫光集团看基本财务分析
PE 46PE 代表投资人对他的期望是它的业绩至少要增长50%才算及格。 但实际业绩 一年不如一年. 所以,这个PE 应该是 业绩倒退了,但是市值还没有掉下去,导致运算的结果处在高PE阶段。 那么随着股价的下跌,这个数字会慢慢变小。 当然…...
软件调试纵横谈-17-win32堆的调试支持
17.Win32堆的调试支持_哔哩哔哩_bilibili 继续边看录像边做实验。 堆上的内存时用size表达的,组成一个链表。 创建一个FreCheck应用 上次看heap,直接使用下载的文件,本次要做实验了,就需要自己动手,搞个VC proje…...
CANoe CAPL TCP DoIP通信问题
目录 问题Class: TcpSocketdemo示例client注释掉配置TCP/IP stack改demo代码过滤IP,与需要的IP建立连接问题 使用CANoe进行DoIP通信时,如果是标准的DoIP节点,可以使用DoIP相关函数进行通信。 以下两篇文章是按照此方式实现的。 十六、DoIP诊断通信 1 (专栏:从零开始搭建…...
理解 plank 自动生成的 copyWithBlock: 方法
当你使用 plank 命令自动生成一个类时 ./plank --objc_class_prefix=PUG --no_runtime --no_recursive user.json分析 在 JSON 目录下, 执行如上命令后, 生成的 PUGUser 对象, 会自带 copyWithBlock: 方法, 这个方法是用来做什么的 ? copyWithBlock: (注意末尾有一个冒号,因…...
FreeCAD源码分析: Transaction实现原理
本文阐述FreeCAD中Transaction的实现原理。 注1:限于研究水平,分析难免不当,欢迎批评指正。 注2:文章内容会不定期更新。 一、概念 Ref. from What is a Transaction? A transaction is a group of operations that have the f…...
黑马点评-用户登录
文章目录 用户登录发送短信验证码注册/登录校验登录 用户登录 发送短信验证码 public Result sendCode(String phone, HttpSession session) {// 1.校验手机号if (RegexUtils.isPhoneInvalid(phone)) {// 2.如果不符合,返回错误信息return Result.fail("手机…...
OpenAI新发布Codex的全面解析
一 . 介绍 人工智能技术的飞速发展正在重塑各行各业的运作方式,特别是在软件工程领域。随着生成式AI模型能力的不断提升,代码生成与软件开发领域正经历一场前所未有的变革。OpenAI作为人工智能领域的领军企业,其每一次技术突破都备受全球科技…...
【AI算法工程师面试指北】ResNet为什么用avgpool结构?
在ResNet(残差网络)中,最后使用平均池化(AvgPool)结构主要有以下几个关键原因,这些设计与网络的效率、性能和泛化能力密切相关: 1. 减少参数与计算量,避免过拟合 替代全连接层的冗…...
单调栈和单调队列
一、单调栈 1、使用场景 解决元素左 / 右侧第一个比他大 / 小的数字。 2、原理解释 用栈解决,目标是栈顶存储答案。 以元素左侧第一个比他小为例: (1)遍历顺序一定是从左向右。 (2)由于栈顶一定是答…...
DeepSeek-R1 Supervised finetuning and reinforcement learning (SFT + RL)
DeepSeek-R1Supervised finetuning and reinforcement learning (SFT RL) 好啊,我们今天的直播会非常透彻的跟大家系统性的分享一下整个agents AI就大模型智能体系统和应用程序。我们在做开发的时候,或者实际做企业级的产品落地的时候,你必…...
【部署】读取excel批量导入dify的QA知识库
回到目录 【部署】读取excel批量导入dify的QA知识库 0. 背景 dify的知识库支持QA模式,分段效果不算太理想,在我们的项目里面,手工编辑高质量QA文档,没有办法批量导入系统。 项目dify_import,支持读取excel文件批量导…...
Scanner对象
文章目录 Scanner对象基本语法使用next()接受使用nextLine()接受小案例总结 Scanner对象 java给我们提供了一个工具类,我们可以获取用户的输入 java.util.Scanner是java5的新特性,我们可以通过Scanner类来获取用户的输入 基本语法 Scanner s new Sc…...
Java 面向对象详解和JVM底层内存分析
先关注、点赞再看、人生灿烂!!!(谢谢) 神速熟悉面向对象 表格结构和类结构 我们在现实生活中,思考问题、发现问题、处理问题,往往都会用“表格”作为工具。实际上,“表格思维”就是…...
PIC16F18877 ADC 代码
这段代码是为PIC16F18877微控制器设计的嵌入式系统程序,主要实现了LCD显示屏控制、DHT11温湿度传感器数据采集和ADC模拟量读取三大功能。程序通过配置32MHz内部时钟源初始化系统,使用4位数据总线驱动LCD显示模块,定时读取DHT11传感器获取温湿度数据并校验,同时通过ADC通道采…...
Visual Studio2022跨平台Avalonia开发搭建
由于我已经下载并安装了 VS2022版本,这里就跳过不做阐述。 1.安装 Visual Studio 2022 安装时工作负荷Tab页勾选 “.NET 桌面开发” 和“Visual Studio扩展开发” ,这里由于不是用的微软的MAUI,所以不用选择其他的来支持跨平台开发&a…...
灵光一现的问题和常见错误1
拷贝构造函数显式写,编译器还会自动生成默认构造函数吗,还有什么函数会出现这种问题 在C中,当类显式定义某些特殊成员函数时,编译器可能不再自动生成其他相关函数。以下是详细分析: I. 显式定义拷贝构造函数对默认构造…...
React学习(二)-变量
也是很无聊,竟然写这玩意,毕竟不是学术研究,普通工作没那么多概念性东西,会用就行╮(╯▽╰)╭ 在React中,变量是用于存储和管理数据的基本单位。根据其用途和生命周期,React中的变量可以分为以下几类: 1. 状态变量(State) 用途:用于存储组件的内部状态,状态变化会触…...
我的世界模组开发——特征(2)
原版代码 AbstractHugeMushroomFeature 以下是对AbstractHugeMushroomFeature类代码的逐段解析,结合Minecraft游戏机制和蘑菇形态学特征进行说明: 1. 类定义与继承关系 public abstract class AbstractHugeMushroomFeature extends Feature<HugeMushroomFeatureConfigu…...
中国30米年度土地覆盖数据集及其动态变化(1985-2022年)
中文名称 中国30米年度土地覆盖数据集及其动态变化(1985-2022年) 英文名称:The 30 m annual land cover datasets and its dynamics in China from 1985 to 2022 CSTR:11738.11.NCDC.ZENODO.DB3943.2023 DOI 10.5281/zenodo.8176941 数据共享方式:…...
2000 元以下罕见的真三色光源投影仪:雷克赛恩Cyber Pro1重新定义入门级投影体验
当性价比遇上技术瓶颈 在 2000元以下的1080P投影仪,单LCD 技术长期主导。而三色光源的DLP和3LCD真1080P都在4000元以上。 单LCD投影为纯白光光源,依赖CF滤光膜导致光效低下,普遍存在" 色彩失真 " 等问题。数据显示,该价…...
数学复习笔记 19
前言 向量收尾。线代大概是学了一半了。 向量 向量可以认为是一个矩阵。 线性组合 前面加一个系数就可以了。线性组合和线性表示实际上就是一个意思。 线性相关性 实际上就是内部的向量,至少有一个可以用其他向量表示出来。存在一种情况,系数不全…...