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

【OS】AUTOSAR架构下的Interrupt详解(上篇)

目录

前言

正文

1.中断概念分析

1.1 中断处理API

1.2 中断级别

1.3 中断向量表

1.4 二类中断的嵌套

1.4.1概述

1.4.2激活

1.5一类中断

1.5.1一类中断的实现

1.5.2一类中断的嵌套

1.5.3在StartOS之前的1类ISR

1.5.4使用1类中断时的注意事项

1.6中断源的初始化

1.7未处理的中断

1.8未处理的系统调用

1.9零类中断

1.9.1一类中断的实现

1.9.2一类中断的嵌套

1.9.3在StartOS之前的0类ISR

1.9.4零类isr被锁定的位置

1.9.5使用0类中断时的注意事项

2.中断配置


前言

通过《【TC3xx芯片】TC3xx中断路由IR模块详解》一文我们学习了TC3xx芯片中断的硬件实现,通过《【OS】AUTOSAR架构下的中断和异常向量表》一文中我们知道中断向量表的起始地址标识符在Os生成的链接文件中定义用户需要在启动代码中初始化BIV寄存器,知道这两点我们就能集成使用Os中断功能,但是关于更多的Os中断的细节知识还需要继续学习,比如,你能回答以下的几个问题吗?

问题1:以下三组OS ISR相关的API有何区别,分别适合在什么场景下使用?

DisableAllInterrupts()

EnableAllInterrupts()

SuspendAllInterrupts()

ResumeAllInterrupts()

SuspendOSInterrupts()

ResumeOSInterrupts()

问题2:以下两个OS ISR相关的API有何区别,分别适合在什么场景下使用?

Os_InitialEnableInterruptSources()

Os_EnableInterruptSource()

问题3:二类中断完全由OS实现,那么该如何使用一类中断了?

问题4:TC3xx芯片是如何处理中断的?

问题5:详细阐述一个中断的配置及其处理过程,以CAN中断为例。

问题6:OS是如何处理中断优先级的?

缩略词

简写

全称

BTV

Base Trap Vector Table Pointer

BIV

Base Interrupt Vector Table Pointer

ISR

Interrupt Service Router

SRC

Service Request Control Register

IR

Interrupt Router

ICU

Interrupt Control Unit

ICR

ICU Interrupt Control

AUTOSAR BSW Tool:Vector

AUTOSAR MCAL Tool:EB

Hardware Platform: Infineon Tricore TC387

Build Tool: Tasking

Debug Tool: UDE


注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!

正文

1.中断概念分析

1.1 中断处理API

AUTOSAR标准指定了几个以下API来禁用/启用中断。

DisableAllInterrupts()

EnableAllInterrupts()

该功能将禁用所有类别1和类别2的中断。

SuspendAllInterrupts()

ResumeAllInterrupts()

SuspendOSInterrupts()

ResumeOSInterrupts()

该功能仅禁用类别2的中断

1.2 中断级别

l2类中断的优先级必须低于1类中断的优先级。

l1类中断的优先级必须低于时间保护ISR(SC2 / SC4系统)。

l时间保护ISR的优先级必须低于0类ISR(第0类ISRs详见第1.9小结)。

l用户无法设置时间保护锁(TP Lock)级别。每当OS内部在处理时间保护相关的任务时会使用到TP Lock,这个时候中断时都是被禁用的(Disabled)。

l0类 ISRs在内部禁用很短的操作系统,例如在执行堆栈开关时(0类 ISRs被锁定的位置在1.9小结中描述)。

1.3 中断向量表

MICROSAR OS会根据用户的配置、使用的MCU类型、使用的编译器类型生成中断向量表。

在一个多核系统中,可以生成多个向量表。

MICROSAR OS会为每一个可能的中断源生成一个中断向量。

1.4 二类中断的嵌套

1.4.1概述

为了保持中断延迟尽可能低,OS遵守以下中断优先级规则:

l更高优先级的二类中断可以中断正在执行的低优先级的二类中断。

l一类中断的优先级始终高于二类中断的优先级(一类中断始终可以打断二类中断)。

1.4.2激活

设置“OsIsrEnableNesting”参数为TRUE后,2类ISR本身可以被更高优先级的ISR中断。

1.5一类中断

1.5.1一类中断的实现

