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

STM32(二):STM32工作原理

    • 0、参考
    • 1、寄存器和存储器基本概念
        • (1)基本概念
        • (2)主要区别
        • (3)联系
        • (4)实际应用中的案例
        • (5)总结
        • (6)一些名词解释
    • 2、STM32指南者板子-存储器区域
        • 总划分
        • Block0
        • Block1
        • Block2
    • 3、STM32指南者板子-寄存器区域(片子上是存储器的BLOCK2这块区域)
        • (1)片上外设基地址
        • (2)总线基地址
        • (3)GPIO外设基地址
        • (4)GPIO外设寄存器地址
        • 总结
    • 4、C语言使用封装寄存器
        • (1)定义结构体GPIO_TypeDef
        • (2)定义外设基地址
        • (3)使用GPIO_TypeDef把地址强制转换成指针
        • (4)则访问任意端口的某个寄存器
    • 5、C语言常用位操作
        • 对某一位清零a &= ~(1<<2)
        • 对某一位取反a ^=(1<<6)
        • 对某几位清零a &= ~(3<<2*1)
        • 对某几位进行赋值a |= (1<<2*2)
    • 6、GPIO-寄存器版
        • (1)GPIO七个寄存器
        • (2)GPIO八个工作模式
        • (3)如何查找GPIO对应的功能
        • (4)如何查找GPIO对应的工作模式

0、参考

  • https://doc.embedfire.com/mcu/stm32/f103zhinanzhe/std/zh/latest/book/register.html
  • https://blog.csdn.net/m0_74091159/article/details/139794521

1、寄存器和存储器基本概念

在计算机系统中,寄存器和存储器是两个重要的概念,它们在数据存储和处理过程中扮演着不同但互补的角色。本文将详细讨论寄存器和存储器的区别与联系。

(1)基本概念

寄存器(Register)是一种速度极快的小容量存储单元,通常集成在CPU内部,用于暂存数据和指令。寄存器可以在一个CPU时钟周期内被读取或写入。

存储器(Memory)通常指随机存取存储器(RAM),是一种速度较慢但容量较大的存储设备,用于存储正在执行的程序和数据。存储器分为主存储器(如DRAM)和辅助存储器(如硬盘、SSD)。

(2)主要区别

速度

寄存器:速度最快,通常是计算机中最快的存储设备,因为它们直接集成在CPU内部,能够在一个时钟周期内进行读写操作。
存储器:速度相对较慢,即使是快速的DRAM,其访问速度也比寄存器慢一个数量级以上。

容量

寄存器:容量非常小,通常在几个字节到几百字节之间。这是因为寄存器的制造成本高,且CPU内部空间有限。
存储器:容量较大,现代计算机的RAM通常在几GB到几十GB之间,而辅助存储器则可达到TB级别。

位置和功能

寄存器:位于CPU内部,主要用于临时存储指令和数据,参与运算操作。例如,累加器(Accumulator)、程序计数器(Program Counter)和状态寄存器(Status Register)。
存储器:位于CPU外部,通过系统总线与CPU连接。用于存储当前运行的程序和数据,是操作系统和应用程序的运行空间。

功能与用途

寄存器:用于快速存取需要立即处理的数据,是CPU执行指令的关键组成部分。例如,寄存器用于存储操作数、结果、地址和控制信息。
存储器:用于存储大量数据和程序,是计算机系统的主要数据存储设备。例如,操作系统、应用程序以及用户数据都存储在存储器中。
(3)联系

虽然寄存器和存储器在性能和用途上有显著区别,但它们之间存在密切的联系:

数据交换

寄存器和存储器之间需要频繁的数据交换。CPU从存储器中读取指令和数据到寄存器,进行处理后,再将结果存回存储器。这种数据交换是通过系统总线和高速缓存(Cache)实现的。

层次结构

