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

Linux 学习记录58(ARM篇)

Linux 学习记录58(ARM篇)

在这里插入图片描述

本文目录

  • Linux 学习记录58(ARM篇)
  • 一、GIC相关寄存器
    • 1. 系统框图
    • 2. 中断号对应关系
  • 二、GICD寄存器
    • 1. GICD_CTLR
    • 2. GICD_ISENABLERx
    • 3. GICD_IPRIORITYRx
    • 4. GICD_ITARGETSRx
    • 5. GICD_ICPENDRx
  • 三、GICC寄存器
    • 1. GICC_PMR
    • 2. GICC_CTLR
    • 3. GICC_IAR
    • 4. GICC_EOIR
  • 四、封装函数
    • 1. 寄存器封装
    • 2. EXTI初始化结构体/枚举封装
    • 3. GICD初始化结构体/枚举
    • 4. GICC初始化结构体/枚举
    • 5. EXTI函数
    • 6. GICD函数
    • 7. GICC函数
    • 8. 使用示例

一、GIC相关寄存器

1. 系统框图

在这里插入图片描述

  1. PPI:私有外设中断号:(ID:0~15)
  2. SPI:共享外设中断号:(ID:16~31)
  3. SGI:软件产生的中断号:(ID:0~287)

总结:

GIC层一共管理288个中断号(ID:0 ~ 287),16个SGIS,16个PPIS,256个SPIS

2. 中断号对应关系

在这里插入图片描述
例:
在这里插入图片描述

二、GICD寄存器

1. GICD_CTLR

功能:使能CPU
在这里插入图片描述

2. GICD_ISENABLERx

功能:设置GICD层中断使能
该寄存器共有8个(0-8),用于使能GICD层的的288个中断号,每个寄存器32位,分别控制32个中断号的使能
在这里插入图片描述

计算方式 置1 为使能

int ID = 99//中断号,以外部中断号为99的ID为例
ID / 32 = 3 
使用" GICD_ISENABLER3 "寄存器即可
ID % 32 = 3
使用" GICD_ISENABLER3 "寄存器的第 "3 bit位" 即可

3. GICD_IPRIORITYRx

功能:设置GICD层中断优先级
在这里插入图片描述

计算方式
备注:设置中断优先级值的范围在:0 ~ 2^5 -1 GICD层中断优先级,需要比GICC层中断优先级高 中断优先级的值越小,代表中断优先级越高

int ID = 99//中断号,以外部中断号为99的ID为例
ID / 4 = 24 
使用" GICD_IPRIORITYR第24个"寄存器即可
ID % 4 = 3 (*8+3) =27" GICD_IPRIORITYR第24个 "寄存器的第 "27 ~ 37(27+4) bit位" 即可

4. GICD_ITARGETSRx

功能:分配给cpu0 或者 cpu1
该寄存器共有72个(0~71)个寄存器 [ 288个中断号/每个寄存器控制4个中断号的分配 ]
在这里插入图片描述

计算方式

int ID = 99//中断号,以外部中断号为99的ID为例
ID / 4 = 24 
使用" GICD_ITARGETSR第24个"寄存器即可
ID % 4 = 3 (*8) =24" GICD_ITARGETSR第24个 "寄存器的第 "24 ~ 25(24+1) bit位" 即可

5. GICD_ICPENDRx

功能:清除GICD层挂起的中断标志位
该寄存器给共有8个寄存器[ 228个中断号/每个寄存器控制32个中断号的清除 ]
在这里插入图片描述

计算方式 置1为清除

int ID = 99//中断号,以外部中断号为99的ID为例
ID / 32 = 3 
使用" GICD_ICPENDR第3个"寄存器即可
ID % 32 = 3" GICD_ICPENDR第3个 "寄存器的第 "3 bit位" 即可

三、GICC寄存器

1. GICC_PMR

功能:设置GICC层中断优先级
在这里插入图片描述

2. GICC_CTLR

功能:使能cpu中断
在这里插入图片描述
在这里插入图片描述

3. GICC_IAR

功能:获取中断号,这个寄存器只读
在这里插入图片描述

4. GICC_EOIR

功能:清除获取到中断号
在这里插入图片描述

四、封装函数