MICROSAR OS提供了一个宏,用于实现一类ISR。类似AUTOSAR标准定义的2类ISR的宏。MICROSAR OS抽象了所需的编译器关键字。

Implement a category 1 ISROS_ISR1(<MyCategory1ISR>){}

1.5.2一类中断的嵌套

由于1类ISR是直接从中断向量表调用的,没有任何操作系统的支持,因此不支持第1类ISR的自动嵌套。

忽略1类ISR的“OsIsrEnableNesting”配置属性。

然而,可以在1类 ISR期间启用中断以允许中断嵌套,但OS API函数不能用于此目的。应用程序必须使用编译器固有函数或内联汇编语句。

Example

OS_ISR1(<MyCategory1ISR>){    __asm(EI); /* enable nesting of this ISR */    __asm(DI); /* disable nesting before leaving the function */}

1.5.3在StartOS之前的1类ISR

在操作系统启动之前,可能需要激活1类ISR。

以下动作序列需要被执行:

1.调用Os_InitMemory()

2.调用Call Os_Init(), (在该函数中,基本的中断控制器设置被初始化,例如中断源的优先级))。

3.通过直接操作中断控制器中的控制寄存器,来启用1类ISR的中断源。

4.通过直接操作全局中断标志和/或当前中断优先级来启用中断,以允许1类ISR.

1.5.4使用1类中断时的注意事项

1.在不支持中断请求时栈切换(中断栈和用户栈切换)的芯片平台上,如果发生了1类中断则不会发生栈切换。因此,1类中断的堆栈消耗将应该被添加到所有可以被1类ISR消耗的堆栈中。

2.虽然中断优先级是由MICROSAR OS初始化的,但是没有API来启用1类ISR, 必须直接访问中断控制寄存器来Enable 1类中断。

3.AUTOSAR OS标准不允许在1类ISR中使用OS API(唯一的例外是中断处理API)。如果在1类中断处理函数中调用了不允许使用的OS API,MICROSAR OS就无法检测到这一点,并且调用的API可能不能按预期工作。

4.一类中断始终在Trusted权限或者Supervisor等级下被执行。

5.宏“OS_ISR1”抽象了用于实现中断服务程序的适当编译器关键字。因此,编译器生成保护并恢复通用寄存器子集的代码。在某些用例中,例如使用FPU或嵌套中断,它可能需要应用程序保存和恢复更多的寄存器。

1.6中断源的初始化

通过操作系统配置,MICROSAR操作系统知道中断源的分配和ISR的优先级。在多核系统中,所有isr的核心分配也是已知的。基于这些配置信息,MICROSAR OS生成用于初始化中断控制器的数据结构。它初始化中断优先级及其核心分配。

使能中断源:

操作系统只对操作系统生成的定时器ISR启用中断源。

只有当应用程序启用了相应的中断源时,才能为其他用户ISR提供服务。

这应该通过使用中断源API来完成(详见Os_EnableInterruptSource()函数)。

1.7未处理的中断

没有分配给用户定义ISR的中断源被分配给一个默认的操作系统中断处理程序,该处理程序收集这些中断源。

因此,来自未分配中断源的中断请求由操作系统处理。在OS Hooks(例如ProtectionHook())中,应用程序可以通过OS API获得未处理中断请求的源编号。

如果一个未处理的中断请求发生在操作系统代码中,MICROSAR OS调用PanicHook(),因为一个不一致的内部状态被识别出来,操作系统不知道如何正确地继续执行。

如果一个未处理的中断请求发生在关键用户段,即StartupHook, ErrorHook, PreTaskHook, PostTaskHook, Alarm回调,IOC接收器回调,Timing Hooks, ProtectionHook和ShutdownHook, MICROSAR OS调用PanicHook(),因为一个不一致的内部状态被识别,操作系统不知道如何正确地继续执行。

在所有其他未处理中断请求的情况下,MICROSAR OS调用带有参数E_OS_SYS_PROTECTION_IRQ的ProtectionHook().

1.8未处理的系统调用

未分配给操作系统或用户处理程序的系统调用源被分配给收集这些异常的默认操作系统系统调用处理程序。

因此,来自未分配的系统调用源的系统调用请求由操作系统处理。如果一个未处理的系统调用请求发生在操作系统代码中,MICROSAR操作系统调用PanicHook(),因为一个不一致的内部状态被识别,操作系统不知道如何正确地继续执行。