寄存器、缓存、主存储器(RAM)和辅助存储器(如硬盘、SSD)构成了计算机的存储层次结构。寄存器在最上层,速度最快但容量最小;辅助存储器在最底层,速度最慢但容量最大。这种层次结构保证了在成本和性能之间的平衡。

性能优化

现代计算机系统通过多级缓存(L1、L2、L3)来优化寄存器和存储器之间的数据交换,从而提升整体性能。缓存存储器介于寄存器和主存储器之间,存储经常使用的数据和指令,减少对较慢存储器的访问次数。
(4)实际应用中的案例

CPU指令执行过程

在执行一条指令时,CPU首先从存储器中取出指令(Fetch),将其存入指令寄存器(Instruction Register)。然后,指令译码器(Decoder)将指令译码,并根据指令类型从存储器或其他寄存器中获取操作数。接下来,执行单元(如算术逻辑单元ALU)对操作数进行运算,并将结果存入目标寄存器或存储器中。

高性能计算

在高性能计算(HPC)中,寄存器和存储器的有效利用对于提高计算效率至关重要。通过优化寄存器分配和存储器访问模式,可以显著提升计算速度。例如,使用寄存器重命名技术可以避免寄存器资源冲突,从而提高指令级并行性。
(5)总结

寄存器和存储器在计算机系统中扮演着不同但互补的角色。寄存器负责快速数据存取和处理,而存储器则提供大量数据和程序的存储空间。通过高效的数据交换和存储层次结构,计算机系统在性能和成本之间找到了平衡。这种分工和协作是现代计算机系统高效运行的基础。

(6)一些名词解释

存储器:

  • FLASH:闪存存储器,我们编写好的程序就放在这个地方;
  • SRAM:即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM;
  • ROM:只读存储器;

2、STM32指南者板子-存储器区域

总划分

在这里插入图片描述

Block0

在这里插入图片描述

Block1

在这里插入图片描述

Block2

在这里插入图片描述

3、STM32指南者板子-寄存器区域(片子上是存储器的BLOCK2这块区域)

在存储器Block2这块区域,设计的是片子的外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能, 当我们控制这些单元时就可以驱动外设工作。(使用板子的时候就是用这一块来控制外设)

我们可以找到每个单元的起始地址,然后通过C语言指针的操作方式来访问这些单元, 如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名, 这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
在这里插入图片描述

(1)片上外设基地址

即存储器Block2的首地址

0x40000000
(2)总线基地址

片上外设区分为三条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设。 相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中APB1总线的地址最低,片上外设从这里开始,也叫外设基地址。
在这里插入图片描述

(3)GPIO外设基地址

总线上挂载着各种外设,这些外设也有自己的地址范围,特定外设的首个地址称为“XX外设基地址”,也叫XX外设的边界地址。

以GPIO这个外设来讲解外设的基地址,GPIO属于高速的外设 ,挂载到APB2总线上
在这里插入图片描述

(4)GPIO外设寄存器地址

GPIO有很多个寄存器,每一个都有特定的功能。每个寄存器为32bit,占四个字节,在该外设的基地址上按照顺序排列, 寄存器的位置都以相对该外设基地址的偏移地址来描述。

以GPIOB端口为例,说明GPIO都有哪些寄存器
在这里插入图片描述有关外设的寄存器说明可参考《STM32F10xx参考手册》中具体章节的寄存器描述部分,在编程的时候我们需要反复的查阅外设的寄存器说明。

总结
/* 外设基地址 */
#define PERIPH_BASE           ((unsigned int)0x40000000)/* 总线基地址 */
#define APB1PERIPH_BASE       PERIPH_BASE
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x00010000)
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x00020000)/* GPIO外设基地址 */
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)/* 寄存器基地址,以GPIOB为例 */
#define GPIOB_CRL             (GPIOB_BASE+0x00)
#define GPIOB_CRH             (GPIOB_BASE+0x04)
#define GPIOB_IDR             (GPIOB_BASE+0x08)
#define GPIOB_ODR             (GPIOB_BASE+0x0C)
#define GPIOB_BSRR            (GPIOB_BASE+0x10)
#define GPIOB_BRR             (GPIOB_BASE+0x14)
#define GPIOB_LCKR            (GPIOB_BASE+0x18)

