[嵌入式系统-37]:龙芯1B 开发学习套件 -6-协处理器CP0之CPU异常处理与外部中断控制器的中断处理
目录
一、CP0概述
1.1 CP0概述
1.2 龙芯异常exception与中断interrupt的区别
二、CPU协处理器的异常处理
三、外部中断与外部中断控制器
3.1 外部中断源
3.2 如何配置外部中断源
3.3 外部中断的中断向量表
3.2.1 软件中断向量表结构定义:ls1b_irq.c
3.2.2 软件中断向量表定义:ls1b_irq.c和ls1b_irq.h
3.3.3 默认的中断处理或中断服务程序:ls1b_irq.c
3.3.4 中断向量表的初始化
3.3.5 安装用户自定义的中断服务程序的安装与移除
一、CP0概述
1.1 CP0概述
龙芯1B协处理器CP0(Coprocessor 0)是龙芯处理器(Loongson)中的一个重要组成部分,主要用于管理处理器的系统级行为和状态信息。CP0是一个与主处理器CPU紧密集成的协处理器,它的功能主要有以下几个方面:
-
地址转换和虚拟存储管理MMU:CP0可以实现物理地址的解析和转换,支持虚拟存储管理,使得应用程序可以像访问物理内存一样方便地访问虚拟内存区域。
-
异常和中断处理(本文要深入讨论的部分):CP0是处理器内部异常exception和外部中断Interrupt处理的核心,它存储了异常和中断向量表、错误状态码等信息,并负责中断的响应和异常处理程序的执行。
-
性能计数器和性能分析:CP0中还包括可编程的性能计数器和时钟戳记寄存器,可以用于对程序的性能分析和调优,并支持操作系统的性能监控功能。
-
系统控制寄存器:CP0中还包含了一些系统级别的控制寄存器,可以用于修改处理器的运行状态,如设置缓存策略、开/关写缓冲等。
总之,龙芯1B协处理器CP0是Loongson处理器的重要组成部分,它管理和控制处理器中的系统级行为和状态信息,为操作系统和应用程序提供了重要的支持和保障。
1.2 龙芯异常exception与中断interrupt的区别
龙芯处理器中的异常(exception)和中断(interrupt)在概念上是有区别的,它们分别代表了不同类型的事件和处理机制:
-
异常(Exception):异常是指在程序执行过程中出现的一种非正常事件,通常是由指令执行时产生的,可以看作是处理器内部的问题。异常可以是因为错误的操作码、内存访问冲突、算术错误等原因导致的,需要处理器暂停当前指令的执行并执行相应的异常处理程序。异常通常由处理器本身或者处理器内部逻辑主动触发,它跳转到异常处理程序,处理完异常后再恢复到正常指令流程。
-
中断(Interrupt):中断是指来自外部设备的一种请求,要求处理器暂停当前正在执行的程序,转而执行与中断相关的处理程序。中断是处理器响应外部事件的一种方式,可以是来自设备的信号或者时钟,需要处理器打断当前执行的指令流程,执行相应的中断服务程序,处理完中断后再返回到被中断的程序继续执行。
在龙芯处理器中,异常和中断的区别在于触发原因和处理方式上:异常通常是由指令执行过程中的内部错误或意外情况引发,需要处理器内部去处理;而中断是由外部事件触发,需要处理器响应外部设备的请求。处理器在接收到异常或中断信号后,会根据具体情况执行相应的处理程序,保证系统的稳定运行和正确性。
二、CPU协处理器的异常处理
三、外部中断与外部中断控制器
3.1 外部中断源
龙芯1B SOC芯片内置简单、灵活的中断控制器。
1B芯片的中断控制器除了管理 GPIO输入的中断信号外,中断控制器还处理内部设备引起的中断。所有的中断寄存器的位域安排相同,一个中断源对应其中一位。
SOC的中断控制器共四个中断线输出连接到CPU模块,分别对应 INT0, INT1, INT2, INT3。
SOC芯片中断控制器本身能够支持 64个内部中断和 64个 GPIO的中断,最大一共128个硬件外部中断源,这128个中断源分为四组,每组最大支持32个中断源,分别归组为:INT0, INT1, INT2, INT3。
其中 INT0和 INT1分别对应于 64个内部中断的前后 32位,INT2和 INT3对应于 64个外部 GPIO中断。但龙芯1B的实现过程中,并非所有的中断源都被使用,部分中断源是保留未使用,
具体中断源如下表所示:
从上图可以看出:
(1)GPIO31、GPIO62、GPIO63都未使用,属于保留位,因此一个64-3=61个GPIO中断源。
(2)并非所有的INT0和INT1的外设中断都被使用上,实际上,龙芯1B SOC芯片,并没有那么多外设,因此,大量的位都是闲置的,属于保留为,未定义其行为。
3.2 如何配置外部中断源
3.3 外部中断的中断向量表
3.2.1 软件中断向量表结构定义:ls1b_irq.c
/* 中断向量表 */
typedef struct isr_tbl
{void (*handler)(int, void *); // 中断句柄unsigned int arg; // 参数
} isr_tbl_t;
3.2.2 软件中断向量表定义:ls1b_irq.c和ls1b_irq.h
定义龙芯1B实际支持的中断源(去除保留位)
/******************************************************************************
* Interrupt Vector Numbers
* MIPS_INTERRUPT_BASE should be 32 (0x20)
******************************************************************************/
/*
* CP0 Cause ($12) IP bit(15:8)=IP[7:0],
* IP[1:0] is soft-interrupt
* Status($13) IM bit(15:8) if mask interrupts
*
*/
#define LS1B_IRQ_SW0 (MIPS_INTERRUPT_BASE + 0) # 协处理器的软中断
#define LS1B_IRQ_SW1 (MIPS_INTERRUPT_BASE + 1) # 协处理器的软中断
#define LS1B_IRQ0_REQ (MIPS_INTERRUPT_BASE + 2) # 协处理器的中断请求0
#define LS1B_IRQ1_REQ (MIPS_INTERRUPT_BASE + 3) # 协处理器的中断请求1
#define LS1B_IRQ2_REQ (MIPS_INTERRUPT_BASE + 4) # 协处理器的中断请求2
#define LS1B_IRQ3_REQ (MIPS_INTERRUPT_BASE + 5) # 协处理器的中断请求3
#define LS1B_IRQ_PERF (MIPS_INTERRUPT_BASE + 6) # 协处理器的性能统计中断
#define LS1B_IRQ_CNT (MIPS_INTERRUPT_BASE + 7) # 协处理器的计数或tick中断,操作系统调度使用
/*
* Interrupt Control 0 Interrupts: 中断控制器0支持的外设中断数量:29个
*/
#define LS1B_IRQ0_BASE (MIPS_INTERRUPT_BASE + 8)
#define LS1B_UART0_IRQ (LS1B_IRQ0_BASE + 2)
#define LS1B_UART1_IRQ (LS1B_IRQ0_BASE + 3)
#define LS1B_UART2_IRQ (LS1B_IRQ0_BASE + 4)
#define LS1B_UART3_IRQ (LS1B_IRQ0_BASE + 5)
#define LS1B_CAN0_IRQ (LS1B_IRQ0_BASE + 6)
#define LS1B_CAN1_IRQ (LS1B_IRQ0_BASE + 7)
#define LS1B_SPI0_IRQ (LS1B_IRQ0_BASE + 8)
#define LS1B_SPI1_IRQ (LS1B_IRQ0_BASE + 9)
#define LS1B_AC97_IRQ (LS1B_IRQ0_BASE + 10)
#define LS1B_DMA0_IRQ (LS1B_IRQ0_BASE + 13)
#define LS1B_DMA1_IRQ (LS1B_IRQ0_BASE + 14)
#define LS1B_DMA2_IRQ (LS1B_IRQ0_BASE + 15)
#define LS1B_PWM0_IRQ (LS1B_IRQ0_BASE + 17)
#define LS1B_PWM1_IRQ (LS1B_IRQ0_BASE + 18)
#define LS1B_PWM2_IRQ (LS1B_IRQ0_BASE + 19)
#define LS1B_PWM3_IRQ (LS1B_IRQ0_BASE + 20)
#define LS1B_RTC0_IRQ (LS1B_IRQ0_BASE + 21)
#define LS1B_RTC1_IRQ (LS1B_IRQ0_BASE + 22)
#define LS1B_RTC2_IRQ (LS1B_IRQ0_BASE + 23)
#define LS1B_TOY0_IRQ (LS1B_IRQ0_BASE + 24)
#define LS1B_TOY1_IRQ (LS1B_IRQ0_BASE + 25)
#define LS1B_TOY2_IRQ (LS1B_IRQ0_BASE + 26)
#define LS1B_RTC_IRQ (LS1B_IRQ0_BASE + 27)
#define LS1B_TOY_IRQ (LS1B_IRQ0_BASE + 28)
#define LS1B_UART4_IRQ (LS1B_IRQ0_BASE + 29)
#define LS1B_UART5_IRQ (LS1B_IRQ0_BASE + 30)
/*
* Interrupt Control 1 interrupts:中断控制器1支持的外设中断:4个
*/
#define LS1B_IRQ1_BASE (MIPS_INTERRUPT_BASE + 40)
#define LS1B_EHCI_IRQ (LS1B_IRQ1_BASE + 0)
#define LS1B_OHCI_IRQ (LS1B_IRQ1_BASE + 1)
#define LS1B_GMAC0_IRQ (LS1B_IRQ1_BASE + 2)
#define LS1B_GMAC1_IRQ (LS1B_IRQ1_BASE + 3)
/*
* Interrupt Control 2 interrupts (GPIO):中断控制器2支持的GPIO中断数:31个
*/
#define LS1B_IRQ2_BASE (MIPS_INTERRUPT_BASE + 72)
#define LS1B_GPIO0_IRQ (LS1B_IRQ2_BASE + 0)
#define LS1B_GPIO1_IRQ (LS1B_IRQ2_BASE + 1)
#define LS1B_GPIO2_IRQ (LS1B_IRQ2_BASE + 2)
#define LS1B_GPIO3_IRQ (LS1B_IRQ2_BASE + 3)
#define LS1B_GPIO4_IRQ (LS1B_IRQ2_BASE + 4)
#define LS1B_GPIO5_IRQ (LS1B_IRQ2_BASE + 5)
#define LS1B_GPIO6_IRQ (LS1B_IRQ2_BASE + 6)
#define LS1B_GPIO7_IRQ (LS1B_IRQ2_BASE + 7)
#define LS1B_GPIO8_IRQ (LS1B_IRQ2_BASE + 8)
#define LS1B_GPIO9_IRQ (LS1B_IRQ2_BASE + 9)
#define LS1B_GPIO10_IRQ (LS1B_IRQ2_BASE + 10)
#define LS1B_GPIO11_IRQ (LS1B_IRQ2_BASE + 11)
#define LS1B_GPIO12_IRQ (LS1B_IRQ2_BASE + 12)
#define LS1B_GPIO13_IRQ (LS1B_IRQ2_BASE + 13)
#define LS1B_GPIO14_IRQ (LS1B_IRQ2_BASE + 14)
#define LS1B_GPIO15_IRQ (LS1B_IRQ2_BASE + 15)
#define LS1B_GPIO16_IRQ (LS1B_IRQ2_BASE + 16)
#define LS1B_GPIO17_IRQ (LS1B_IRQ2_BASE + 17)
#define LS1B_GPIO18_IRQ (LS1B_IRQ2_BASE + 18)
#define LS1B_GPIO19_IRQ (LS1B_IRQ2_BASE + 19)
#define LS1B_GPIO20_IRQ (LS1B_IRQ2_BASE + 20)
#define LS1B_GPIO21_IRQ (LS1B_IRQ2_BASE + 21)
#define LS1B_GPIO22_IRQ (LS1B_IRQ2_BASE + 22)
#define LS1B_GPIO23_IRQ (LS1B_IRQ2_BASE + 23)
#define LS1B_GPIO24_IRQ (LS1B_IRQ2_BASE + 24)
#define LS1B_GPIO25_IRQ (LS1B_IRQ2_BASE + 25)
#define LS1B_GPIO26_IRQ (LS1B_IRQ2_BASE + 26)
#define LS1B_GPIO27_IRQ (LS1B_IRQ2_BASE + 27)
#define LS1B_GPIO28_IRQ (LS1B_IRQ2_BASE + 28)
#define LS1B_GPIO29_IRQ (LS1B_IRQ2_BASE + 29)
#define LS1B_GPIO30_IRQ (LS1B_IRQ2_BASE + 30)
/*
* Interrupt Control 3 source bit (GPIO):中断控制器3支持的GPIO中断数:30个。
*/
#define LS1B_IRQ3_BASE (MIPS_INTERRUPT_BASE + 104)
#define LS1B_GPIO32_IRQ (LS1B_IRQ3_BASE + 0)
#define LS1B_GPIO33_IRQ (LS1B_IRQ3_BASE + 1)
#define LS1B_GPIO34_IRQ (LS1B_IRQ3_BASE + 2)
#define LS1B_GPIO35_IRQ (LS1B_IRQ3_BASE + 3)
#define LS1B_GPIO36_IRQ (LS1B_IRQ3_BASE + 4)
#define LS1B_GPIO37_IRQ (LS1B_IRQ3_BASE + 5)
#define LS1B_GPIO38_IRQ (LS1B_IRQ3_BASE + 6)
#define LS1B_GPIO39_IRQ (LS1B_IRQ3_BASE + 7)
#define LS1B_GPIO40_IRQ (LS1B_IRQ3_BASE + 8)
#define LS1B_GPIO41_IRQ (LS1B_IRQ3_BASE + 9)
#define LS1B_GPIO42_IRQ (LS1B_IRQ3_BASE + 10)
#define LS1B_GPIO43_IRQ (LS1B_IRQ3_BASE + 11)
#define LS1B_GPIO44_IRQ (LS1B_IRQ3_BASE + 12)
#define LS1B_GPIO45_IRQ (LS1B_IRQ3_BASE + 13)
#define LS1B_GPIO46_IRQ (LS1B_IRQ3_BASE + 14)
#define LS1B_GPIO47_IRQ (LS1B_IRQ3_BASE + 15)
#define LS1B_GPIO48_IRQ (LS1B_IRQ3_BASE + 16)
#define LS1B_GPIO49_IRQ (LS1B_IRQ3_BASE + 17)
#define LS1B_GPIO50_IRQ (LS1B_IRQ3_BASE + 18)
#define LS1B_GPIO51_IRQ (LS1B_IRQ3_BASE + 19)
#define LS1B_GPIO52_IRQ (LS1B_IRQ3_BASE + 20)
#define LS1B_GPIO53_IRQ (LS1B_IRQ3_BASE + 21)
#define LS1B_GPIO54_IRQ (LS1B_IRQ3_BASE + 22)
#define LS1B_GPIO55_IRQ (LS1B_IRQ3_BASE + 23)
#define LS1B_GPIO56_IRQ (LS1B_IRQ3_BASE + 24)
#define LS1B_GPIO57_IRQ (LS1B_IRQ3_BASE + 25)
#define LS1B_GPIO58_IRQ (LS1B_IRQ3_BASE + 26)
#define LS1B_GPIO59_IRQ (LS1B_IRQ3_BASE + 27)
#define LS1B_GPIO60_IRQ (LS1B_IRQ3_BASE + 28)
#define LS1B_GPIO61_IRQ (LS1B_IRQ3_BASE + 29)
#define LS1B_MAXIMUM_VECTORS (LS1B_GPIO61_IRQ+1)
#define BSP_INTERRUPT_VECTOR_MIN 0
#define BSP_INTERRUPT_VECTOR_MAX LS1B_MAXIMUM_VECTORS
备注:中断向量表中一共支持8 + 29 + 4 + 31 + 30 = 8 + 33 + 61 = 102个中断。
中断向量表:
static isr_tbl_t isr_table[BSP_INTERRUPT_VECTOR_MAX];
3.3.3 默认的中断处理或中断服务程序:ls1b_irq.c
/** 默认中断 */
static void mips_default_isr(int vector, void *arg)
{unsigned int sr;unsigned int cause;mips_get_sr(sr);mips_get_cause(cause);printf("Unhandled isr exception: vector 0x%02x, cause 0x%08X, sr 0x%08X\n",vector, cause, sr);while (1);
}
3.3.4 中断向量表的初始化
/* * 初始化*/
void mips_init_isr_table(void)
{unsigned int i;for (i=0; i<BSP_INTERRUPT_VECTOR_MAX; i++) {isr_table[i].handler = mips_default_isr;isr_table[i].arg = i;}
}
使用默认的中断服务程序mips_default_isr初始化中断向量表。
3.3.5 安装用户自定义的中断服务程序的安装与移除
void ls1x_install_irq_handler(int vector, void (*isr)(int, void *), void *arg)
{if ((vector >= 0) && (vector < BSP_INTERRUPT_VECTOR_MAX)){mips_interrupt_disable();isr_table[vector].handler = isr;isr_table[vector].arg = (unsigned int)arg;mips_interrupt_enable();}
}void ls1x_remove_irq_handler(int vector)
{if ((vector >= 0) && (vector < BSP_INTERRUPT_VECTOR_MAX)){mips_interrupt_disable();isr_table[vector].handler = mips_default_isr;isr_table[vector].arg = vector;mips_interrupt_enable();}
}
相关文章:

[嵌入式系统-37]:龙芯1B 开发学习套件 -6-协处理器CP0之CPU异常处理与外部中断控制器的中断处理
目录 一、CP0概述 1.1 CP0概述 1.2 龙芯异常exception与中断interrupt的区别 二、CPU协处理器的异常处理 三、外部中断与外部中断控制器 3.1 外部中断源 3.2 如何配置外部中断源 3.3 外部中断的中断向量表 3.2.1 软件中断向量表结构定义:ls1b_irq.c 3.2.2…...

前端实现一个绕圆心转动的功能
前言: 今天遇到了一个有意思的需求,如何实现一个元素绕某一个点来进行圆周运动,用到了一些初高中的数学知识,实现起来还是挺有趣的,特来分享🎁。 一. 效果展示 我们先展示效果,如下图所示&…...

【vue.js】文档解读【day 2】 | 响应式基础
如果阅读有疑问的话,欢迎评论或私信!! 本人会很热心的阐述自己的想法!谢谢!!! 文章目录 响应式基础声明响应式状态(属性)响应式代理 vs 原始值声明方法深层响应性DOM 更新时机有状态方法 响应式…...

element-ui radio 组件源码分享
今日简单分享 radio 组件的实现原理,主要从以下三个方面来分享: 1、radio 页面结构 2、radio 组件属性 3、radio 组件方法 一、radio 页面结构 1.1 页面结构如下: 二、radio 属性 2.1 value / v-model 属性,类型为 string / …...