如果一个未处理的系统调用请求发生在关键用户部分,即StartupHook, ErrorHook, PreTaskHook, PostTaskHook, Alarm回调,IOC接收器回调,Timing Hooks, ProtectionHook和ShutdownHook, MICROSAR OS调用PanicHook(),因为一个不一致的内部状态被识别,操作系统不知道如何正确地继续执行。

在所有未处理的系统调用请求的其他情况下MICROSAR OS调用ProtectionHook()参数E_OS_SYS_PROTECTION_SYSCALL.

1.9零类中断

MICROSAR OS实现了0类ISRs,以具有最小的中断延迟时间,特别是在SC2或SC4系统中。这是对AUTOSAR操作系统标准的一个扩展。

1.9.1一类中断的实现

MICROSAR OS提供了一个宏,用于实现一类ISR。类似AUTOSAR标准定义的2类ISR的宏。MICROSAR OS抽象了所需的编译器关键字。

Implement a category 0 ISR

OS_ISR0(<MyCategory0ISR>){}

1.9.2一类中断的嵌套

由于0类ISR是直接从中断向量表调用的,没有任何操作系统的支持,因此不支持第0类ISR的自动嵌套。

忽略0类ISR的“OsIsrEnableNesting”配置属性。

然而,可以在0类 ISR期间启用中断以允许中断嵌套,但OS API函数不能用于此目的。应用程序必须使用编译器固有函数或内联汇编语句。

Example

OS_ISR0(<MyCategory0ISR>){    __asm(EI); /* enable nesting of this ISR */    __asm(DI); /* disable nesting before leaving the function */}

1.9.3在StartOS之前的0类ISR

在操作系统启动之前,可能需要激活0类ISR。

以下动作序列需要被执行:

1.调用Os_InitMemory()

2.调用Call Os_Init(), (在该函数中,基本的中断控制器设置被初始化,例如中断源的优先级))。

3.通过直接操作中断控制器中的控制寄存器,来启用0类ISR的中断源。

4.通过直接操作全局中断标志和/或当前中断优先级来启用中断,以允许0类ISR.

1.9.4零类isr被锁定的位置

0类中断只能在很短的时间内在操作系统内部禁用。

以下列表中的操作提到了这些锁的位置(会禁用0类中断):

l导致上下文切换的api内部,例如TerminateTask().

l由ProtectionHook处理的异常导致部分终止。

l中断,异常和陷阱进入和返回。

lOs_Init()和StartOS()中的OS初始化。

1.9.5使用0类中断时的注意事项

1.在不支持中断请求时栈切换(中断栈和用户栈切换)的芯片平台上,如果发生了0类中断则不会发生栈切换。因此,0类中断的堆栈消耗将应该被添加到所有可以被0类ISR消耗的堆栈中。

2.零类ISR正在消耗中断任务或2类ISR的时间保护预算(执行预算和锁定时间)。

3.虽然中断优先级是由MICROSAR OS初始化的,但是没有API来启用0类ISR, 必须直接访问中断控制寄存器来Enable 0类中断。

4.如果发生时间保护中断,执行(时间保护violation handling/protection hook)延迟到0类ISR运行期间,则其0类ISR已经完成。

5.AUTOSAR OS标准不允许在0类ISR中使用OS API(唯一的例外是中断处理API)。如果在0类中断处理函数中调用了不允许使用的OS API,MICROSAR OS就无法检测到这一点,并且调用的API可能不能按预期工作。

6.一类中断始终在Trusted权限或者Supervisor等级下被执行。

7.零类ISR可能永远不会降低CPU或中断的中断优先级。

8.在操作系统关闭的情况下,甚至在操作系统进入Panic Hook的情况下,仍然可能发生0类isr。

9.请注意,0类ISR能中断2类ISR,即使2类ISR被配置为不可嵌套的。

10.如果0类ISR的owner application因任何原因被终止,分配的0类ISR也不会被禁用。

11.宏“OS_ISR0”抽象了用于实现中断服务程序的适当编译器关键字。因此,编译器生成保护并恢复通用寄存器子集的代码。在某些用例中,例如使用FPU或嵌套中断,它可能需要应用程序保存和恢复更多的寄存器。

2.中断配置

Short Name : ISR的名字,如果该ISR所属的模块是Vector SIP包中的模块,则ISR的名字和类别是固定的(不可修改的,比如CanIsr_xxx)。