4、C语言使用封装寄存器

因为GPIOA ~ GPIOG每一个都有GPIOXXX_CRL ~ GPIOXXX_LCKR,因此在C语言使用定义的时候可以用结构体封装好:

(1)定义结构体GPIO_TypeDef
//寄存器的值常常是芯片外设自动更改的,即使CPU没有执行程序,也有可能发生变化
//编译器有可能会对没有执行程序的变量进行优化//volatile表示易变的变量,防止编译器优化,
#define     __IO    volatile
typedef unsigned int uint32_t;
typedef unsigned short uint16_t;// GPIO 寄存器结构体定义
typedef struct
{__IO uint32_t CRL;       // 端口配置低寄存器,     地址偏移0X00__IO uint32_t CRH;       // 端口配置高寄存器,     地址偏移0X04__IO uint32_t IDR;       // 端口数据输入寄存器,   地址偏移0X08__IO uint32_t ODR;       // 端口数据输出寄存器,   地址偏移0X0C__IO uint32_t BSRR;      // 端口位设置/清除寄存器,地址偏移0X10__IO uint32_t BRR;       // 端口位清除寄存器,     地址偏移0X14__IO uint32_t LCKR;      // 端口配置锁定寄存器,   地址偏移0X18
} GPIO_TypeDef;;

在这里插入图片描述

(2)定义外设基地址
/* 外设基地址 */
#define PERIPH_BASE           ((unsigned int)0x40000000)/* 总线基地址 */
#define APB1PERIPH_BASE       PERIPH_BASE
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x00010000)
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x00020000)/* GPIO外设基地址 */
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)/*RCC外设基地址:时钟用*/
#define RCC_BASE      (AHBPERIPH_BASE + 0x1000)
(3)使用GPIO_TypeDef把地址强制转换成指针
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)
#define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE)
#define GPIOH               ((GPIO_TypeDef *) GPIOH_BASE)// RCC 外设声明
#define RCC                 ((RCC_TypeDef *) RCC_BASE)/*RCC的AHB1时钟使能寄存器地址,强制转换成指针*/
#define RCC_APB2ENR      *(unsigned int*)(RCC_BASE+0x18)
(4)则访问任意端口的某个寄存器
/*使用定义好的宏直接访问*/
/*访问GPIOB端口的寄存器*/
GPIOB->BSRR = 0xFFFF;       //通过指针访问并修改GPIOB_BSRR寄存器
GPIOB->CRL = 0xFFFF;        //修改GPIOB_CRL寄存器
GPIOB->ODR =0xFFFF;         //修改GPIOB_ODR寄存器uint32_t temp;
temp = GPIOB->IDR;          //读取GPIOB_IDR寄存器的值到变量temp中/*访问GPIOA端口的寄存器*/
GPIOA->BSRR = 0xFFFF;
GPIOA->CRL = 0xFFFF;
GPIOA->ODR =0xFFFF;uint32_t temp;
temp = GPIOA->IDR;          //读取GPIOA_IDR寄存器的值到变量temp中

5、C语言常用位操作

对某一位清零a &= ~(1<<2)

以变量a代表寄存器,并假设寄存器中本来已有数值,此时我们需要把变量a的某一位清零,且其它位不变

//定义一个变量a = 1001 1111 b (二进制数)
unsigned char a = 0x9f;//对bit2 清零a &= ~(1<<2);//括号中的1左移两位,(1<<2)得二进制数:0000 0100 b
//按位取反,~(1<<2)得1111 1011 b
//假如a中原来的值为二进制数: a = 1001 1111 b
//所得的数与a作”位与&”运算,a = (1001 1111 b)&(1111 1011 b),
//经过运算后,a的值 a=1001 1011 b
// a的bit2 位被清零,而其它位不变。
对某一位取反a ^=(1<<6)

