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…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
