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. 系统框图
- PPI:私有外设中断号:(ID:0~15)
- SPI:共享外设中断号:(ID:16~31)
- 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 计算转速 一、直流有刷电机 宏观上说直流有刷电机由固定部分(定子)和旋转部分(转子)组成。在定子上…...

滴水逆向三期笔记与作业——02C语言——05 正向基础/05 循环语句
目录 一、缓冲区溢出的HelloWorld二、永不停止的HelloWorld三、基础知识3.1 变量的声明3.2 类型转换(一般用于小转大)3.3 表达式3.4 语句和程序块3.5 参数与返回值3.6 关系运算符3.7 逻辑运算符:&& || !3.8 单目运算符3.9 三目运算符…...
Python抓取分享页面的源代码示例
本文章是关于利用Python方法来抓取某网站分享页面中的源码方法示例。需要大家注意的是Python抓取分享页面的源代码示例,是要在运行时导入BeautifulSoup.py文件后才可以使用。 Python抓取分享页面的源代码示例,需要用到python urllib2模块方法࿰…...

linux安装nginx遇到的报错
1、Linux如何修改只读文件(以设置自动连网为例) vim /etc/sysconfig/network-scripts/ifcfg-ens33 然后提示 E45:已设定选项“readonly”(请加!强制执行) 如果需要强制修改,可以使用࿰…...
一起学SF框架系列5.8-spring-Beans-Bean注解解析3-解析配置component-scan
本文主要讲述Spring是如何解析“context:component-scan”元素,扫描加载目录下的BeanDefinition。 解析内容 1、解析的元素如下: <!-- 注解模式:配置bean扫描路径(注:自动包含子路径) --><conte…...

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

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

从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…...

编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二)
系列文章目录 编程小白的自学笔记十一(python爬虫入门三Selenium的使用实例详解) 编程小白的自学笔记十(python爬虫入门二实例代码详解) 编程小白的自学笔记九(python爬虫入门代码详解) 目录 系列文章…...
技术笔记2023076 rBoot学习7
技术笔记2023076 rBoot学习7 继续之前的学习。 代码分析:函数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个抠图工具,一键抠图不用愁!
在图片编辑工作中,抠图是设计师常用的操作。随着设计工具的不断增加,抠图操作摆脱了过去繁琐的操作步骤,几乎可以一键完成。今天本文将为大家介绍6个好用的抠图工具,一起来看看吧! 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 如何理解 概念:观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时ÿ…...

高通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模组前沿应用,基于ARM架构的SoC阵列式服务器相关内容。澎湃算力、创新架构、异构计算,有望成为未来信息化社会的智能算力底座。 ▌性能优势AI驱动,ARM架构服务器加速渗透 一直以来,基于ARM架构的各类处理器…...

老年公寓人员定位管理系统:提升安全与关怀的智能解决方案
老年公寓作为提供安全居住环境和关怀服务的重要场所,面临着人员管理和安全控制的挑战。为了解决这些问题,老年公寓人员定位管理系统应运而生。基于为提供全面的安全管理和个性化关怀服务,华安联大便通过老年公寓人员定位管理系统的技术原理、…...
每日一题之两个字符串的删除操作
题目链接 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 **相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1: 输入: 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;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ 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逻辑代码 注:文档 https://developers.weixin.qq…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
git: early EOF
macOS报错: 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…...