对寄存器的某个位进行取反操作,即 1变0 ,0变1,这可以直接用如下操作,其它位不变

//a = 1001 0011 b
//把bit6取反,其它位不变a ^=(1<<6);
//a = 1101 0011 b
对某几位清零a &= ~(3<<2*1)
//定义一个变量a = 1001 1111 b (二进制数)
unsigned char a = 0x9f;
//1、分组
//若把a中的二进制位分成2个一组
//即bit0、bit1为第0组,bit2、bit3为第1组,
//  bit4、bit5为第2组,bit6、bit7为第3组
//  同理,第4~15的高位由于a=0x009f,所以都为0,也是按此方法排列
//2、对第1组的bit2、bit3清零
a &= ~(3<<2*1);//!!!2:以2个为一组,1:第1组,3:清零工具11(二进制)!!!
//括号中的3左移两位,(3<<2*1)得二进制数:0000 1100 b
//按位取反,~(3<<2*1)得1111 0011 b
//假如a中原来的值为二进制数: a = 1001 1111 b
//所得的数与a作”位与&”运算,a = (1001 1111 b)&(1111 0011 b),
//经过运算后,a的值 a=1001 0011 b
// a的第1组的bit2、bit3被清零,而其它位不变。//上述(~(3<<2*1))中的(1)即为组编号;如清零第3组bit6、bit7此处应为3
//括号中的(2)为每组的位数,每组有2个二进制位;若分成4个一组,此处即为4
//括号中的(3)是组内所有位都为1时的值;若分成4个一组,此处即为二进制数“1111 b”//例如对第2组bit4、bit5清零
a &= ~(3<<2*2);
对某几位进行赋值a |= (1<<2*2)

寄存器位先经过上面的清零操作后,再对某几位写入所需要的数值,且其它位不变

//先清零
//a = 1000 0011 b
//此时对清零后的第2组bit4、bit5设置成二进制数“01 b ”a |= (1<<2*2);//1:赋值工具“01 b ”,2:以2个为一组,1:第1组
//a = 1001 0011 b,成功设置了第2组的值,其它组不变

6、GPIO-寄存器版

(1)GPIO七个寄存器
    uint32_t CRL;     /*GPIO端口配置低寄存器    地址偏移: 0x00 */uint32_t CRH;     /*GPIO端口配置高寄存器    地址偏移: 0x04 */uint32_t IDR;     /*GPIO数据输入寄存器      地址偏移: 0x08 */uint32_t ODR;     /*GPIO数据输出寄存器      地址偏移: 0x0C */uint32_t BSRR;    /*GPIO位设置/清除寄存器   地址偏移: 0x10 */uint32_t BRR;     /*GPIO端口位清除寄存器     地址偏移: 0x14 */uint16_t LCKR;    /*GPIO端口配置锁定寄存器   地址偏移: 0x18 */
(2)GPIO八个工作模式
    GPIO_Mode_AIN = 0x0,           // 模拟输入GPIO_Mode_IN_FLOATING = 0x04,  // 浮空输入GPIO_Mode_IPD = 0x28,          // 下拉输入GPIO_Mode_IPU = 0x48,          // 上拉输入GPIO_Mode_Out_OD = 0x14,       // 开漏输出GPIO_Mode_Out_PP = 0x10,       // 推挽输出GPIO_Mode_AF_OD = 0x1C,        // 复用开漏输出GPIO_Mode_AF_PP = 0x18         // 复用推挽输出
(3)如何查找GPIO对应的功能
  • F:\BaiduNetdiskDownload\A盘(资料盘)[野火]STM32F103指南者_开发板规格书.pdf
    在这里插入图片描述如PB0和PB1分别接着LED绿灯和蓝灯:
    在这里插入图片描述
