嵌入式学习笔记——ARM-中断与异常
文章目录
- 中断与异常的区别
- 中断与 DMA 的区别
- 中断能否睡眠?下半部能否睡眠?
- 1. 中断处理程序不能睡眠
- 2. 下半部(SoftIRQ、Tasklet、Workqueue)
- 中断处理注意点
- 1. 快进快出
- 2. 避免阻塞
- 3. 正确返回值
- 4. 如何处理大量任务
- 5. 避免竞态问题
- 6. 中断线程化
- 7. 清除中断标志
- 总结
- 中断 vs. 轮询:效率比较
- 应用场景
- 总结
- 为什么FIQ(Fast Interrupt Request)比 **IRQ(Interrupt Request)** 快
- 1. FIQ 具有更多的 Banked(专用)寄存器
- 为什么这会影响速度?
- 2. FIQ 拥有更高的优先级
- 3. FIQ 处理过程中屏蔽了其他中断
- 4. FIQ 的入口地址使得它可以直接执行
- 为什么这会影响速度?
- 总结
- 应用场景
中断与异常的区别
中断(Interrupt) 和 异常(Exception) 都会打断 CPU 的正常执行,但它们的来源和处理方式有所不同:
比较项 | 中断(Interrupt) | 异常(Exception) |
---|---|---|
产生来源 | 外部设备(如键盘、网络、磁盘) | 内部软件或 CPU |
是否同步 | 异步(由外部事件触发,不一定与当前指令执行相关) | 同步(发生在指令执行过程中,与指令相关) |
处理方式 | 由中断控制器(如 PIC 或 APIC)通知 CPU,然后调用中断处理程序 | 由 CPU 自动触发异常处理程序 |
触发时机 | 可能发生在指令执行的任何时刻 | 只有在执行指令时才会触发 |
典型示例 | 时钟中断、键盘中断、网络中断 | 除零错误、非法指令、缺页异常 |
例如:
- 当你按下键盘时,会触发键盘中断,CPU 需要暂停当前执行的程序,调用键盘驱动处理输入。
- 当一个程序执行
div 0
试图除以零时,CPU 会触发一个异常,让操作系统处理错误。
中断与 DMA 的区别
比较项 | DMA | 中断 |
---|---|---|
主要作用 | 让外设直接与内存交换数据,而不经过 CPU | 让 CPU 处理突发事件 |
是否需要 CPU 参与 | 不需要,数据传输完全由 DMA 控制 | 需要,CPU 需要暂停当前任务并执行中断处理 |
速度 | 高(直接操作内存) | 可能较慢(需要 CPU 介入) |
典型示例 | 磁盘控制器通过 DMA 把数据传输到内存 | 网络设备收到数据后通知 CPU |
总结:
- DMA 主要用于数据传输,例如:磁盘或网卡使用 DMA 直接把数据写入内存,不需要 CPU 逐字节读取。
- 中断主要用于通知 CPU 发生了某些事件,如网络设备接收到新数据时,会触发中断,让 CPU 读取数据包。
中断能否睡眠?下半部能否睡眠?
1. 中断处理程序不能睡眠
- 原因:中断发生时,CPU 处于 中断上下文,没有具体的进程。如果在中断处理中调用了导致阻塞的函数(如
schedule()
),则:- 进程调度系统不知道当前上下文对应哪个进程,无法正确恢复上下文。
- 可能会导致系统死锁或崩溃。
- 示例:
void irq_handler() {// 这会导致内核崩溃!schedule(); }
2. 下半部(SoftIRQ、Tasklet、Workqueue)
下半部类型 | 是否能睡眠 | 说明 |
---|---|---|
SoftIRQ | 否 | 仍然处于中断上下文,不允许睡眠 |
Tasklet | 否 | 与 SoftIRQ 类似,仍不能睡眠 |
Workqueue | 是 | 在内核线程中执行,可以睡眠 |
总结:
- 中断处理程序不能睡眠,否则会导致内核崩溃。
- SoftIRQ 和 Tasklet 不能睡眠,因为它们仍然运行在中断上下文中。
- Workqueue 可以睡眠,因为它们在一个独立的内核线程中运行。
中断处理注意点
在写中断服务程序(ISR,Interrupt Service Routine)时,需要注意以下关键点:
1. 快进快出
- 快速完成关键任务:ISR应该只做必要的工作,比如读取硬件寄存器、清除中断标志、存储关键数据等。
- 将复杂任务移至下半部:可以使用 工作队列(workqueue) 或 tasklet 来处理较复杂的任务,而ISR只执行简单、时间敏感的操作。
2. 避免阻塞
- 中断期间CPU不会进行进程切换,因此ISR 不能 执行 sleep、等待锁、I/O 操作 等可能导致阻塞的操作。
- 例如,在ISR中调用
mutex_lock()
是错误的,因为它可能导致死锁。 - 如果必须同步资源,可以使用 自旋锁(spinlock),但要小心避免死锁。
3. 正确返回值
- 在Linux中,ISR必须返回 IRQ_HANDLED 或 IRQ_NONE(位于
<linux/irqreturn.h>
)。 - 返回 IRQ_HANDLED 表示该中断已被正确处理,而 IRQ_NONE 则表示该中断不属于当前设备,可能需要进一步排查。
4. 如何处理大量任务
- 使用中断下半部机制(Deferred Processing):
- 软中断(SoftIRQ):适用于高吞吐量需求,如网络数据包处理。
- Tasklet:适用于优先级较高但不需要高吞吐量的任务,如调度一些紧急的任务处理。
- 工作队列(workqueue):适用于可以被内核线程调度的任务,适合耗时较长的任务处理。
- 示例代码(使用 Tasklet):
#include <linux/interrupt.h>void my_tasklet_func(unsigned long data); DECLARE_TASKLET(my_tasklet, my_tasklet_func, 0);irqreturn_t my_irq_handler(int irq, void *dev_id) {// 仅做必要的中断处理printk(KERN_INFO "Interrupt occurred\n");// 调度 tasklet 进行后续处理tasklet_schedule(&my_tasklet);return IRQ_HANDLED; }void my_tasklet_func(unsigned long data) {// 在下半部处理较复杂的任务printk(KERN_INFO "Tasklet executed\n"); }static int __init my_module_init(void) {int irq = 19; // 假设是 IRQ19request_irq(irq, my_irq_handler, IRQF_SHARED, "my_irq_device", NULL);return 0; }static void __exit my_module_exit(void) {free_irq(19, NULL);tasklet_kill(&my_tasklet); }module_init(my_module_init); module_exit(my_module_exit);
5. 避免竞态问题
- 使用自旋锁保护共享资源:
static spinlock_t my_lock;irqreturn_t my_irq_handler(int irq, void *dev_id) {unsigned long flags;spin_lock_irqsave(&my_lock, flags); // 关闭本地中断,并上锁// 访问共享资源spin_unlock_irqrestore(&my_lock, flags); // 解锁,并恢复中断return IRQ_HANDLED; }
6. 中断线程化
- 对于较复杂的任务,可以将中断处理线程化(使用
request_threaded_irq()
)。 - 线程化的中断 允许进程调度,但会有一定的时延:
irqreturn_t my_irq_handler(int irq, void *dev_id) {return IRQ_WAKE_THREAD; // 让内核调度中断线程执行后续操作 }irqreturn_t my_irq_thread_fn(int irq, void *dev_id) {// 处理较复杂的任务printk(KERN_INFO "Threaded IRQ handling\n");return IRQ_HANDLED; }request_threaded_irq(irq, my_irq_handler, my_irq_thread_fn, IRQF_SHARED, "my_irq_device", NULL);
7. 清除中断标志
- 在某些设备中,如果不清除 中断标志位,中断可能会持续触发,导致系统卡死:
irqreturn_t my_irq_handler(int irq, void *dev_id) {iowrite32(0, INTERRUPT_STATUS_REGISTER); // 清除中断标志return IRQ_HANDLED; }
总结
- 上半部(ISR)做 最少的事情,如读取数据、清除中断标志,然后 尽快退出。
- 下半部 通过 tasklet、工作队列 或 软中断 处理复杂任务。
- 避免阻塞,不要在ISR中调用
sleep()
或等待资源。 - 保护共享资源,使用 自旋锁(在中断上下文)。
- 中断线程化 适用于较复杂的任务,但可能会有一定延迟。
中断 vs. 轮询:效率比较
方式 | 适用场景 | 优势 | 劣势 |
---|---|---|---|
中断(Interrupt) | 低频请求设备(如键盘、鼠标、串口、传感器) | - CPU 不需要主动查询,减少不必要的 CPU 开销 - 适合低频请求设备 | - 需要中断上下文处理,可能引入额外的调度开销 - 可能会影响实时性(高优先级任务打断低优先级任务) |
轮询(Polling) | 高频率、高吞吐设备(如高速网卡、DMA 设备、实时音视频处理) | - 对于高频设备,可以减少中断开销,提高吞吐量 - 控制简单,不涉及中断处理 | - 占用 CPU 资源,可能导致其他任务无法执行 - 低效,尤其是在设备空闲时,CPU 仍然需要不断查询 |
应用场景
-
设备请求频率低 → 中断
- 适用于 低速设备,如键盘、鼠标、传感器、串口等。
- CPU 只有在 设备有数据 时才会被打断,中断处理时间短。
- 避免 CPU 不断轮询浪费资源。
-
设备请求频率高 → 轮询
- 适用于 高速数据传输设备,如 网络设备、硬盘控制器、音视频处理 等。
- 轮询可以减少中断频繁触发的开销,提高数据吞吐能力。
- 例如,Linux 内核中的 NAPI(New API)网络处理模式就是 轮询 + 中断混合 方案。
-
折中方案:中断 + 轮询
- 许多高性能设备(如网卡、存储设备)使用 中断触发 + 轮询 结合的方式:
- 初始阶段:中断触发 → 当有新数据时,触发中断通知 CPU。
- 高负载阶段:轮询处理 → 在一段时间内,CPU 进入轮询模式,提高数据处理效率。
- 示例:Linux NAPI 模式(用于网络驱动)
- 初始时 使用中断 监听网络数据包。
- 如果数据包流量很大,则改为 轮询模式,避免频繁触发中断。
- 数据处理完毕后,系统重新 切换回中断模式。
- 许多高性能设备(如网卡、存储设备)使用 中断触发 + 轮询 结合的方式:
总结
- 低频设备(键盘、鼠标、传感器) → 中断
- 高吞吐设备(网卡、存储、视频流) → 轮询
- 高负载设备(混合场景) → 中断 + 轮询(NAPI、Hybrid Polling)
为什么FIQ(Fast Interrupt Request)比 IRQ(Interrupt Request) 快
1. FIQ 具有更多的 Banked(专用)寄存器
- FIQ 模式 在 ARM 体系结构 下有 更多的专用寄存器:
- FIQ 模式 拥有 R8-R14 的专用 Banked 寄存器,同时还有 SPSR(Saved Program Status Register)。
- IRQ 模式 只有 R13(SP)、R14(LR)、SPSR 是 Banked 寄存器,而 R8-R12 需要手动保存。
为什么这会影响速度?
- 在 IRQ 处理程序 中,由于 R8-R12 没有 Banked 版本,所以在进入中断时,必须 手动保存这些寄存器,然后在中断退出时 恢复这些寄存器,这会增加 入栈和出栈的开销。
- FIQ 由于有专门的寄存器,在 模式切换时 CPU 自动保存/恢复,无需手动压栈/出栈,从而 减少了指令开销,提高了执行速度。
2. FIQ 拥有更高的优先级
- 在 ARM 处理器中,FIQ 优先级高于 IRQ:
- 如果 FIQ 和 IRQ 同时发生,CPU 会先响应 FIQ,然后再处理 IRQ。
- 如果正在处理 IRQ 时 FIQ 触发,那么 FIQ 会抢占 IRQ 立即执行,这保证了 FIQ 的 实时性 和 低延迟。
3. FIQ 处理过程中屏蔽了其他中断
-
当 CPU 进入 FIQ 模式 时:
- 所有 IRQ 中断被屏蔽(禁用)。
- 其他异常(如未定义指令异常、软件中断异常)也被屏蔽。
- 这意味着 FIQ 不会被其他中断或异常打断,能够在 更短的时间内完成处理。
-
反之,在 IRQ 模式 下:
- FIQ 仍然可以打断 IRQ,导致 IRQ 可能会被抢占,增加了中断处理的复杂度和上下文切换的时间。
4. FIQ 的入口地址使得它可以直接执行
- ARM 处理器的中断向量表地址:
- IRQ 入口地址:
0x18
- FIQ 入口地址:
0x1C
- IRQ 入口地址:
为什么这会影响速度?
-
IRQ 入口
0x18
只能放一条指令,通常是B
(Branch)指令,即 必须跳转到中断处理程序:0x18: B IRQ_Handler
- 由于 需要跳转,这 增加了一条额外的跳转指令,影响了中断的响应时间。
-
FIQ 入口
0x1C
之后没有其他中断向量表,可以 直接放入 FIQ 处理代码:0x1C: STMFD SP!, {R0-R4} ; 直接保存寄存器LDR R0, =DATA ; 读取数据STR R0, [R1] ; 处理数据LDMFD SP!, {R0-R4} ; 恢复寄存器
- 这样 FIQ 处理程序可以直接在
0x1C
处执行,避免跳转,从而 进一步减少指令执行时间,提高中断响应速度。
- 这样 FIQ 处理程序可以直接在
总结
对比项 | FIQ(Fast Interrupt) | IRQ(Interrupt Request) |
---|---|---|
专用寄存器 | R8-R14 + SPSR(Banked 寄存器,不需要手动保存) | 只有 R13(SP)、R14(LR)、SPSR(R8-R12 需要手动保存) |
中断优先级 | FIQ 最高优先级,可以打断 IRQ | IRQ 低于 FIQ,可能被 FIQ 抢占 |
中断屏蔽 | 进入 FIQ 后,所有 IRQ 被屏蔽,不受其他中断影响 | 进入 IRQ 后,FIQ 仍然可以抢占 |
入口地址 | 0x1C,可以直接执行,无需跳转 | 0x18 只能放一条指令,需要跳转 |
执行速度 | 更快,适用于高优先级、低延迟任务 | 较慢,适用于一般设备 |
应用场景
-
FIQ 适用于:
- 高实时性场景(如 DMA 传输完成中断)
- 数据流处理(如高速 音频/视频数据 处理)
- 低延迟任务(如紧急错误处理)
-
IRQ 适用于:
- 普通设备中断(如键盘、鼠标、串口)
- 网络中断(如果流量不大)
相关文章:
嵌入式学习笔记——ARM-中断与异常
文章目录 中断与异常的区别中断与 DMA 的区别中断能否睡眠?下半部能否睡眠?1. 中断处理程序不能睡眠2. 下半部(SoftIRQ、Tasklet、Workqueue) 中断处理注意点1. 快进快出2. 避免阻塞3. 正确返回值4. 如何处理大量任务5. 避免竞态问…...
OpenHarmony子系统开发 - 安全(十二)
OpenHarmony SELinux开发指导(五) 一、OpenHarmony SELinux常见问题 neverallow编译报错处理 现象描述 编译SELinux时会进行neverallow检查,当配置的策略不合理时,可能出现违反neverallow编译报错。 neverallow check failed…...
深入解析ARM与RISC-V架构的Bring-up核心流程
深入解析ARM与RISC-V架构的Bring-up核心流程 作者:嵌入式架构探索者 | 2023年10月 引言 在嵌入式开发中,处理器的Bring-up(启动初始化)是系统运行的第一道门槛。ARM和RISC-V作为两大主流架构,其Bring-up流程既有共性…...
【力扣hot100题】(054)全排列
挺经典的回溯题的。 class Solution { public:vector<vector<int>> result;void recursion(vector<int>& nums,vector<int>& now){if(nums.size()0){result.push_back(now);return ;}for(int i0;i<nums.size();i){now.push_back(nums[i]);…...
vue中如何动态的绑定图片
在项目中遇到需要动态的改变图片路径,图片路径并非是从后台获取过来的数据。 因此在data中必须用require加载,否则会当成字符串来处理。...
湖北师范大学计信学院研究生课程《工程伦理》12.6章节练习
1【单选题】下列哪个不是数字身份的特点? A. 多样性 B. 唯一性 C. 可变性 D. 允许匿名和假名 2【单选题】下列哪项不是现代国家的基本职能。 A. 保护政权统一 B. 保护本国面对其他国家侵犯 C. 保护国内每个人免受他人侵犯 D. 承担发展国民经济 3【单选题】哪个国家在全球率先发…...
prism WPF 登录对话框登录成功后显示主界面
prism WPF 登录对话框登录成功后显示主界面 项目结构 LoginUC.xaml <UserControl x:Class"PrismWpfApp.Views.LoginUC"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml…...
MySQL统计信息
1. 什么是统计信息? 统计信息就像是数据库的"地图",它告诉优化器: 每个表有多大(有多少行数据) 每个索引的"区分度"(有多少不同的值) 数据分布情况(哪些值出…...
Spark,配置hadoop集群2
编写Hadoop集群启停脚本 1.建立新文件,编写脚本程序 在hadoop101中操作,在/root/bin下新建文件:myhadoop,输入如下内容: 2.分发执行权限 保存后退出,然后赋予脚本执行权限 [roothadoop101 ~]$ chmod x /r…...
⭐算法OJ⭐重建行程【哈密尔顿路径】(C++ 实现)Reconstruct Itinerary
You are given a list of airline tickets where tickets[i] [from_i, to_i] represent the departure and the arrival airports of one flight. Reconstruct the itinerary in order and return it. All of the tickets belong to a man who departs from “JFK”, thus, t…...
大模型如何优化数字人的实时交互与情感表达
标题:大模型如何优化数字人的实时交互与情感表达 内容:1.摘要 随着人工智能技术的飞速发展,数字人在多个领域的应用愈发广泛,其实时交互与情感表达能力成为提升用户体验的关键因素。本文旨在探讨大模型如何优化数字人的实时交互与情感表达。通过分析大模…...
【含文档+PPT+源码】基于SpringBoot+Vue旅游管理网站
项目介绍 本课程演示的是一款 基于SpringBootVue旅游管理网站,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附…...
理解OSPF Stub区域和各类LSA特点
之前学习到OSPF特殊区域和各类类型LSA的分析后,一直很混乱,在网上也难找到详细的解释,在看了 HCNP书本内容后,对这块类容理解更加清晰,本次内容,我们使用实验示例,来对OSPF特殊区域和各 类型LSA…...
AI智算-K8s如何利用GPFS分布式并行文件存储加速训练or推理
文章目录 GPFS简介核心特性存储环境介绍存储软件版本客户端存储RoCEGPFS 管理(GUI)1. 创建 CSI 用户2. 检查GUI与k8s通信文件系统配置1. 开启配额2. 启用filesetdf文件系统3. 验证文件系统配置4. 启用自动inode扩展存储集群配置1. 启用对根文件集(root fileset)配额2. igno…...
Linux如何设置bash为默认shell
大部分情况下,Linux的默认shell是bash,但某些Linux发行版,例如Kali,默认的终端是zsh,本文以Kali为例,将Kali的默认shell从zsh改为bash。 其实Kali早期的shell也是bash,2020 版本之后:…...
leetcode-代码随想录-链表-翻转链表
题目 链接:206. 反转链表 - 力扣(LeetCode) 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]class Solution { public:ListNode* rev…...
CSS快速上手
第一章 CSS基础 首先来回答2个问题。 1.CSS是什么? CSS是用来控制网页外观的一门技术。 2.前端最核心的技术是什么?他们分别是用来干吗的? 前端最核心的技术有:HTML、CSS、JavaScript。 HTML用于控制网页的结构,CSS…...
虚拟现实 UI 设计:打造沉浸式用户体验
VR UI 设计基础与特点 虚拟现实技术近年来发展迅猛,其独特的沉浸式体验吸引了众多领域的关注与应用。在 VR 环境中,UI 设计扮演着至关重要的角色,它是用户与虚拟世界交互的桥梁。与传统 UI 设计相比,VR UI 设计具有显著的特点。传…...
搜索与图论 树的广度优先遍历 图中点的层次
适用性 当边的权值相等时,使用广度优先遍历,往往是求图(树)的最短路径最优方法 抽象理解 伪代码 建立队列 添加第一个起始点到队列,标记其不可访问 while(队列不为空)//开始循环{获取队列中的队首元素,获…...
DHCP之报文格式
字段说明: op (op code): 表示报文的类型,取值为 1 或 2,含义如下 1:客户端请求报 2:服务器响应报文 Secs (seconds):由客户端填充,表示从客户端开始获得 IP 地址或 IP 地址续借后所使用了的秒数,缺省值为 3600s。 F…...
Docker安装、配置Redis
1.如果没有docker-compose.yml文件的话,先创建docker-compose.yml 配置文件一般长这个样子 version: 3services:redis:image: redis:latestcontainer_name: redisports:- "6379:6379"command: redis-server --requirepass "123456"restart: a…...
空中无人机等动态目标识别2025.4.4
* 一.无人机动态数据概述* 1.1 空中动态数据定义 在无人机动态数据的范畴中, 空中动态数据 是一个核心概念。它主要包括无人机在飞行过程中产生的各种实时信息,如 位置、速度、高度、姿态 等[1]。这些数据通过传感器系统采集,并以特定格式存…...
【AI论文】通过R1-Zero类似训练改进视觉空间推理
摘要:人们越来越关注提升多模态大型语言模型(MLLMs)的推理能力。作为在物理领域中运作的人工智能代理的基石,基于视频的视觉空间智能(VSI)成为MLLMs最为关键的推理能力之一。本研究首次深入探讨了通过R1-Ze…...
游戏引擎学习第203天
回顾当前情况 在这里我将直播完成整个游戏的制作。我们现在面临一些技术上的困难,确实如此。我的笔记本电脑的电源接口坏了,所以我不得不准备了这台备用笔记本,希望它能够正常工作。我所以希望一切都还好,尽管我不完全确定是否一…...
从菜鸟到高手的提示词优化指南
如何用“说话的艺术”榨干AI潜力? ——从菜鸟到高手的提示词优化指南 一、什么是好的提示词? 核心公式:精准提问 明确需求 限定条件 示范案例 好比让AI帮你买咖啡—— ❌ 差提示:“帮我买杯咖啡”(AI可能随便…...
应对高并发的根本挑战:思维转变【大模型总结】
以下是对这篇技术总结的详细解析,以分步说明的形式呈现,帮助理解亿万并发场景下的核心策略与创新思维: 一、应对高并发的根本挑战:思维转变 1. 传统架构的局限 问题:传统系统追求零故障和强一致性,但在海…...
【Java集合】单列集合List详解
参考笔记: java 单列集合List 万字详解(通俗易懂)_java singlelist-CSDN博客 目录 前言: 一、概述 二、特点 三、使用集合的经典四部曲 四、List接口常用的方法 五、List接口实现类——ArrayList 六、List接口实现类——Ve…...
蓝桥刷题note13(排序)
1.冒泡排序 适用场景: 数据量较小:适用于数据量较小的情况,例如数组长度在 10 以内。 优点 稳定性:冒泡排序是一种稳定的排序算法,相同元素的相对顺序不会改变。 缺点 时间复杂度高:平均和最坏时间复杂度为…...
【AI模型核心流程】(一)大语言模型输入处理机制详解与常见误解辨析
一、引言 大语言模型(LLM)如GPT、BERT、LLaMA等,已成为自然语言处理领域的核心技术。然而,许多开发者对其底层输入处理机制存在误解,尤其是从自然语言文本到模型可理解的向量表示这一过程。本文将从技术细节出发&…...
如何完整迁移 Git 仓库 ?
Git 已经成为软件开发中版本控制和协作的事实上的标准。有时,开发人员可能需要将整个 Git 存储库 (包括其历史记录、分支和标记) 移动到新的位置或托管服务。在这个全面的指南中,我们将讨论在不丢失任何关键数据或历史记录的情况下无缝地重新定位完整 Gi…...
《在 Ubuntu 22.04 上安装 CUDA 11.8 和 Anaconda,并配置环境变量》
安装 CUDA 11.8 和 Anaconda 并配置环境变量 在本教程中,我们将介绍如何在 Ubuntu 22.04 上安装 CUDA 11.8 和 Anaconda,并配置相应的环境变量。我们还将配置使用 阿里云镜像源 来加速软件包更新。以下是具体步骤。 步骤 1:更新软件源 首先…...
残差神经网络(ResNet)概念解析与用法实例:简洁的图像处理任务
目录 1. 前言 2. ResNet的核心思想 2.1 残差学习 2.2 跳跃连接 3. ResNet的架构 3.1 残差块 3.2 ResNet的整体架构 4. ResNet实例:随便处理处理图像 5. 总结 1. 前言 随着深度学习的发展,神经网络的层数不断增加,但随之而来的是梯度…...
家里网络访问Github有时候打不开,解决办法
1、修改Hosts文件修改法 通过DNS查询工具(如)获取最新GitHub域名解析IP修改系统hosts文件(路径:C:\Windows\System32\drivers\etc\hosts),添加:20.205.243.166 github.com 20.27.177.113 github…...
VirtualBox 配置双网卡(NAT + 桥接)详细步骤
在 VirtualBox 中为 CentOS 虚拟机配置双网卡(NAT 桥接),使其既能访问外网(NAT),又能与宿主机(Windows 10)或局域网通信(桥接)。 步骤 1:关闭虚…...
【2023】ORIGIN或MATLAB 颜色图,等高图,颜色条——需要拟合补全中间的颜色
前言 不是我疯了,就是世界疯了。我不知道究竟是哪一个疯了。瓶口和瓶盖尺寸不符。也许该怪瓶子,也许该怪盖子。但不管怎样,尺寸不符的事实不容动摇——《1Q84》 \;\;\;\;\;\; 有十几二十个导出的曲线数据,其中第一列是频率点,大约1001个,第二列是某种数据,都在0~1之间…...
flutter 专题 七十三Flutter打包未签名的ipa
在Flutter项目开发完成之后,需要把iOS项目拿给第三方(如打包机)进行签名,那我们首先就需要准备打包好未签名的的ipa包。 打包之前,需要先从第三方获取到iOS证书(.p12)和描述文件(.mobileprovision),然后然…...
ngx_get_full_name
定义在 src\core\ngx_file.c ngx_int_t ngx_get_full_name(ngx_pool_t *pool, ngx_str_t *prefix, ngx_str_t *name) {size_t len;u_char *p, *n;ngx_int_t rc;rc ngx_test_full_name(name);if (rc NGX_OK) {return rc;}len prefix->len;#if (NGX_WIN32)if (…...
leetcode-代码随想录-链表-链表总结篇
理论基础 链表: 每个节点由两部分组成:数据域和指针域(存放指向下一个节点的指针);入口节点称为头节点;最后一个节点的指针域指向NULL(空指针)。 分类: 单链表双链表&…...
如何用Python轻松实现快速复制或剪切文件列表中的所有文件呢?
在程序开发的过程中,处理文件是我们日常工作中一个很重要的环节。想象一下,当你需要把一大堆文件从一个文件夹移动到另一个文件夹时,手工操作真的会让人觉得烦躁对吧?这时,用代码来处理这些烦恼,真是太方便…...
【棒垒球规则】全国幼儿软式棒垒球比赛规则(二)·棒球1号位
幼儿棒垒球设备 2.01 球棒 球棒使用组委会提供的泡棉发泡安全球棒,以安全环保材料制成;球棒规格:长度为 53 厘米,重量为 200 克(10 克),棒头直径为 7 厘米,握把直径为 3 厘米。 2…...
在MacOS 10.15上使用MongoDB
这次是在MacOS 10.15上使用MongoDB。先在豆包问支持MacOS 10.15的MongoDB最新版是什么,答案是MongoDB 5.0。 抱着谨慎怀疑的态度去官方网站查询了一下,答案如下 MongoDB 7.x支持的最低版本MacOS是11MongoDB 6.x支持的最低版本MacOS是10.14 又找deepsee…...
【Ragflow】11. 文件解析流程分析/批量解析实现
概述 本文继续对ragflow文档解析部分进行分析,并通过脚本的方式实现对文件的批量上传解析。 文件解析流程 文件解析的请求处理流程大致如下: 1.前端上传文件,通过v1/document/run接口,发起文件解析请求 2.后端api\apps\docum…...
企业供应链管理
企业供应链管理 企业供应链管理 企业供应链管理企业信息化信息化的作用信息化的发展阶段信息化建设的挑战 SRM(供应商关系管理)SRM架构参考图企业内部系统协作: ERP (企业资源计划)OA (办公自动化)业务功能模块:企业日常办公 EMS …...
性能测试之jmeter的基本使用
简介 Jmeter是Apache的开源项目,基于Java开发,主要用于进行压力测试。 优点:开源免费、支持多协议、轻量级、功能强大 官网:https://jmeter.apache.org/index.html 安装 安装步骤: 下载:进入jmeter的…...
常见的微信个人号二次开发功能
一、常见开发功能 1. 好友管理 好友列表维护 添加/删除好友 修改好友信息(备注、标签等) 分组管理 创建/编辑/删除标签 好友分类与筛选 2. 消息管理 信息发送 支持多类型内容:文本、图片、视频、文件、小程序、名片、URL链接等 附加功…...
Muduo网络库实现 [十三] - HttpRequest模块
目录 设计思路 成员设计 模块实现 设计思路 首先我们要先知道HTTP的请求的流程是什么样子的,不然我们会学的很迷糊。对于HTTP请求如何到来以及去往哪里,我们应该很清楚的知道 HTTP请求在服务器系统中的传递流程是一个多层次的过程: 客户端发起请求…...
探索C++11:解锁现代编程(3)
1.包装器 1.1function std::function 是 C 标准库中的一个模板类,位于 <functional> 头文件中。它用于封装可调用对象,包括普通函数、Lambda 表达式、函数对象、成员函数等。std::function 提供了极大的灵活性,使得你可以将不同类型的…...
软件工程(应试版)图形工具总结(二)
遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。 教材参考《软件工程导论(第六版)》 七、 层次图(H图)与HIPO图 1、概述 1.1、层次图(Hierarchy Chart / H图) 核心…...
人工智能在前端开发中的应用探索
一、人工智能在前端开发中的应用场景 人工智能(AI)技术的快速发展为前端开发带来了新的机遇和挑战。AI在前端开发中的应用主要集中在以下几个方面:智能代码生成、自动化测试、个性化推荐、智能交互设计以及性能优化。这些应用场景不仅提高了…...
木马学习记录
一句话木马是什么 一句话木马就是仅需要一行代码的木马,很简短且简单,木马的函数将会执行我们发送的命令 如何发送命令&发送的命令如何执行? 有三种方式:GET,POST,COOKIE,一句话木马中用$_G…...