Isr Category : ISR的类别(0,1,2三种类别的中断),2类中断由OS接管,用户只需要调用OS接口Enable二类中断。0类和1类中断需要用户实现中断处理函数,且需要用户在StartOS之前启用中断。0类中断的时间延迟最小。

Isr Enable Nesting: 中断是否可以被嵌套,仅适用于2类中断。如果2类中断配置为TRUE,则该2类中断可以被更高优先级的中断打断。

Isr Initial Enable Interrupt Source : 配置中断是否会被Os_InitalEnableInterruptSources()函数Enable.

Isr Interrupt Mapping : 如果相关模块的数据搬运交给DMA处理,这需要配置这个参数。

Isr Interrupt Priority : 配置中断优先级,这个地方的中断优先级是个相对值,OS在生成代码的时候会根据这些相对值生成优先级绝对值排序。

Isr Interrupt Source: 配置中断号(中断地址)。

每一个中断请求都和一个SRN一一对应,比如:

对于CAN00,也就是CAN0INT0,对应SRC为SRC_CAN0INT0,对应的SRC地址为:

0x5B0 +0*0x40 + 0*4 = 0x5B0 = 1456

Isr Interrupt Type : 配置ISR是外部中断(External)还是异常(Exception)。注意:中断和异常(.e.g. NMI)其实是两个概念,但是Exception的产生和处理过程和ISR基本一样,所以Davnici中将Exception放在了ISR中配置。

Isr Memory Protection Identifier : 配置ISR所属的内存保护集(MPU Set),如果没有配置,则该ISR和ISR所属的Application的MPU Set配置一样。至于什么是MPU Set清参考《【TC3xx芯片】TC3xx芯片MPU介绍》一文。

Isr Special Function Name : 中断处理函数的名字默认由Short Name参数生成,但是用户也可以通过Isr Special Function Name特别指定。

Isr Stack Size : 指定中断栈大小。Microsar OS的Task和ISR都有独立的栈,

Isr Stack Fpu : 指定ISR是否使用FPU。

由于TriCore Aurix平台没有需要在上下文切换中保存的专用FPU寄存器,因此不需要由于使用浮点数而扩展上下文。

相关文章:

【OS】AUTOSAR架构下的Interrupt详解(上篇)

目录 前言 正文 1.中断概念分析 1.1 中断处理API 1.2 中断级别 1.3 中断向量表 1.4 二类中断的嵌套 1.4.1概述 1.4.2激活 1.5一类中断 1.5.1一类中断的实现 1.5.2一类中断的嵌套 1.5.3在StartOS之前的1类ISR 1.5.4使用1类中断时的注意事项 1.6中断源的初始化 1.…...

NFT Insider #167:Champions Tactics 角色加入 The Sandbox;AI 助力 Ronin 游戏生态

引言&#xff1a;NFT Insider 由 NFT 收藏组织 WHALE Members、BeepCrypto 联合出品&#xff0c; 浓缩每周 NFT 新闻&#xff0c;为大家带来关于 NFT 最全面、最新鲜、最有价值的讯息。每期周报将从 NFT 市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟…...

保姆级教程Docker部署KRaft模式的Kafka官方镜像

目录 一、安装Docker及可视化工具 二、单节点部署 1、创建挂载目录 2、运行Kafka容器 3、Compose运行Kafka容器 4、查看Kafka运行状态 三、集群部署 四、部署可视化工具 1、创建挂载目录 2、运行Kafka-ui容器 3、Compose运行Kafka-ui容器 4、查看Kafka-ui运行状态 …...

堆的实现——堆的应用(堆排序)

文章目录 1.堆的实现2.堆的应用--堆排序 大家在学堆的时候&#xff0c;需要有二叉树的基础知识&#xff0c;大家可以看我的二叉树文章&#xff1a;二叉树 1.堆的实现 如果有⼀个关键码的集合 K {k0 , k1 , k2 , …&#xff0c;kn−1 } &#xff0c;把它的所有元素按完全⼆叉树…...

git中文件的状态状态切换

文件的状态分类 Git 中文件的状态主要分为以下几种&#xff1a; Untracked&#xff08;未跟踪&#xff09; 定义&#xff1a;这些文件从未被 Git 跟踪过&#xff0c;通常是因为它们是新创建的文件&#xff0c;或者被 .gitignore 排除在外。 示例&#xff1a;新创建的文件 new…...