(4)如何查找GPIO对应的工作模式
  • F:\BaiduNetdiskDownload\A盘(资料盘)\3-STM32官方资料\STM32F1官方手册资料\1-STM32F10x-中文参考手册.pdf
    在这里插入图片描述若想让PB0对应的绿灯亮起,则应设置PB0的低电平有效,设置GPIOB_CRL为输出推挽模式,在代码中,我们先把控制PB0的端口位清0,然后再向它赋值“0001 b”,从而使GPIOB0引脚设置成输出模式,速度为10M。
    在这里插入图片描述
// 清空控制PB0的端口位
GPIOB_CRL &= ~( 0x0F<< (4*0));//1111,4组,第0组;注意:低4位哦,所以只清空低4位,别的不要动!!!
// 配置PB0为通用推挽输出,速度为10M
GPIOB_CRL |= (1<<4*0);//0001,4组,第0组
// PB0输出低电平
GPIOB_ODR &= ~(1<<0);//0001,4组,第0组;管脚对于位写1 gpio 管脚为高电平,写 0 为低电平,1生效,0无效

注:以 STM32F103ZET6 芯片为例子,该芯片共有 144 脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组 GPIO 口组有 16 个 GPIO 口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中 x 为0-15,也就是端口的0-15所有引脚,PB0中的0代表CNF0+MODE0要设置,同理还有ODR0。
在这里插入图片描述
另外要记得开启时钟:
在这里插入图片描述

// 开启 GPIOB 端口 时钟
RCC_APB2ENR |= (1<<3);

相关文章:

STM32(二):STM32工作原理

0、参考1、寄存器和存储器基本概念&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;主要区别&#xff08;3&#xff09;联系&#xff08;4&#xff09;实际应用中的案例&#xff08;5&#xff09;总结&#xff08;6&#xff09;一些名词解释 2、STM32指南者板子-存…...

真实工作项目Java使用apache.poi生成word

加油&#xff0c;新时代打工人&#xff01; 将实体类利用poi转成Word文件 demo示例 package com.fqpais.util;import com.fqpais.business.domain.TestReportTemplate; import com.fqpais.common.utils.StringUtils; import org.apache.poi.xwpf.usermodel.*; import org.slf4…...

[Python自动化办公]--从网页登录网易邮箱进行邮件搜索并下载邮件附件

[Python自动化办公]–从网页登录网易邮箱进行邮件搜索并下载邮件附件 使用说明 ​ 本文使用Python的selenium库进行操作邮箱登录、固定名称搜索邮件并下载附件&#xff0c;Python版本&#xff1a;3.9.16, selenium版本&#xff1a;4.19.0&#xff0c;EdgeBrowser版本:126.0.2…...

mysql8多值索引

MySQL8新出了一个多值索引&#xff0c;我还没体验过呢&#xff0c;今天试一试。 建表 我先建个表试一试多值索引的效果。我粗略地看了下多值索引的介绍&#xff0c;发现是只适用于数组类型的。所以我建一个含有数组字段的表试一试。语法还是挺麻烦的&#xff1a; create tabl…...

MT3055 交换排列

1.思路 若数对为&#xff08;1&#xff0c;4&#xff09;和&#xff08;4&#xff0c;7&#xff09;&#xff0c;则说明14可以互换&#xff0c;47可以互换&#xff0c;并且17也可以互换。所以把可以交换的元素放到一个集合中。 例如样例1&#xff1a;有三个集合&#xff0c;…...

Zkeys三方登录模块支持QQ、支付宝登录

1&#xff0c;覆盖到根目录&#xff0c;并导入update.sql数据库文件到Zkeys数据库里 2. 后台系统权限管理&#xff0c;配置管理员权限-系统类别-找到云外科技&#xff0c;全部打勾 3&#xff0c;后台系统设置找到云外快捷登录模块填写相应的插件授权配置和登录权限配置&#x…...

