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

嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作

嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作

  • 第三章 硬件知识_LED 原理图
    • 3.1 先来讲讲怎么看原理图
  • 第四章 普适的 GPIO 引脚操作方法
    • 4.1 GPIO 模块一般结构
    • 4.2 GPIO 寄存器操作
    • 4.3 GPIO 的其他功能:防抖动、中断、唤醒
  • 第五章 具体单板的 GPIO 操作方法
    • 5.1 AM335X 的 GPIO 操作方法
      • 5.1.1 AM335X 的 GPIO 模块结构
      • 5.1.2 AM335X 的 GPIO 相关寄存器
      • 5.1.3 set-and-clear 协议
    • 5.2 RK3288 的 GPIO 操作方法
      • 5.2.1 RK3288 的 GPIO 模块结构
      • 5.2.2 RK3288 的 GPIO 相关寄存器
    • 5.3 RK3399 的 GPIO 操作方法
      • 5.3.1 RK3399 的 GPIO 模块结构
      • 5.3.2 RK3399 的 GPIO 相关寄存器
    • 5.4 IMX6ULL 的 GPIO 操作方法
      • 5.4.1 IMX6ULL 的 GPIO 模块结构
      • 5.4.2 CCM 用于设置是否向 GPIO 模块提供时钟
      • 5.4.3 IOMUXC:引脚的模式(Mode、功能)
      • 5.4.4 GPIO 模块内部
      • 5.4.5 读 GPIO
      • 5.4.6 写 GPIO

第三章 硬件知识_LED 原理图

当我们学习 C 语言的时候,我们会写个 Hello 程序。
那当我们写 ARM 程序,也该有一个简单的程序引领我们入门,这个程序就是点亮 LED。

我们怎样去点亮一个 LED 呢?
分为三步:
1.看原理图,确定控制 LED 的引脚;
2.看主芯片的芯片手册,确定如何设置控制这个引脚;
3.写程序;

3.1 先来讲讲怎么看原理图

LED 样子有很多种,像插脚的,贴片的。
在这里插入图片描述
它们长得完全不一样,因此我们在原理图中将它抽象出来。

点亮 LED 需要通电源,同时为了保护 LED,加个电阻减小电流。
控制 LED 灯的亮灭,可以手动开关 LED,但在电子系统中,不可能让人来控制开关,通过编程,利用芯片的引脚去控制开关。
在这里插入图片描述
LED 的驱动方式,常见的有四种。
方式 1:使用引脚输出 3.3V 点亮 LED,输出 0V 熄灭 LED。
方式 2:使用引脚拉低到 0V 点亮 LED,输出 3.3V 熄灭 LED。

有的芯片为了省电等原因,其引脚驱动能力不足,这时可以使用三极管驱动。
方式 3:使用引脚输出 1.2V 点亮 LED,输出 0V 熄灭 LED。
方式 4:使用引脚输出 0V 点亮 LED,输出 1.2V 熄灭 LED。

在这里插入图片描述
由此,主芯片引脚输出高电平/低电平,即可改变 LED 状态,而无需关注 GPIO 引脚输出的是 3.3V 还是1.2V。
所以简称输出 1 或 0:
逻辑 1–>高电平
逻辑 0–>低电平

第四章 普适的 GPIO 引脚操作方法

GPIO: General-purpose input/output,通用的输入输出口

4.1 GPIO 模块一般结构

a. 有多组 GPIO,每组有多个 GPIO
b. 使能:电源/时钟
c. 模式(Mode):引脚可用于 GPIO 或其他功能
d. 方向:引脚 Mode 设置为 GPIO 时,可以继续设置它是输出引脚,还是输入引脚
e. 数值:对于输出引脚,可以设置寄存器让它输出高、低电平
对于输入引脚,可以读取寄存器得到引脚的当前电平

4.2 GPIO 寄存器操作

a. 芯片手册一般有相关章节,用来介绍:power/clock
可以设置对应寄存器使能某个 GPIO 模块(Module)
有些芯片的 GPIO 是没有使能开关的,即它总是使能的
b. 一个引脚可以用于 GPIO、串口、USB 或其他功能,
有对应的寄存器来选择引脚的功能
c. 对于已经设置为 GPIO 功能的引脚,有方向寄存器用来设置它的方向:输出、输入
d. 对于已经设置为 GPIO 功能的引脚,有数据寄存器用来写、读引脚电平状态