FreeRTOS学习笔记2:FreeRTOS的基础知识

1.FreeRTOS介绍 FreeRTOS是一个免费的嵌入式实时操作系统&#xff0c;同时它在市面上也是一款主流的操作系统&#xff0c;是工作上必不可少的技能。它具有以下六种特点&#xff1a; 1.免费开源&#xff1a;在商业产品中使用&#xff0c;无潜在商业风险&#xff0c;无需担心。 2…...

.NET 中实现生产者-消费者模型,BlockingCollection<T> 和 Channel<T>使用示例

一、方案对比&#xff1a;不同线程安全集合的适用场景 二、推荐方案及示例代码 方案 1&#xff1a;使用 BlockingCollection&#xff08;同步模型&#xff09; public class QueueDemo {private readonly BlockingCollection<int> _blockingCollection new BlockingCo…...

【OpenCV实战】基于 OpenCV 的多尺度与模板匹配目标跟踪设计与实现

文章目录 基于 OpenCV 的模板匹配目标跟踪设计与实现1. 摘要2. 系统概述3. 系统原理3.1 模板匹配的基本原理3.2 多尺度匹配 4. 逻辑流程4.1 系统初始化4.2 主循环4.3 逻辑流程图 5. 关键代码解析5.1 鼠标回调函数5.2 多尺度模板匹配 6. 系统优势与不足6.1 优势6.2 不足 7. 总结…...

算法--最长回文子串

给你一个字符串 s&#xff0c;找到 s 中最长的回文子串 示例 1&#xff1a; 输入&#xff1a;s “babad” 输出&#xff1a;“bab” 解释&#xff1a;“aba” 同样是符合题意的答案。 示例 2&#xff1a; 输入&#xff1a;s “cbbd” 输出&#xff1a;“bb” 看似困难&…...

20250205确认荣品RK3566开发板在Android13下可以使用命令行reboot -p关机

20250205确认荣品RK3566开发板在Android13下可以使用命令行reboot -p关机 2025/2/5 16:10 缘起&#xff1a;荣品RK3566开发板在Android13下&#xff0c;希望通过Native C语言程序来控制RK3566的关机。 通过ADB&#xff0c;很容易通过reboot -p命令关机。 最开始以为需要su/root…...

java进阶专栏的学习指南

学习指南 java类和对象java内部类和常用类javaIO流 java类和对象 类和对象 java内部类和常用类 java内部类精讲Object类包装类的认识String类、BigDecimal类初探Date类、Calendar类、SimpleDateFormat类的认识java Random类、File类、System类初识 javaIO流 java IO流【…...

Selenium记录RPA初阶 - 基本输入元件

防止自己遗忘&#xff0c;故作此为记录。 爬取网页基本元件并修改后爬取。 包含元件&#xff1a; elements: dict[str, str] {"username": None,"password": None,"email": None,"website": None,"date": None,"ti…...

每日Attention学习20——Group Shuffle Attention

模块出处 [MICCAI 24] [link] LB-UNet: A Lightweight Boundary-Assisted UNet for Skin Lesion Segmentation 模块名称 Group Shuffle Attention (GSA) 模块作用 轻量特征学习 模块结构 模块特点 使用分组(Group)卷积降低计算量引入External Attention机制更好的学习特征S…...

DeepSeek:全栈开发者视角下的AI革命者

目录​​​​​​​ DeepSeek&#xff1a;全栈开发者视角下的AI革命者 写在前面 一、DeepSeek的诞生与定位 二、DeepSeek技术架构的颠覆性突破 1、解构算力霸权&#xff1a;从MoE架构到内存革命 2、多模态扩展的技术纵深 3、算法范式的升维重构 4、重构AI竞争规则 三、…...

Docker 国内最新可用镜像源20250205

2年没用dockerhub了结果今天发现镜像无法拉取了&#xff0c;找了很多镜像都无效&#xff0c;连阿里云镜像都不行了&#xff0c;最后找到下面可以用的。 Docker镜像仓库备注hub.urlsa.us.kg可用http://hub.haod.eu.org可用http://hub.chxza.eu.org可用http://ccoc.eu.org部分地…...

OpenEuler学习笔记(十八):搭建企业云盘服务