数字探秘:用神经网络解密MNIST数据集中的数字!

用神经网络解密MNIST数据集中的数字&#xff01; 一. 介绍1.1 MNIST数据集简介1.2 MLP&#xff08;多层感知器&#xff09;模型介绍1.3 目标&#xff1a;使用MLP模型对MNIST数据集中的0-9数字进行分类 二.数据预处理2.1 数据集的获取与加载2.2 数据集的探索性分析&#xff08;E…...

11个IT运维领域必考证书,每一个都含金量极高

这几年&#xff0c;网络方向里&#xff0c;IT运维其实还是挺吃香的。 运维人员的职责不仅仅是确保系统的正常运行&#xff0c;还需要应对突发事件、优化性能以及保障信息安全。 面对如此复杂的工作环境&#xff0c;拥有专业认证不仅是对自身技能的肯定&#xff0c;更是提升职业…...

VScode 常用插件

基础开发插件 Chinese (Simplified)&#xff08;简体中文语言包&#xff09;&#xff1a;这是适用于VS Code的中文&#xff08;简体&#xff09;语言包&#xff0c;适用于英语不太流利的用户。Auto Rename Tag&#xff1a;这个插件可以同步修改HTML/XML标签&#xff0c;当用户修…...

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源

299k stars利用Public APIs提升开发效率&#xff1a;探索APILayer提供的开源资源 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;是实现应用间通信和功能扩展的关键工具。公共API&#xff08;Public APIs&#xff09;则为开发者提供了宝贵的资源&#…...

在目标检测数据集上微调Florence-2

Florence-2是由微软开源的轻量级视觉-语言模型,采用MIT许可。该模型在任务如图像描述、目标检测、定位和分割中展示了强大的零样本和微调能力。 图1。图示展示了每个任务所表达的空间层次和语义细粒度水平。来源:Florence-2:推进多种视觉任务的统一表示。 该模型将图…...

AI提示词:AI辅导「数学作业」

辅导孩子作业对许多家长来说可能是一件头疼的事&#xff0c;但这部分工作可以在一定程度上交给AI来完成。 打开ChatGPT4,输入以下内容&#xff1a; # Role 数学辅导专家## Profile - author: 姜小尘 - version: 02 - LLM: Kimi - language: 中文 - description: 专门为小学生…...

odoo文档的安装

步骤 1: 安装必要的软件 确保你已经安装了Git和Python 3.6、3.7或3.8之一。 步骤 2: 克隆 Odoo 文档存储库 打开终端&#xff0c;然后使用Git克隆Odoo的文档存储库。 git clone https://github.com/odoo/documentation.git cd documentation步骤 3: 安装 Python 依赖项 …...

02STM32软件安装新建工程

STM32软件安装&新建工程 1.软件安装&#xff1a;1.1Keil5 MDK安装1.2安装器件支持包离线安装支持包在线安装支持包 1.3软件注册&#xff1a;1.4安装驱动STLINK驱动JLink驱动在此文件夹下USB转串口 2.新建工程2.1STM32开发方式&#xff1a;1.寄存器2.标准库3.HAL库 固件库压…...

社区6月月报 | Apache DolphinScheduler重要修复和优化记录

各位热爱Apache DolphinScheduler的小伙伴们&#xff0c;社区6月月报更新啦&#xff01;这里将记录Apache DolphinScheduler社区每月的重要更新&#xff0c;欢迎关注。 月度Merge Stars 感谢以下小伙伴上个月为Apache DolphinScheduler所做的精彩贡献&#xff08;排名不分先后…...

Docker 使用基础(2)—镜像

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …...

Docker学习笔记(三)Dockerfile