GPIO 寄存器的 2 种操作方法:
原则:不能影响到其他位
1) 直接读写:读出、修改对应位、写入
要设置 bit n:
val = data_reg;
val = val | (1<<n);
data_reg = val;
要清除 bit n:
val = data_reg;
val = val & ~(1<<n);
data_reg = val;

2) set-and-clear protocol:
set_reg, clr_reg, data_reg 三个寄存器对应的是同一个物理寄存器,
要设置 bit n:set_reg = (1<<n);
要清除 bit n:clr_reg = (1<<n);

4.3 GPIO 的其他功能:防抖动、中断、唤醒

后续章节再介绍

第五章 具体单板的 GPIO 操作方法

请使用 GIT 下载文档后,看下图红框所示目录中各板子对应的文档及图片。
网盘中相同名字的目录下也有对应的视频。
在这里插入图片描述
为方便学习,在本文档中也把上述 GIT 目录中的文档添加进来了。

5.1 AM335X 的 GPIO 操作方法

GPIO: General-purpose input/output,通用的输入输出口
PRCM: Power, Reset, and Clock Management (电源、复位、时钟管理器)
CM: Control Module(控制模块) 或 Clock Module (时钟模块)
PRM_PER: Power Reset Module Peripheral Registers(电源/复位模块中关于外设的寄存器)
CM_PER: Clock Module Peripheral Registers (时钟模块中关于外设的寄存器)

5.1.1 AM335X 的 GPIO 模块结构

在这里插入图片描述
有 4 组 GPIO(GPIO0~3),每组有 32 个 GPIO。
GPIO 的控制涉及 3 大模块:PRCM、Control Module、GPIO 模块本身。
① PRCM 用于使能模块:
GPIO0 永远都是使能的,GPIO1~3 可单独控制。
PRCM 模块给 GPIO 模块常供电,只需要使能 GPIO 模块的时钟。
② Control Module 用于设置模式(Mode):
设置引脚的 Mode(即选择功能)、上下拉电阻等;
每一个 GPIO 引脚在 Control Module 中都有一个寄存器,怎么找到这个寄存器?
a. 根据 pin number 确定 pin name
b. 根据 pin name 在 Control Module 中确定寄存器

③ GPIO 模块内部:
方向:引脚 Mode 设置为 GPIO 时,可以继续设置它是输出引脚,还是输入引脚。
数值:对于输出引脚,可以设置寄存器让它输出高、低电平;
对于输入引脚,可以读取寄存器得到引脚的当前电平。

5.1.2 AM335X 的 GPIO 相关寄存器

在这里插入图片描述

5.1.3 set-and-clear 协议

假设某个 GPIO 被设置为输出,怎么设置它的输出电平呢?AM335X 中对于每个 GPIO 模块有一个
GPIO_DATAOUT 寄存器,其中的每一位对应一个引脚,如下:
在这里插入图片描述
要设置某一位时,不能影响到其他位,操作方法是:读出原来的值,修改某一位,把新值写回去。需要3 个步骤才可以设置某一位的值,这效率太低了!

使用 set-and-clear 可以只用一个步骤即可修改某一位的值。
当想设置某一位为 1 时,往 DATA_SETDATAOUT 寄存器中某位写入 1 即可,芯片内部会把对应引脚的电平设置为 1,并且不会影响其他引脚:
在这里插入图片描述
并非所有的芯片都有 set-and-clear 功能,TI 的 AM335X 系列芯片有这功能。

5.2 RK3288 的 GPIO 操作方法

GPIO: General-purpose input/output,通用的输入输出口
CRU: Clock & Reset Unit (时钟和复位单元)
PMU: Power Managerment Unit (电源管理单元)
GRF: General Register Files (通用寄存器文件)

5.2.1 RK3288 的 GPIO 模块结构

在这里插入图片描述
有 9 组 GPIO(GPIO0~8),每组分为最多 4 个小组 port A/B/C/D,每小组最多 8 个 GPIO。理论上每组GPIO 的引脚有 32 个,但是实际上并没有那么多。比如 GPIO0 只有 GPIO0_A0~A7、GPIO0_B0~B7、GPIO0_C0~C2 这些引脚。
GPIO 的控制涉及 4 大模块:CRU、PMU、GRF、GPIO 模块本身。
① CRU 用于设置是否向 GPIO 模块提供时钟:
CRU 的内部结构如下图所示:
在这里插入图片描述