1-安装rabbitmq
rabbitmq官网: https://www.rabbitmq.com/docs/download 本机环境:mac,使用orbstack提供的docker 使用docker部署rabbitmq docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management 然后报错…...
C/C++编程-理论学习-通信协议理论
通信协议理论 protobuf简述 protobuf 简述 作用: 1. 将结构化数据 序列化 进行信息通信、存储。意为,数据结构化管理;意为,对结构化的数据进行序列化,便于发送、存储。可类比XML、JSON。 弊端: 1. buffe…...

【Apache Camel】基础知识
【Apache Camel】基础知识 Apache Camel是什么Apache Camel基本概念和术语CamelContextEndpointsRoutesRouteBuilderComponentsMessageExchangeProcessorsDomain Specific Language(DSL) Apache Camel 应用执行步骤Apache Camel 示意图参考 Apache Camel…...
Python之访问集合的迭代器
对迭代器的理解对于我们访问数据量大是有很大的帮助,将介绍它。 一、概念 迭代:是访问集合元素的一种方式,按照某种顺序逐个访问集合中的每一项。 可迭代对象:能够被迭代的对象,称为可迭代对象 判定依据:能…...
【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器
【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器 一、自定义转换二、转换器消歧(Disambiguation)三、基于类型的转换器3.1 写转换3.2 读转换3.3 注册转换器 一、自定义转换 下面的Spring Converter实现示例将String对象转换为自定义Email值对象: R…...