要在 OpenEuler 上搭建企业云盘&#xff0c;可借助一些开源软件来实现&#xff0c;以下以 Nextcloud 为例详细介绍搭建步骤。Nextcloud 是一款功能丰富的开源云存储解决方案&#xff0c;支持文件共享、同步、协作等多种功能。 1. 系统环境准备 确保 OpenEuler 系统已更新到最…...

redis实际开发应用简单实现

短信登录 首先来看看登录与注册常规实现流程如下&#xff1a; 其中&#xff0c;很多网站都有手机号验证码登录功能 如百度 实现之前咱可以来验证码有啥特点&#xff1a;一定时间内过期、验证码随机、与手机号会唯一匹配 所以可以使用redis的string来实现更容易&#xff0c;k…...

2. K8S集群架构及主机准备

本次集群部署主机分布K8S集群主机配置主机静态IP设置主机名解析ipvs管理工具安装及模块加载主机系统升级主机间免密登录配置主机基础配置完后最好做个快照备份 2台负载均衡器 Haproxy高可用keepalived3台k8s master节点5台工作节点(至少2及以上)本次集群部署主机分布 K8S集群主…...

flutter 专题四十七 Flutter 应用启动流程分析

众所周知&#xff0c;任何应用程序的启动都是从main()函数开始的&#xff0c;Flutter也不例外&#xff0c;main.dart文件的main函数开始的&#xff0c;代码如下。 void main() > runApp(MyApp());main函数则调用的是runApp函数&#xff0c;源码如下。 void runApp(Widget …...

proxmox通过更多的方式创建虚拟机

概述 作为一名资深运维工程师&#xff0c;我们经常需要在 Proxmox 虚拟化平台上创建和管理虚拟机。本文将介绍三种不同的方式在 Proxmox 上创建 Ubuntu 虚拟机&#xff1a; 通过 Proxmox 命令创建虚拟机通过 Shell 脚本自动化创建虚拟机使用 Proxmox API 创建虚拟机 每种方式…...

阿里云 ubuntu22.04 中国区节点安装 Docker

下面是一份在 Ubuntu 22.04 (Jammy) 上&#xff0c;通过阿里云镜像源来安装并配置 Docker 的详细步骤示例&#xff0c;可在中国区阿里云节点使用&#xff1a; 一、卸载旧版本 (如已安装) 如果系统中已经安装了旧版 Docker (可能是 docker、docker-engine、docker.io、containe…...

Java 中 LinkedList 的底层源码

在 Java 的集合框架中&#xff0c;LinkedList是一个独特且常用的成员。它基于双向链表实现&#xff0c;与数组结构的集合类如ArrayList有着显著差异。深入探究LinkedList的底层源码&#xff0c;有助于我们更好地理解其工作原理和性能特点&#xff0c;以便在实际开发中做出更合适…...

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR

文章目录 指令格式&#xff08;重点&#xff09;1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…...

【LeetCode】5. 贪心算法:买卖股票时机

太久没更了&#xff0c;抽空学习下。 看一道简单题。 class Solution:def maxProfit(self, prices: List[int]) -> int:cost -1profit 0for i in prices:if cost -1:cost icontinueprofit_ i - costif profit_ > profit:profit profit_if cost > i:cost iret…...

【玩转 Postman 接口测试与开发2_017】第13章:在 Postman 中实现契约测试(Contract Testing)与 API 接口验证(下)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十三章 契约测试与 API 接口验证8 导入官方契约测试集合9 契约测试集合的详细配置9.1 env-apiKey 的创建与设置9.2 env-workspaceId 的设置9.3 Mock 服务器及 env-server 的配置9.4 API 测试实例的配置…...

学习threejs,pvr格式图片文件贴图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️PVR贴图1.2 ☘️THREE.Mesh…...

【人工智能】通用人工智能 AGI

AGI 是 Artificial General Intelligence 的缩写&#xff0c;中文翻译为通用人工智能。与我们常见的**特定人工智能&#xff08;Narrow AI&#xff09;**不同&#xff0c;AGI 是一个更高深、更具野心的目标。 AGI&#xff08;人工通用智能&#xff09;的定义 通用人工智能&am…...

基于PostGIS的省域空间相邻检索实践

目录 前言 一、相关空间检索函数 1、ST_touches函数 2、ST_Intersects函数 3、ST_Relate函数 4、区别于对比 二、空间相邻检索实践 1、省域表相关介绍 2、相关省域相邻查询 3、全国各省份邻居排名 三、总结 前言 在当今数字化时代&#xff0c;地理空间数据的高效管理…...