可以设置寄存器使能 GPIOx 的时钟:
a. CRU_CLKGATE17_CON 用于控制 GPIO0;
b. CRU_CLKGATE14_CON 用于控制 GPIO1~8

② PMU 用于控制电源:
电源管理单元里,有多个电源域(power domain,简称为 PM),在一个域下有多个设备。
比如 PD_ALIVE,它下面有这些设备:CRU、GRF、GPIO 1~8、TIMER 或 WDT。
比如 PD_PMU,它下面有这些设备:PMU、SRAM(4K)、Secure GRF、GPIO0。
可见,GPIO0、GPIO1~8 分属不同的 PM。
GPIO0、GPIO1~8 都是常供电的,它们是否工作取决于其时钟是否使能。

③ 设置引脚的模式(Mode、功能):
GPIO0 比较特殊,为了让其引脚用于 GPIO 功能,要设置 PMU 里的相关寄存器。
GPIO1~8 类似,为了让其引脚用于 GPIO 功能,要设置 GRF 里的相关寄存器。

④ GPIO 模块内部:
方向:引脚设置为 GPIO 时,可以继续设置寄存器 GPIO_SWPORTA_DDR 确定它是输出引脚,还是输入引脚。
数值:对于输出引脚,可以设置寄存器 GPIO_SWPORTA_DR 让它输出高、低电平;
对于输入引脚,可以读取寄存器 GPIO_EXT_PORTA 得到引脚的当前电平。

5.2.2 RK3288 的 GPIO 相关寄存器

在这里插入图片描述

5.3 RK3399 的 GPIO 操作方法

GPIO: General-purpose input/output,通用的输入输出口
CRU: Clock & Reset Unit (时钟和复位单元)
PMU: Power Managerment Unit (电源管理单元)
GRF: General Register Files (通用寄存器文件)

5.3.1 RK3399 的 GPIO 模块结构

在这里插入图片描述
有 5 组 GPIO(GPIO0~4),每组分为最多 4 个小组 port A/B/C/D,每小组最多 8 个 GPIO。理论上每组 GPIO 的引脚有 32 个,但是实际上并没有那么多。比如 GPIO0 只有 GPIO0_A0~A7、GPIO0_B0~B5 这些引脚。

① CRU 用于设置是否向 GPIO 模块提供时钟
a. PMUCRU_CLKGATE_CON1 用于控制 GPIO0~1;
b. CRU_CLKGATE_CON31 用于控制 GPIO2~4

② PMU 用于控制电源:
电源管理单元里,有多个电源域(power domain,简称为 PM),在一个域下有多个设备。
比如 PD_ALIVE,它下面有这些设备:CRU、GRF、GPIO 1~4、TIMER 或 WDT。
比如 PD_PMU,它下面有这些设备:cm0、PMU、SRAM(8K)、Secure GRF、GPIO0、PVTM、I2C。
可见,GPIO0、GPIO1~4 分属不同的 PM。
GPIO0、GPIO1~4 都是常供电的。

③ 设置引脚的模式(Mode、功能):
GPIO0~1 比较特殊,为了让其引脚用于 GPIO 功能,要设置 PMU 里的相关寄存器。
GPIO2~4 类似,为了让其引脚用于 GPIO 功能,要设置 GRF 里的相关寄存器。

④ GPIO 模块内部:
方向:引脚设置为 GPIO 时,可以继续设置寄存器 GPIO_SWPORTA_DDR 确定它是输出引脚,还是输入引脚。
数值:对于输出引脚,可以设置寄存器 GPIO_SWPORTA_DR 让它输出高、低电平;
对于输入引脚,可以读取寄存器 GPIO_EXT_PORTA 得到引脚的当前电平。

5.3.2 RK3399 的 GPIO 相关寄存器

在这里插入图片描述

5.4 IMX6ULL 的 GPIO 操作方法

CCM: Clock Controller Module (时钟控制模块)
IOMUXC : IOMUX Controller,IO 复用控制器
GPIO: General-purpose input/output,通用的输入输出口

5.4.1 IMX6ULL 的 GPIO 模块结构