一、什么是Dockerfile Dockerfile 是一个用于自动化构建 Docker 镜像的文本文件&#xff0c;其中包含了从一个基础镜像开始&#xff0c;到最终形成所需定制镜像的所有指令集。这个文件中的每一条指令都对应着构建镜像过程中的一个步骤或一层&#xff0c;指导 Docker 如何安装软…...

学懂C#编程:C# 索引器(Indexer)的概念及用法

C#中的索引器&#xff08;Indexer&#xff09;是一种特殊的成员&#xff0c;它允许类或结构的实例像数组那样通过索引来访问其内部的数据。索引器提供了一种灵活的方式来暴露集合或数组类型的内部数据&#xff0c;使得客户端代码可以使用类似于数组下标的语法来访问类的成员&am…...

汇川CodeSysPLC教程03-2-14 与HMI通信

硬件连接 PLC与HMI连接采用何种连接方式&#xff0c;通常是参考双方支持哪些接口。PLC&#xff08;可编程逻辑控制器&#xff09;与HMI&#xff08;人机界面&#xff09;之间的通讯方式主要有以下几种&#xff1a; 串行通讯&#xff08;Serial Communication&#xff09;&…...

centos部署jar包

第一步&#xff1a; 将IDEA中的项目打包为jar,将这个jar文件放到centos服务器上的目录里&#xff0c;我在opt新建api目录&#xff0c;将jar文件放入&#xff0c;如下图&#xff1a; 第二步&#xff1a; 将需要读取的配置文件也放入此目录(其他目录也可以&#xff0c;和脚本中…...

CSS相对定位和绝对定位的区别

CSS相对定位和绝对定位的区别 区别1&#xff1a;相对的对象不同 相对定位是相对于自己绝对定位是相对于离自己最近的有定位的祖先 区别2:是否会脱离文档流 相对定位不会脱离文档流&#xff0c;不会影响其他元素的位置绝对定位会脱离文档流&#xff0c;会影响其他元素的布局 代…...

SpringCloud之nacos共享配置文件实现多数据源灵活切换

目录 前言 1.引入Springboot相关的aop切面依赖 2.创建自定义注解DataSourceKey 3.创建对ThreadLocal类 4.创建aop切面 5.创建动态数据源类 6.创建多数据库连接配置类 7.关键代码讲解 8.nacos主要配置 前言 通过Spring AOP&#xff08;面向切面编程&#xff09;的功能来动…...

原生小程序生成二维码方法之一

效果图&#xff1a; 第一步&#xff1a;下载对应的包并构建&#xff08;工具---》构建npm&#xff09; npm install weapp-qrcode --save 第二步&#xff1a;在wxml页面声明canvas <canvas style"width: 200px; height: 200px;margin:0 auto;" canvas-id"myQ…...

Kubernetes k8s Pod容器 探针 健康探测

目录 Pod容器健康探测 为什么要对容器做探测&#xff1f; 启动探测startupprobe 存活性探测livenessProbe 就绪性探测readinessProbe ReadinessProbe LivenessProbe startupProbe配合使用示例一般程序中需要设置三种探针结合使用&#xff0c;并且也要结合实际情况&#xff…...

Conformal low power-2.电源感知等效性检查

电源感知等效性检查 ■ 第24页&#xff1a;电源感知等效性检查概述 ■ 第24页&#xff1a;启动低功耗&#xff08;等效性检查&#xff09;软件 ■ 第25页&#xff1a;电源感知等效性检查流程 ■ 第28页&#xff1a;电源感知等效性检查示例Do文件 电源感知等效性检查概述…...

【密码学】从有限状态自动机到密钥流生成器

本文是对流密码内容的拓展&#xff0c;在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题&#xff1a; 伪随机密钥流是如何生成的&#xff1f;流密码、流密钥生成器和有限状态自动机之间是什么关系&#xff1f;…...

3.相机标定原理及代码实现(opencv)