在ubuntu上安装hadoop完分布式
准备工作 Xshell安装包 Xftp7安装包 虚拟机安装包 Ubuntu镜像源文件 Hadoop包 Java包 一、安装虚拟机 创建ubuntu系统 完成之后会弹出一个新的窗口 跑完之后会重启一下 按住首先用ctrlaltf3进入命令界面,输入root,密码登录管理员账号 按Esc 然后输入 …...

Python 语句(二)【循环语句】
循环语句允许执行一个语句或语句组多次,其程序流程图如下: 在python中有三种循环方式: while 循环 当判断条件为 true 时执行循环体,否则退出循环体。for 循环 重复执行语句嵌套循环 (在while循环体中嵌套for循环&…...

(3)(3.3) MAVLink高延迟协议
文章目录 前言 1 配置 2 说明 3 消息说明 前言 ArduPilot 支持 MAVLink 高延迟协议(MAVLink High Latency)。该协议专为卫星或 LoRA 等低带宽或高成本链路而设计。 在此协议中,每 5s 只发送一次 HIGH_LATENCY2 MAVLink 信息。对 MAVLink 命令或请求(…...

【异常处理】Vue报错 Component template should contain exactly one root element.
问题描述 启动VUE项目后控制台报错: Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.翻译为:组件模板应该只包含一个根元素 查看vue代码࿰…...
Eth-trunk隧道
目录 Eth-trunk (划为二层) 二层trunk 三层交换机 网关冗余 Eth-trunk (划为二层) 一,...

【Ubuntu】将多个python文件打包为.so文件
1.为什么要将python打包为.so文件? 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…...
FreeRtos自学笔记3-----参考正点原子视频
FreeRtos任务的创建与删除 任务的创建与删除本质上是调用FreeRtos的API函数。 API函数: 1.xTaskGreate():动态创建任务函数; 2.xTaskGreateStatic();静态创建任务函数; 3.xTaskDelete():任务删除 动态创建任务:任务的任务控制块以…...

使用J-Link Commander通过J-LINK以命令的形式来访问ARM通用MCU
通常我们的操作是写好程序然后将程序下载到芯片里面,然后运行程序来进行相应的操作,其实还可以使用 J − L i n k C o m m a n d e r J-Link\quad Commander J−LinkCommander通过 J − L I N K J-LINK J−LINK以命令的形式来简单访问ARM通用MCU…...

19.删除链表的倒数第N个节点
19.删除链表的倒数第N个节点 力扣题目链接(opens new window) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head [1,2,3,4,5], n…...

【Linux C | 网络编程】广播概念、UDP实现广播的C语言例子
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

java 面向对象 day3
这里写目录标题 1、 内部类1.1 成员内部类 静态内部类1.2 局部内部类1.3 匿名内部类[重点] 2、枚举2.1 使用枚举类 设计单例模式2.2 小实例 3、泛型3.1 认识泛型3.2 泛型类3.3 泛型接口3.4 泛型方法3.5 注意事项 1、 内部类 内部类 就是定义在一个类中的类 1.1 成员内部类 静…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...