参考资料:芯片手册《Chapter 28: General Purpose Input/Output (GPIO)》
有 5 组 GPIO(GPIO1~GPIO5),每组引脚最多有 32 个,但是可能实际上并没有那么多。
GPIO1 有 32 个引脚:GPIO1_IO0~GPIO1_IO31;
GPIO2 有 22 个引脚:GPIO2_IO0~GPIO2_IO21;
GPIO3 有 29 个引脚:GPIO3_IO0~GPIO3_IO28;
GPIO4 有 29 个引脚:GPIO4_IO0~GPIO4_IO28;
GPIO5 有 12 个引脚:GPIO5_IO0~GPIO5_IO11;

GPIO 的控制涉及 4 大模块:CCM、IOMUXC、GPIO 模块本身,框图如下:

在这里插入图片描述

5.4.2 CCM 用于设置是否向 GPIO 模块提供时钟

参考资料:芯片手册《Chapter 18: Clock Controller Module (CCM)》

GPIOx 要用 CCM_CCGRy 寄存器中的 2 位来决定该组 GPIO 是否使能。哪组 GPIO 用哪个 CCM_CCGR 寄存器来设置,请看上图红框部分。
CCM_CCGR 寄存器中某 2 位的取值含义如下:
在这里插入图片描述
① 00:该 GPIO 模块全程被关闭
② 01:该 GPIO 模块在 CPU run mode 情况下是使能的;在 WAIT 或 STOP 模式下,关闭
③ 10:保留
④ 11:该 GPIO 模块全程使能

GPIO2 时钟控制:
在这里插入图片描述
GPIO1、GPIO5 时钟控制:
在这里插入图片描述

GPIO3 时钟控制:
在这里插入图片描述
GPIO4 时钟控制:
在这里插入图片描述

5.4.3 IOMUXC:引脚的模式(Mode、功能)

参考资料:芯片手册《Chapter 32: IOMUX Controller (IOMUXC)》。
在这里插入图片描述
对于某个/某组引脚,IOMUXC 中有 2 个寄存器用来设置它:
① 选择功能:
IOMUXC_SW_MUX_CTL_PAD_ :Mux pad xxx,选择某个 pad 的功能
IOMUXC_SW_MUX_CTL_GRP_:Mux grp xxx,选择某组引脚的功能
某个引脚,或是某组预设的引脚,都有 8 个可选的模式(alternate (ALT) MUX_MODE)。
在这里插入图片描述
比如:
在这里插入图片描述
② 设置上下拉电阻等参数:
IOMUXC_SW_PAD_CTL_PAD_<PAD_NAME>:pad pad xxx,设置某个 pad 的参数
IOMUXC_SW_PAD_CTL_GRP_:pad grp xxx,设置某组引脚的参数
在这里插入图片描述
比如:
在这里插入图片描述

5.4.4 GPIO 模块内部

在这里插入图片描述

我们暂时只需要关心 3 个寄存器:
① GPIOx_GDIR:设置引脚方向,每位对应一个引脚,1-output,0-input
在这里插入图片描述
② GPIOx_DR:设置输出引脚的电平,每位对应一个引脚,1-高电平,0-低电平
在这里插入图片描述
③ GPIOx_PSR:读取引脚的电平,每位对应一个引脚,1-高电平,0-低电平
在这里插入图片描述

5.4.5 读 GPIO

在这里插入图片描述
翻译一下:
① 设置 CCM_CCGRx 寄存器中某位使能对应的 GPIO 模块 // 默认是使能的,上图省略了
② 设置 IOMUX 来选择引脚用于 GPIO
③ 设置 GPIOx_GDIR 中某位为 0,把该引脚设置为输入功能
④ 读 GPIOx_DR 或 GPIOx_PSR 得到某位的值(读 GPIOx_DR 返回的是 GPIOx_PSR 的值)

5.4.6 写 GPIO

在这里插入图片描述
翻译一下:
① 设置 CCM_CCGRx 寄存器中某位使能对应的 GPIO 模块 // 默认是使能的,上图省略了
② 设置 IOMUX 来选择引脚用于 GPIO
③ 设置 GPIOx_GDIR 中某位为 1,把该引脚设置为输出功能
④ 写 GPIOx_DR 某位的值

需要注意的是,你可以设置该引脚的 loopback 功能,这样就可以从 GPIOx_PSR 中读到引脚的有实
电平;你从 GPIOx_DR 中读回的只是上次设置的值,它并不能反应引脚的真实电平,比如可能因为硬件故障导致该引脚跟地短路了,你通过设置 GPIOx_DR 让它输出高电平并不会起效果。

相关文章:

嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作

嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作 第三章 硬件知识_LED 原理图3.1 先来讲讲怎么看原理图 第四章 普适的 GPIO 引脚操作方法4.1 GPIO 模块一般结构4.2 GPIO 寄存器操作4.3 GPIO 的其他功能&#xff1a;防抖动、中断、唤醒 第五章 具体单板的 GPIO 操作…...

外贸人员如何选择适合的邮箱服务

随着互联网和数字技术的快速发展&#xff0c;电子邮件已经成为商务沟通的主要方式之一。对于外贸人员来说&#xff0c;选择一个合适且高效的邮箱服务至关重要。本文将探讨外贸人员在选择外贸邮箱时应考虑的因素&#xff0c;以便找到最适合自己的解决方案。 “外贸人员如何选择合…...

pt29django教程

文件上传 文件上传必须为POST提交方式&#xff0c; 表单<form>中文件上传时必须有带有enctype"multipart/form-data" 时才会包含文件内容数据。 表单中用<input type"file" name"xxx">标签上传文件 名字xxx对应request.FILES[xx…...

【操作系统笔记七】进程和线程

进程的组成 进程要读取 ELF 文件&#xff0c;那么&#xff1a; ① 要知道文件系统的信息&#xff0c;fs_struct② 要知道打开的文件的信息&#xff0c;files_struct 一个进程除了需要读取 ELF 文件外&#xff0c;还可以读取其他的文件中的数据。 进程中肯定有一个 mm_struct…...

Kakfa高效读写数据

1.概述 无论 kafka 作为 MQ 也好&#xff0c;作为存储层也罢&#xff0c;无非就是两个功能&#xff1a;一是 Producer 生产的数据存到 broker&#xff0c;二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了&#xff0c;本文也是从这两个方面去剖析Kafk…...

C++ 类和对象(4)构造函数

C的目标之一是让使用类对象就像使用标准类型一样&#xff0c;但是常规的初始化语法不适用于类似类型Stock&#xff1a; int year 2001&#xff1b; struct thing {char * pn;int m; }; thing amabob {"wodget",-23}; //有效初始化 Stock hot {"Sukies Autos…...

数据结构————广度寻路算法 Breadth First Search(广度优先算法)

(一)基础补充 二叉树的基本定义 1)二叉树就是度不超过2的树,其每个结点最多有两个子结点 2)二叉树的结点分为左结点和右结点 代码实现二叉树 #include <stdio.h> #include <stdlib.h> struct Node {int data;struct Node* pLeft;struct Node* pRight; }…...

安卓桌面记事本便签软件哪个好用?

日常生活及工作中&#xff0c;很多人常常会遇到一些一闪而现的灵感&#xff0c;这时候拿出手机想要记录时&#xff0c;却找不到记录的软件。在这个快节奏的时代&#xff0c;安卓手机是我们日常生活不可或缺的伙伴。然而&#xff0c;正因为我们的生活如此忙碌&#xff0c;记事变…...

河北吉力宝以步力宝健康鞋引发的全新生活生态商

在当今瞬息万变的商业世界中&#xff0c;成功企业通常都是那些不拘泥于传统、勇于创新的先锋之选。河北吉力宝正是这样一家企业&#xff0c;通过打造一双步力宝健康鞋&#xff0c;他们以功能性智能科技穿戴品为核心&#xff0c;成功创造了一种结合智能康养与时尚潮流的独特产品…...

反射获取Constructor、Field、Method对象

1、获取构造器 Constructor [ ] getConstructor s ( ) 获取全部的构造器&#xff1a;只能获取 public 修饰的构造器 package com.csdn.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.junit.Test; import jav…...

【Netty】 ByteBuf的常用API总结

目录 一、ByteBuf介绍 二、ByteBuf创建 1.池化创建 ByteBufAllocator 2.Unpooled &#xff08;非池化&#xff09;创建ByteBuf 3.ByteBufUtil 操作ByteBuf 三、读取ByteBuf数据 1.get方法 2.read方法 3.set方法 4.write方法 5.索引管理 6.索引查找 7.索引查找 8.其…...

热门敏捷开发管理工具

敏捷管理研发工具可以协助团队更好地进行敏捷开发和管理。以下是几种流行的敏捷管理研发工具&#xff1a; Leangoo&#xff1a;Leangoo领歌一款永久免费的专业敏捷研发管理工具&#xff0c;它覆盖了敏捷项目研发全流程&#xff0c;包括小型团队敏捷开发&#xff0c;规模化敏捷…...