1.相机标定原理 相机参数的确定过程就叫做相机标定。 1.1 四大坐标系及关系 &#xff08;1&#xff09;像素坐标系&#xff08;单位&#xff1a;像素&#xff08;pixel&#xff09;&#xff09; 像素坐标系是指相机拍到的图片的坐标系&#xff0c;以图片的左上角为坐标原点&a…...

Centos7 安装Docker步骤及报错信息(不敢说最全,但是很全)

一、操作系统要求&#xff1a; 要安装Docker Engine&#xff0c;您需要CentOS 7及以上的维护版本。存档版本不受支持或测试。必须启用centos临时存储库。默认情况下&#xff0c;此存储库已启用&#xff0c;但如果已禁用&#xff0c;则需要重新启用它。建议使用overlay2存储驱动…...

【C语言】符号优先级详解

C语言符号优先级详细解析 在C语言中&#xff0c;不同的运算符具有不同的优先级和结合性&#xff0c;这决定了在表达式中运算符的计算顺序。理解这些优先级和结合性是正确编写和理解C语言程序的基础。本文将详细解析C语言中的符号优先级&#xff0c;包括各类运算符的优先级、结…...

天翼云高级运维工程师202407回忆题库 最新出炉

备考天翼云高级运维工程师 必须备考天翼云 之前觉得外企牛批 然后民企&#xff0c;拔地而起&#xff0c;民企也不错&#xff0c;工资高&#xff0c;有钱途 现在看来看去&#xff0c;还是国企好&#xff0c;体制内的&#xff0c;有保障&#xff0c;树大根深 有必要备考下天…...

建设网站公司/农村电商平台有哪些

前言 瞧不起Java的大概是因为&#xff1a; Java 被认为是一门“老”语言&#xff0c;过时了。事实上&#xff0c;Java 由于其稳定性和安全性&#xff0c;一直是企业级应用开发的首选语言。而且&#xff0c;Java 语言还在不断更新和发展&#xff0c;例如 Java 8 引入了很多新特…...

天水嘉通建设集团网站/如何在手机上开自己的网站

目录一、简介二、常见类型转换1、转换为字符串2、转换为指定类型数组3、转换为日期对象4、转换为集合5、指定泛型6、转换为指定类型三、时间日期1、当前时间2、字符串转Date3、Date转字符串4、获取Date对象的某个部分5、开始和结束时间6、日期时间偏移7、日期时间对象-DateTime…...

做电子商务系统网站/晋城今日头条新闻

这个问题严格来说是肯定有的&#xff0c;kafka只能保证分区内的有序性。 下面是kafka作者Jay Kreps的blog中介绍kafka设计思想的一段话。 Each partition is a totally ordered log, but there is no global ordering between partitions (other than perhaps some wall-clock…...

自己做的网站怎么置顶/谷歌关键词分析工具

vue 从入门到精通(二) 上一篇总结了一些vue的理论知识&#xff0c;如果你没看懂的话……那返回去继续去看啊&#xff01;反正我要开始第二篇了。 vue提供了大量的指令&#xff0c;比如&#xff1a;v-if,v-bind,v-on……太多&#xff0c;多写项目&#xff0c;多看API&#xff0c…...

无锡网站建设系统/网站设计公司网站制作

前言 会议定点&#xff1a;新主楼F座教室会议时间&#xff1a;2019/5/5会议目的&#xff1a;确定进度&#xff0c;分配下阶段任务一、任务进度 组员上周任务进度下阶段任务大娃初步完成新增的模型代码完善新增层的代码二娃阅读后端文档&#xff0c;辅助主PM维护github项目&…...

网站建设公司的公司哪家好/深圳网络推广网络

2019独角兽企业重金招聘Python工程师标准>>> 在启动的VM中添加&#xff1a; -Dfile.encodingUTF8 -Dsun.jnu.encodingUTF8 转载于:https://my.oschina.net/u/2297579/blog/1932883...