1. 寄存器封装

typedef unsigned          char uint8_t;
typedef unsigned short     int uint16_t;
typedef unsigned           int uint32_t;#define __IO    volatile
typedef struct{__IO uint32_t RTSR1; 	// EXTI rising trigger selection register 	__IO uint32_t FTSR1; 	// EXTI falling trigger selection register	__IO uint32_t SWIER1;   // EXTI software interrupt event register __IO uint32_t RPR1;     // EXTI rising edge pending register__IO uint32_t FPR1;  	// EXTI falling edge pending register__IO uint32_t TZENR1;   // EXTI TrustZone enable register__IO uint32_t RES1[2];  __IO uint32_t RTSR2;    // EXTI rising trigger selection register__IO uint32_t FTSR2;    // EXTI falling trigger selection register__IO uint32_t SWIER2;   // EXTI software interrupt event register__IO uint32_t RPR2;     // EXTI rising edge pending register__IO uint32_t FPR2;	    // EXTI falling edge pending register__IO uint32_t TZENR2;   // EXTI TrustZone enable register__IO uint32_t RES2[2];__IO uint32_t RTSR3;    // EXTI rising trigger selection register__IO uint32_t FTSR3;    // EXTI falling trigger selection register__IO uint32_t SWIER3;   // EXTI software interrupt event register__IO uint32_t RPR3;     // EXTI rising edge pending register__IO uint32_t FPR3;     // EXTI falling edge pending register__IO uint32_t TZENR3;   // EXTI TrustZone enable register__IO uint32_t RES3[2];__IO uint32_t EXTICR1;	// EXTI external interrupt selection register 1__IO uint32_t EXTICR2;  // EXTI external interrupt selection register 2	__IO uint32_t EXTICR3;  // EXTI external interrupt selection register 3	__IO uint32_t EXTICR4;  // EXTI external interrupt selection register 4	__IO uint32_t RES4[4];__IO uint32_t C1IMR1;   // EXTI CPU1 wakeup with interrupt mask register__IO uint32_t C1EMR1;   // EXTI CPU1 wakeup with event mask register__IO uint32_t RES5[2];__IO uint32_t C1IMR2;   // EXTI CPU1 wakeup with interrupt mask register__IO uint32_t C1EMR2;   // EXTI CPU1 wakeup with event mask register__IO uint32_t RES6[2];__IO uint32_t C1IMR3;   // EXTI CPU1 wakeup with interrupt mask register	__IO uint32_t C1EMR3;   // EXTI CPU1 wakeup with event mask register __IO uint32_t RES7[6];__IO uint32_t C2IMR1;   // EXTI CPU2 wakeup with interrupt mask register__IO uint32_t C2EMR1;   // EXTI CPU2 wakeup with event mask register__IO uint32_t RES8[2];__IO uint32_t C2IMR2;   // EXTI CPU2 wakeup with interrupt mask register__IO uint32_t C2EMR2;   // EXTI CPU2 wakeup with event mask register__IO uint32_t RES9[2];__IO uint32_t C2IMR3;   // EXTI CPU2 wakeup with interrupt mask register __IO uint32_t C2EMR3;   // EXTI CPU2 wakeup with event mask register __IO uint32_t RES10[2];
}EXTI_TypeDef;#define  EXTI   ((EXTI_TypeDef*)0x5000D000)typedef struct {volatile unsigned int CTRL;volatile unsigned int TYPER;volatile unsigned int IIDR;volatile unsigned int RES1[29];volatile unsigned int IGROUPR[9];volatile unsigned int RES2[23];volatile unsigned int ISENABLER[9];volatile unsigned int RES3[23];volatile unsigned int ICENABLER[9];volatile unsigned int RES4[23];volatile unsigned int ISPENDR[9];volatile unsigned int RES5[23];volatile unsigned int ICPENDR[9];volatile unsigned int RES6[23];volatile unsigned int ISACTIVER[9];volatile unsigned int RES7[23];volatile unsigned int ICACTIVER[9];volatile unsigned int RES8[23];volatile unsigned int IPRIORITYR[72];volatile unsigned int RES9[184];volatile unsigned int ITARGETSR[72];volatile unsigned int RES10[184];	volatile unsigned int ICFGR[18];volatile unsigned int RES11[46];}GICD_TypeDef;
#define GICD  ((GICD_TypeDef*)0xA0021000)typedef struct {volatile unsigned int CTRL;volatile unsigned int PMR;volatile unsigned int BRR;volatile unsigned int IAR;volatile unsigned int EOIR;volatile unsigned int RPR;volatile unsigned int HPPIR;volatile unsigned int ABPR;volatile unsigned int AIAR;volatile unsigned int AEOIR;volatile unsigned int AHPPIR;volatile unsigned int RES1[41];volatile unsigned int APR0;volatile unsigned int RES2[3];volatile unsigned int NSAPR0;volatile unsigned int RES3[6];volatile unsigned int IIDR;volatile unsigned int RES4[960];volatile unsigned int DIRDIR;}GICC_TypeDef;
#define GICC  ((GICC_TypeDef*)0xA0022000) 