Java 2024年面试总结(持续更新)

目录 最近趁着金三银四面了五六家公司吧&#xff0c;也整理了一些问题供大家参考一下&#xff08;适合经验三年左右的&#xff09;。 面试问题&#xff08;答案是我自己总结的&#xff0c;不一定正确&#xff09;&#xff1a; 总结&#xff1a; 最近趁着金三银四面了五六家公…...

JDK9新特性

文章目录 新特性&#xff1a;1.模块化系统使用模块化module-info.java&#xff1a;exports&#xff1a;opens&#xff1a;requires&#xff1a;provides&#xff1a;uses&#xff1a; 2.JShell启动Jshell执行计算定义变量定义方法定义类帮助命令查看定义的变量&#xff1a;/var…...

性能测试中的数据库连接池优化

目录 一、配置连接池参数 二、配置连接池数量 三、监控连接池 数据库连接池的意义是让连接复用&#xff0c;通过建立一个数据库连接池&#xff08;缓冲区&#xff09;以及一套连接的使用&#xff0c;分配&#xff0c;管理策略&#xff0c;使得该连接池中的连接可以得到高效&…...

1. 初识spark

背景&#xff1a; 作为一名开发人员&#xff0c;用内存处理数据是每天都在做的事情。内存处理数据最大的优势就是方便&#xff0c;快捷&#xff0c;可以很快得到结果&#xff0c;但是内存总是有瓶颈的&#xff0c;不管你运行代码的机器有多大的内存&#xff0c;总是有更大规模…...

专业学习|一文了解并实操自适应大邻域搜索(讲解代码)

一、自适应大邻域搜索概念介绍 自适应大邻域搜索&#xff08;Adaptive Large Neighborhood Search&#xff0c;ALNS&#xff09;是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍&#xff1a; -自适应大领域搜索的核心思想是&#xff1a;破坏解、修复解、动…...

Redis --- 使用zset处理排行榜和计数问题

在处理计数业务时&#xff0c;我们一般会使用一个数据结构&#xff0c;既是集合又可以保证唯一性&#xff0c;所以我们会选择Redis中的set集合&#xff1a; 业务逻辑&#xff1a; 用户点击点赞按钮&#xff0c;需要再set集合内判断是否已点赞&#xff0c;未点赞则需要将点赞数1…...

排序算法——快速排序

代码仓库&#xff1a; 1037827920/AlgorithmZoo 快速排序 算法步骤 选择基准元素&#xff0c;从数组中选择一个元素作为基准&#xff0c;通常选择方式有&#xff1a; 第一个元素最后一个元素中间元素随机选择 分区操作&#xff0c;将数组元素根据基准分为两部分&#xff0c;…...

有用的sql链接

『SQL』常考面试题&#xff08;2——窗口函数&#xff09;_sql的窗口函数面试题-CSDN博客 史上最强sql计算用户次日留存率详解&#xff08;通用版&#xff09;及相关常用函数 -2020.06.10 - 知乎 (zhihu.com) 1280. 学生们参加各科测试的次数 - 力扣&#xff08;LeetCode&…...

手写MVVM框架-构建虚拟dom树

MVVM的核心之一就是虚拟dom树&#xff0c;我们这一章节就先构建一个虚拟dom树 首先我们需要创建一个VNode的类 // 当前类的位置是src/vnode/index.js export default class VNode{constructor(tag, // 标签名称&#xff08;英文大写&#xff09;ele, // 对应真实节点children,…...

C++单例模式

单例模式是一种设计模式&#xff0c;它保证一个类只有一个对象。因此单例模式要私有化构造函数&#xff0c;禁用拷贝构造以及赋值重载。同时还要提供一个静态成员函数获取单例对象。 单例模式有两种实现方式&#xff1a;饿汉模式和懒汉模式 饿汉模式&#xff1a;创建静态单例…...

SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言

目录 一、环境准备 1、MySQL 8.0 和 Navicat 下载安装 2、准备好的表和数据文件&#xff1a; 二、SQL语言简述 1、数据库基础概念 2、什么是SQL 3、SQL的分类 4、SQL通用语法 三、DDL&#xff08;Data Definition Language&#xff09;&#xff1a;数据定义语言 1、操…...