Java分支结构:一次不经意的选择,改变了我的一生。

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、顺序结构二、分支结构1、if语句2、switch语句 好久不见&#xff01;命运之轮常常在不经意间转动&#xff0c;有时一个看似微…...

Unity中Shader需要了解的点与向量

文章目录 前言一、点和向量的区别二、向量加法减法1、向量加法2、向量减法(可以把向量减法转化为向量加法) 三、向量的模四、标量![在这里插入图片描述](https://img-blog.csdnimg.cn/03df81df3cdf47989a11605d5f5e7da5.png)1、向量与标量的乘法 前言 Unity中Shader了解使用的…...

Java初始化大量数据到Neo4j中(一)

背景&#xff1a;我们项目第一次部署图数据库&#xff0c;要求我们把现有的业务数据以及关系上线第一时间初始化到Neo4j中。开发环境数据量已经百万级别。生成环境数据量更多。 我刚开始开发的时候&#xff0c;由于对Neo4j的了解并没有很多&#xff0c;第一想到的是用代码通用组…...

Excel·VBA日期时间转换提取正则表达式函数

标准日期转换 Function 标准日期(ByVal str$) As DateDim pat$, result$arr Array("(\d{4}).*?(\d{1,2}).*?(\d{1,2})", "(\d{4}).*?(\d{1}).*?(\d{1,2})")If Len(str) < 8 Then pat arr(1) Else pat arr(0)With CreateObject("vbscript.r…...

Django中的缓存

Django中的缓存 缓存的定义 定义: 缓存是-类可以更快的读取数据的介质统称&#xff0c;也指其它可以加快数据读取的存储方式。一般用来存储临时数据&#xff0c;常用介质的是读取速度很快的内存 意义:视图渲染有一定成本&#xff0c;数据库的频繁查询过高;所以对于低频变动的页…...

Python 编程基础 | 第二章-基础语法 | 2.4、while 语句

一、while 语句 1、循环语句 Python 编程中 while 语句用于循环执行程序&#xff0c;其基本形式为&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statements)……例如&#xff1a; count 0 while (count < 9):print(count)count 1while 语句时还有另外两个…...

Qt Charts简介

文章目录 一.图标类型Charts分类1.折线图和样条曲线图2.面积图和散点图3.条形图4.饼图5.误差棒图6.烛台图7.极坐标图 二.坐标轴Axes类型分类三.图例四.图表的互动五.图表样式主题 一.图标类型Charts分类 图表是通过使用系列类的实例并将其添加到QChart或ChartView实例来创建的…...

MinGW、GCC、GNU和MSVC是什么?有什么区别?

在C和C开发中&#xff0c;常常会遇到MinGW、GCC、GNU和MSVC这些术语。本教程将向您解释它们的含义以及它们之间的区别&#xff0c;帮助您更好地理解这些常见的编译工具和开发环境。 MinGW&#xff08;Minimalist GNU for Windows&#xff09;&#xff1a; MinGW是一个开源的软件…...

引入easyExcel后,导致springboot项目无法开启tomcat

报错信息&#xff1a; Caused by: java.lang.annotation.IncompleteAnnotationException: org.terracotta.statistics.Statistic missing element type at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:81) at com.sun.proxy…...

Doris数据库FE——启动流程源码详细解析

Doris中FE主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。代码路径&#xff1a;doris/fe/fe-core/src/main/java/org/apache/doris/DorisFE.java 环境检查 在启动FE的时候&#xff0c;主要做环境检查。检查一些启动时必要的环境变量以及初始化配置…...

服务断路器_Resilience4j线程池隔离实现

线程池隔离配置修改YML文件 resilience4j:thread-pool-bulkhead: instances:backendA:# 最大线程池大小maxThreadPoolSize: 4# 核心线程池大小coreThreadPoolSize: 2# 队列容量queueCapacity: 2编写controller /*** 测试线程池服务隔离* return*/Bulkhead(name "backe…...

原神启动原神启动原神启动原神启动

测试游戏抽卡场景是确保玩家可以正常抽取虚拟物品或角色的重要部分。以下是一些可能的游戏抽卡场景的测试用例示例&#xff1a; 1.正常抽卡流程&#xff1a; 2.测试用户是否能够成功进行一次或多次抽卡操作。 3.确保每次抽卡后&#xff0c;用户收到相应的物品或角色。 4.抽卡…...

Glide - Android的图像加载和缓存库,专注于平滑滚动

官网 GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling 项目介绍 An image loading and caching library for Android focused on smooth scrolling Glide is a fast and efficient open source media management a…...

如何使用 API 接口获取商品数据,从申请 API 接口、使用 API 接口到实际应用,一一讲解

在当今的数字化时代&#xff0c;应用程序接口&#xff08;API&#xff09;已经成为数据获取的重要通道。API 接口使得不同的应用程序能够方便地进行数据交换&#xff0c;从而促进了信息的广泛传播和利用。在众多的数据源中&#xff0c;商品数据是一个非常重要的领域&#xff0c…...

苹果 CMS 原生 Java 白菜影视 App 源码【带打包教程】

苹果 CMS 原生 Java 白菜影视 App 源码是一款功能强大的影视应用程序&#xff0c;支持画中画、投屏、点播、播放前广告和支持普通解析等多种功能。与萝卜 App 源码相比&#xff0c;该套源码更加稳定&#xff0c;且拥有画中画投屏和自定义广告等功能&#xff0c;提高了安全性。 …...

Flutter开发之Package与Plugin

前言 在flutter中有包和插件两个概念&#xff0c;插件 (plugin) 是 package 的一种&#xff0c;全称是 plugin package&#xff0c;我们简称为 plugin&#xff0c;中文叫插件。包(Package)主要指对flutter相关功能的封装&#xff0c;类似于Android中的插件和iOS中的三方库。而插…...

[极客大挑战 2019]RCE ME 取反绕过正则匹配 绕过disable_function设置

目录 取反 1.蚁剑插件绕过 2.baypass disable_function open_dir/disable_function putenv()/LD_PRELOAD 来绕过限制 利用条件 利用思路 有意思。。。。 <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("Th…...

硬盘接口随机

关于硬盘接口 1 首先&#xff0c;关于[物理接口、协议、通道]2 物理接口&#xff1a;通讯中的电&#xff0c;光口&#xff0c;“物理规格&#xff0c;像是公路、铁路”。通道&#xff1a;通讯协议中的应用层以下所有层&#xff1f;“县道&#xff0c;省道&#xff0c;高速&am…...

武汉做营销型网站推广/太原首页推广

在脚本中加入&#xff1a; ArchitecturesInstallIn64BitModex64 ArchitecturesAllowedx64转载于:https://www.cnblogs.com/rizo/p/4335110.html...

网站服务器开发/上海做seo的公司

2019独角兽企业重金招聘Python工程师标准>>> 6.7.2 分割策略 有几种分割策略&#xff0c;但已知此处描述的分割策略能够给出好的结果。该方法第一步是通过将枢纽元与最后的元素交换使得枢纽元离开要被分割的数据段。i从第一个元素开始从而j从倒数第二个元素开始。下…...

怎么做网站最便宜/如何做个人网站

团队介绍 成员 工作描述 武松桦&#xff08;组长&#xff09; 1 领导团队 召开团队会议 2与需求方进行联系沟通 3页面代码 王亚正 1页面代码 2测试和bug修复 3后端开发 詹元成 1服务器配置和维护 2 页面代码 3 博客撰写 尹宇飞 1页面代码 2美工制作 3博客撰写 张军 …...

外包网站推荐/谷歌浏览器安卓下载

1、对windows2000系统&#xff1a;点开始&#xff0c;点运行,输入rundll32 netplwiz.dll,UsersRunDll 把使用本机必须输入用户和密码的勾去掉。 2、对windows2000以上系统&#xff1a;点开始&#xff0c;点运行,输入control userpasswords2把使用本机必须输入用户和密码的勾去掉…...

克拉玛依商城网站建设平台/seo助理

http协议是我们日常都会接触的&#xff0c;在python中&#xff0c;有大量的模块供我们使用来编写Web和Http客户端。 其中urllib2模块中的HTTP是最常用的协议。 既然有urllib2模块&#xff0c;也就应该有urllib模块。这两个模块都提供了同样的基本功能&#xff0c;但urllib2的扩…...

美女教师做爰网站/多地优化完善疫情防控措施

引言 前面Android开发之旅&#xff1a;环境搭建及HelloWorld&#xff0c;我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目&#xff0c;本篇将通过HelloWorld项目来介绍Android项目的目录结构。本文的主要主题如下&#xff1a; 1、HelloWorld项目的目录结构 1…...