2. EXTI初始化结构体/枚举封装

typedef enum
{EXTI_GPIOA = 0x0,EXTI_GPIOB,EXTI_GPIOC,EXTI_GPIOD,EXTI_GPIOE,EXTI_GPIOF,EXTI_GPIOG,EXTI_GPIOH,EXTI_GPIOI,EXTI_GPIOJ,EXTI_GPIOK,EXTI_GPIOZ,
}EXTI_GPIOxTypedef;typedef enum
{EXTI_Trigger_Rising = 0x0,//上升EXTI_Trigger_Falling,//下降EXTI_Trigger_Rising_Falling,//双边沿
}EXTI_TriggerTypedef;typedef struct
{uint16_t EXTI_GPIOx;//GPIO组号uint16_t EXTI_Line;//中断线uint8_t EXTI_Trigger;//触发方式uint8_t EXTI_Wakeup;//是否屏蔽}EXTI_InitTypeDef;
/*相关函数声明*/
/*外部中断初始化*/
void EXTI_Init(EXTI_InitTypeDef* EXTI_Init);
/*清除挂起标志位s*/
void EXTI_Clr_FPR1(uint16_t ID);

3. GICD初始化结构体/枚举

typedef enum
{/*和GICC共用*/GIC_CPU0 = 0x1,//CPU0GIC_CPU1,//CPU1GIC_CPU1_0,//CPU1和CPU0
}GIC_CPUTypedef;typedef struct
{uint8_t GICD_CPU;//使能的CPUuint8_t GICD_Allocation_CPU;//分配CPUuint8_t GICD_priority;//设置优先级uint16_t GICD_interrupt_ID;//使能的中断号}GICD_InitTypeDef;
/*相关函数声明*/
/*GICD初始化*/
void GICD_Init(GICD_InitTypeDef* GICD_Init);
/*清除挂起标志位*/
void GICD_Clr_ICPENDR(uint16_t ID);

4. GICC初始化结构体/枚举

typedef struct
{uint8_t GICC_priority;//设置优先级uint8_t GICC_CPU;//使能的CPU
}GICC_InitTypeDef;
/*相关函数声明*/
/*GICC初始化*/
void GICC_Init(GICD_InitTypeDef* GICD_Init);
/*获取中断号*/
uint32_t GICC_Get_IAR(void);
/*清除中断号*/
void GICC_Clr_EOIR(uint32_t ID);

5. EXTI函数

void EXTI_Init(EXTI_InitTypeDef* EXTI_Init)
{uint8_t py = 0;py = EXTI_Init->EXTI_Line/4;py++;switch(py){case 1:{/*连接Pin到EXTI_line*/EXTI->EXTICR1 &= ~(0xff << ((EXTI_Init->EXTI_Line%4) *8));EXTI->EXTICR1 |= (EXTI_Init->EXTI_GPIOx << ((EXTI_Init->EXTI_Line%4) *8));}break;case 2:{/*连接Pin到EXTI_line*/EXTI->EXTICR2 &= ~(0xff << ((EXTI_Init->EXTI_Line%4) *8));EXTI->EXTICR2 |= (EXTI_Init->EXTI_GPIOx << ((EXTI_Init->EXTI_Line%4) *8));}break;case 3:{EXTI->EXTICR3 &= ~(0xff << ((EXTI_Init->EXTI_Line%4) *8));EXTI->EXTICR3 |= (EXTI_Init->EXTI_GPIOx << ((EXTI_Init->EXTI_Line%4) *8));}break;case 4:{/*连接Pin到EXTI_line*/EXTI->EXTICR4 &= ~(0xff << ((EXTI_Init->EXTI_Line%4) *8));EXTI->EXTICR4 |= (EXTI_Init->EXTI_GPIOx << ((EXTI_Init->EXTI_Line%4) *8));}break;default : break;}switch(EXTI_Init->EXTI_Trigger){case EXTI_Trigger_Rising :{//上升沿/*设置为上升降沿触发*/EXTI->RTSR1 &= ~(0x1 << EXTI_Init->EXTI_Line);EXTI->RTSR1 |= (0x1 << EXTI_Init->EXTI_Line);}break;case EXTI_Trigger_Falling :{//下降沿/*设置为下降沿触发*/EXTI->FTSR1 &= ~(0x1 << EXTI_Init->EXTI_Line);EXTI->FTSR1 |= (0x1 << EXTI_Init->EXTI_Line);}break;case EXTI_Trigger_Rising_Falling :{//双边沿/*设置下降沿触发*/EXTI->FTSR1 &= ~(0x1 << EXTI_Init->EXTI_Line);EXTI->FTSR1 |= (0x1 << EXTI_Init->EXTI_Line);/*设置为上升降沿触发*/EXTI->RTSR1 &= ~(0x1 << EXTI_Init->EXTI_Line);EXTI->RTSR1 |= (0x1 << EXTI_Init->EXTI_Line);}break;}/*设置EXTI不屏蔽*/EXTI->C1IMR1 &= ~(0x1 << EXTI_Init->EXTI_Line);EXTI->C1IMR1 |= (0x1 << EXTI_Init->EXTI_Line);/*设置EXTI不屏蔽*/EXTI->C1IMR1 &= ~(0x1 << EXTI_Init->EXTI_Line);EXTI->C1IMR1 |= (0x1 << EXTI_Init->EXTI_Line);
}/*清除挂起标志位s*/
void EXTI_Clr_FPR1(uint16_t ID)
{EXTI->FPR1 |= 0x1 << ID;
}

6. GICD函数

/*GICD初始化*/
void GICD_Init(GICD_InitTypeDef* GICD_Init)
{/*使能GICD*/GICD->CTRL &= ~(0x3);GICD->CTRL |= GICD_Init->GICD_CPU;/*设置使能寄存器*/GICD->ISENABLER[GICD_Init->GICD_interrupt_ID/32] |= 0x1<<(GICD_Init->GICD_interrupt_ID%32);/*设置中断优先级*/GICD->IPRIORITYR[GICD_Init->GICD_interrupt_ID/4] &= ~(0x1F << ((GICD_Init->GICD_interrupt_ID%32)*8+3));GICD->IPRIORITYR[GICD_Init->GICD_interrupt_ID/4] |= GICD_Init->GICD_priority << ((GICD_Init->GICD_interrupt_ID%32)*8+3);/*设置中断优先级*/GICD->ITARGETSR[GICD_Init->GICD_interrupt_ID/4] &= ~(0x3 << ((GICD_Init->GICD_interrupt_ID%32)*8));GICD->ITARGETSR[GICD_Init->GICD_interrupt_ID/4] |= GICD_Init->GICD_Allocation_CPU << ((GICD_Init->GICD_interrupt_ID%32)*8);
}
/*清除挂起标志位*/
void GICD_Clr_ICPENDR(uint16_t ID)
{GICD->ICPENDR[ID/32] |= 0x1 << ID%32;
}

7. GICC函数

/*GICC初始化*/
void GICC_Init(GICC_InitTypeDef* GICC_Init)
{/*使能CICC*/GICC->CTRL &= ~(0x3);GICC->CTRL |= GICC_Init->GICC_CPU;/*中断优先级设置*/GICC->PMR &= ~(0x1F << 3);GICC->PMR |= GICC_Init->GICC_priority << 3;
}

8. 使用示例

	EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_GPIOx = EXTI_GPIOF;EXTI_InitStructure.EXTI_Line = 9;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_Wakeup = 1;EXTI_Init(&EXTI_InitStructure);EXTI_InitStructure.EXTI_Line = 8;EXTI_Init(&EXTI_InitStructure);EXTI_InitStructure.EXTI_Line = 7;EXTI_Init(&EXTI_InitStructure);GICD_InitTypeDef GICD_InitStructure;GICD_InitStructure.GICD_CPU = GIC_CPU0;GICD_InitStructure.GICD_Allocation_CPU = GIC_CPU0;GICD_InitStructure.GICD_priority = 0;GICD_InitStructure.GICD_interrupt_ID = 99;GICD_Init(&GICD_InitStructure);GICD_InitStructure.GICD_priority = 1;GICD_InitStructure.GICD_interrupt_ID = 98;GICD_Init(&GICD_InitStructure);GICD_InitStructure.GICD_priority = 2;GICD_InitStructure.GICD_interrupt_ID = 97;GICD_Init(&GICD_InitStructure);GICC_InitTypeDef GICC_InitStructure;GICC_InitStructure.GICC_priority = 4;GICC_InitStructure.GICC_CPU = GIC_CPU0;GICC_Init(&GICC_InitStructure);

相关文章:

Linux 学习记录58(ARM篇)

Linux 学习记录58(ARM篇) 本文目录 Linux 学习记录58(ARM篇)一、GIC相关寄存器1. 系统框图2. 中断号对应关系 二、GICD寄存器1. GICD_CTLR2. GICD_ISENABLERx3. GICD_IPRIORITYRx4. GICD_ITARGETSRx5. GICD_ICPENDRx 三、GICC寄存器1. GICC_PMR2. GICC_CTLR3. GICC_IAR4. GICC_…...

【一文搞懂】—带霍尔编码器的直流有刷减速电机

文章目录 一、直流有刷电机二、减速比三、霍尔编码器3.1 霍尔编码器3.2 霍尔编码器测速原理 四、测速程序设计4.1 跳变沿检测4.2 计算转速 一、直流有刷电机 宏观上说直流有刷电机由固定部分&#xff08;定子&#xff09;和旋转部分&#xff08;转子&#xff09;组成。在定子上…...

滴水逆向三期笔记与作业——02C语言——05 正向基础/05 循环语句

目录 一、缓冲区溢出的HelloWorld二、永不停止的HelloWorld三、基础知识3.1 变量的声明3.2 类型转换&#xff08;一般用于小转大&#xff09;3.3 表达式3.4 语句和程序块3.5 参数与返回值3.6 关系运算符3.7 逻辑运算符&#xff1a;&& || !3.8 单目运算符3.9 三目运算符…...

Python抓取分享页面的源代码示例

本文章是关于利用Python方法来抓取某网站分享页面中的源码方法示例。需要大家注意的是Python抓取分享页面的源代码示例&#xff0c;是要在运行时导入BeautifulSoup.py文件后才可以使用。 Python抓取分享页面的源代码示例&#xff0c;需要用到python urllib2模块方法&#xff0…...

linux安装nginx遇到的报错

1、Linux如何修改只读文件&#xff08;以设置自动连网为例&#xff09; vim /etc/sysconfig/network-scripts/ifcfg-ens33 然后提示 E45&#xff1a;已设定选项“readonly”&#xff08;请加&#xff01;强制执行&#xff09; 如果需要强制修改&#xff0c;可以使用&#xff0…...

一起学SF框架系列5.8-spring-Beans-Bean注解解析3-解析配置component-scan

本文主要讲述Spring是如何解析“context:component-scan”元素&#xff0c;扫描加载目录下的BeanDefinition。 解析内容 1、解析的元素如下&#xff1a; <!-- 注解模式&#xff1a;配置bean扫描路径&#xff08;注&#xff1a;自动包含子路径&#xff09; --><conte…...

【LeetCode热题100】打卡第42天:滑动窗口最大值搜索二维矩阵II

文章目录 【LeetCode热题100】打卡第42天&#xff1a;滑动窗口最大值&搜索二维矩阵II⛅前言 滑动窗口最大值&#x1f512;题目&#x1f511;题解 搜索二维矩阵II&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第42天&#xff1a;滑动窗口最大值&搜索二维…...

[uni-app] 微信小程序 - 组件找不到/导入报错 (分包问题导致)

文章目录 问题表现问题原因 问题表现 切换了个路径下的组件, 导入失败, 尝试了清缓存\重启\删项目等一些列操作均无效 上面两个路径中, 都存在一模一样的videItem.vue Main路径是可以导入的 Main路径是无法导入的 问题原因 后来发现, 是 分包的问题导致. 我们先来假设一个场…...

从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…...

编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二)

系列文章目录 编程小白的自学笔记十一&#xff08;python爬虫入门三Selenium的使用实例详解&#xff09; 编程小白的自学笔记十&#xff08;python爬虫入门二实例代码详解&#xff09; 编程小白的自学笔记九&#xff08;python爬虫入门代码详解&#xff09; 目录 系列文章…...

技术笔记2023076 rBoot学习7

技术笔记2023076 rBoot学习7 继续之前的学习。 代码分析&#xff1a;函数find_image() // prevent this function being placed inline with main // to keep mains stack size as small as possible // dont mark as static or itll be optimised out when // using the ass…...

收藏这6个抠图工具,一键抠图不用愁!

在图片编辑工作中&#xff0c;抠图是设计师常用的操作。随着设计工具的不断增加&#xff0c;抠图操作摆脱了过去繁琐的操作步骤&#xff0c;几乎可以一键完成。今天本文将为大家介绍6个好用的抠图工具&#xff0c;一起来看看吧&#xff01; 1、皮卡智能抠图 皮卡智能抠图是一…...

四,Eureka 第四章

2.1.3 增加依赖 <!--添加依赖--><dependencies><!--Eureka Server--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>&l…...

k8s常见的资源对象使用

目录 一、kubernetes内置资源对象 1.1、kubernetes内置资源对象介绍 1.2、kubernetes资源对象操作命令 二、job与cronjob计划任务 2.1、job计划任务 2.2、cronjob计划任务 三、RC/RS副本控制器 3.1、RC副本控制器 3.2、RS副本控制器 3.3、RS更新pod 四、Deployment副…...

JavaScript 简单实现观察者模式和发布订阅模式

JavaScript 简单实现观察者模式和发布订阅模式 1. 观察者模式1.1 如何理解1.2 代码实现 2. 发布订阅模式2.1 如何理解2.2 代码实现 1. 观察者模式 1.1 如何理解 概念&#xff1a;观察者模式定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff…...

高通WLAN框架学习(37)-- TDLS(Tunneled Direct Link Setup)通道直接链路建立

一 TDLS概述 隧道直连设置(TDLS)基于IEEE 802.11z-2010IEEE标准802.11z标准(无线局域网介质访问控制(MAC)和物理层(PHY)规范。 TDLS允许与同一AP关联的设备之间建立直接链路。Wi-Fi Direct允许设备之间直接连接,而不需要AP。Wi-Fi联盟认证可用于IEEE 802.11a和802.11g设备的T…...

高算力AI模组前沿应用:基于ARM架构的SoC阵列式服务器

本期我们带来高算力AI模组前沿应用&#xff0c;基于ARM架构的SoC阵列式服务器相关内容。澎湃算力、创新架构、异构计算&#xff0c;有望成为未来信息化社会的智能算力底座。 ▌性能优势AI驱动&#xff0c;ARM架构服务器加速渗透 一直以来&#xff0c;基于ARM架构的各类处理器…...

老年公寓人员定位管理系统:提升安全与关怀的智能解决方案

老年公寓作为提供安全居住环境和关怀服务的重要场所&#xff0c;面临着人员管理和安全控制的挑战。为了解决这些问题&#xff0c;老年公寓人员定位管理系统应运而生。基于为提供全面的安全管理和个性化关怀服务&#xff0c;华安联大便通过老年公寓人员定位管理系统的技术原理、…...

每日一题之两个字符串的删除操作

题目链接 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 **相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea" 变…...

nacos安装与基础配置

源码 https://github.com/alibaba/nacos https://gitee.com/mirrors/Nacos 编译 git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skiptrue clean install -U ls -al distribution/target/// change the $version to your ac…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...