RabbitMQ 可靠性投递

文章目录 前言一、RabbitMQ自带机制1、生产者发送消息注意1.1、事务&#xff08;Transactions&#xff09;1.2、发布确认&#xff08;Publisher Confirms&#xff09;1.2.1、同步1.2.2、异步 2、消息路由机制2.1、使用备份交换机&#xff08;Alternate Exchanges&#xff09;2.…...

Java常见的技术场景面试题

一、单点登录这块怎么实现的&#xff1f; 单点登录概述 单点登录&#xff1a;Single Sign On&#xff08;简称SSO&#xff09;,只需要登录一次&#xff0c;就可以访问所有信任的应用系统 在以前的时候&#xff0c;一般我们就单系统&#xff0c;所有的功能都在同一个系统上。…...

使用 Postman 进行 API 测试:从入门到精通

使用 Postman 进行 API 测试&#xff1a;从入门到精通 使用 Postman 进行 API 测试&#xff1a;从入门到精通一、什么是 API 测试&#xff1f;二、Postman 简介三、环境搭建四、API 测试流程1. 收集 API 文档2. 发送基本请求示例&#xff1a;发送 GET 请求示例代码&#xff08;…...

用python实现进度条

前言 在Python中&#xff0c;可以使用多种方式实现进度条。以下是几种常见的进度条格式的实现方法&#xff1a; 1. 使用 tqdm 库 tqdm 是一个非常流行的库&#xff0c;可以轻松地在循环中显示进度条。 from tqdm import tqdm import time# 示例&#xff1a;简单的进度条 fo…...

android 自定义通话录音

在 Android 开发中&#xff0c;实现通话录音功能通常涉及到对系统通话的拦截和录音。由于通话录音涉及到用户隐私和安全性&#xff0c;Android 系统对此有严格的限制和要求。在 Android 10&#xff08;API 级别 29&#xff09;及以上版本中&#xff0c;直接访问通话录音功能变得…...

WebSocket——环境搭建与多环境配置

一、前言&#xff1a;为什么要使用多环境配置&#xff1f; 在开发过程中&#xff0c;我们通常会遇到多个不同的环境&#xff0c;比如开发环境&#xff08;Dev&#xff09;、测试环境&#xff08;Test&#xff09;、生产环境&#xff08;Prod&#xff09;等。每个环境的配置和需…...

【自动化办公】批量图片PDF自定义指定多个区域识别重命名,批量识别铁路货物运单区域内容改名,基于WPF和飞桨ocr深度学习模型的解决方案

项目背景介绍 铁路货运企业需要对物流单进行长期存档&#xff0c;以便后续查询和审计。不同的物流单可能包含不同的关键信息&#xff0c;通过自定义指定多个区域进行识别重命名&#xff0c;可以使存档的图片文件名具有统一的规范和明确的含义。比如&#xff0c;将包含货物运单…...

在线教程丨YOLO系列10年更新11个版本,最新模型在目标检测多项任务中达SOTA

YOLO (You Only Look Once) 是计算机视觉领域中最具影响力的实时目标检测算法之一&#xff0c;以其高精度与高效性深受业界青睐&#xff0c;广泛应用于自动驾驶、安防监控、医疗影像等领域。 该模型最早于 2015 年由华盛顿大学研究生 Joseph Redmon 发布&#xff0c;开创了将目…...

c++可变参数详解

目录 引言 库的基本功能 va_start 宏: va_arg 宏 va_end 宏 va_copy 宏 使用 处理可变参数代码 C11可变参数模板 基本概念 sizeof... 运算符 包扩展 引言 在C编程中&#xff0c;处理不确定数量的参数是一个常见的需求。为了支持这种需求&#xff0c;C标准库提供了 &…...

Ubuntu安装VMware17

安装 下载本文的附件&#xff0c;之后执行 sudo chmod x VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle sudo ./VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle安装注意事项&#xff1a; 跳过账户登录的办法&#xff1a;断开网络 可能出现的问题以及解决…...

在Debian 12上安装VNC服务器

不知道什么标题 可以看到这个文章是通过豆包从国外网站copy的&#xff0c;先这样写着好了&#xff0c;具体的我有时间再补充&#xff0c;基本内容都在这里了。 在Debian 12上安装VNC服务器 简介 VNC&#xff08;Virtual Network Computing&#xff0c;虚拟网络计算&#xf…...