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

RT-linux 系统详解

RT-Linux(Real-Time Linux)是一种基于Linux内核的实时操作系统(RTOS),旨在为Linux添加硬实时(Hard Real-Time)能力,使其适用于对时间确定性要求极高的嵌入式系统和工业控制场景。以下从系统层面详细解析RT-Linux的技术特点、架构设计、应用场景及优缺点:

一、RT-Linux的起源与发展

• 诞生背景:
传统Linux内核(基于CFS调度器)是为通用场景设计的“软实时”系统,无法满足硬实时任务(如必须在确定时间内完成的工业控制、航空航天任务)的需求。
1996年,新墨西哥理工大学(New Mexico Tech)的Michael Barabanov等人开发了RT-Linux,通过改造Linux内核使其支持硬实时调度。

• 发展分支:

◦ 早期双内核架构(已逐渐淘汰):通过在Linux内核外添加一个实时微内核(RTAI/LXRT),实时任务由微内核管理,非实时任务仍由Linux处理。

◦ 现代内核补丁方案:通过PREEMPT_RT补丁直接修改Linux内核,增强其实时性(目前主流方式)。

二、RT-Linux的系统架构与核心技术

1. 实时性实现原理

RT-Linux通过以下技术改造Linux内核,实现硬实时能力:

(1)调度器改造

• 替代传统调度器:
传统Linux使用完全公平调度器(CFS),基于分时复用(Time Sharing),适合通用任务但实时性不足。
RT-Linux引入优先级抢占式调度器,支持:

◦ 固定优先级调度(如POSIX实时标准中的SCHED_FIFO/SCHED_RR),实时任务按优先级抢占CPU。

◦ 硬实时截止时间保证:确保高优先级任务在指定时间内被调度(如周期任务的最坏情况执行时间(WCET)可预测)。

• PREEMPT_RT补丁:
该补丁通过以下方式增强内核可抢占性:

◦ 内核完全抢占:允许内核态任务被更高优先级的实时任务中断(传统Linux内核仅用户态可抢占)。

◦ 优先级继承机制:解决优先级反转问题(如低优先级任务持有高优先级任务所需资源时,临时提升低优先级任务的优先级)。

◦ 自旋锁优化:减少内核临界区的锁定时间,降低实时任务阻塞风险。

(2)中断管理

• 实时中断框架:
将关键实时中断(如传感器采样、电机控制)路由到实时内核处理,避免被Linux非实时任务延迟。

◦ 早期双内核架构中,实时微内核直接接管硬件中断,Linux内核作为实时微内核的低优先级任务运行。

◦ 现代方案通过**中断线程化(Interrupt Threading)**将非实时中断转为内核线程处理,减少中断处理时间对实时任务的影响。

(3)时间管理

• 高精度定时器:
利用Linux的高精度定时器子系统(HRtimer),提供纳秒级定时精度,支持实时任务的精确时间触发(如周期性控制任务)。

• 时钟隔离:
实时任务与非实时任务的时间调度相互隔离,避免非实时任务的延迟干扰实时时钟。

2. 任务模型

• 实时任务分类:

◦ 硬实时任务:必须在绝对截止时间内完成(如工业机器人的运动控制)。

◦ 软实时任务:尽量在截止时间内完成,但允许偶尔超时(如多媒体流处理)。

• 编程接口:
通过POSIX实时扩展(POSIX.1b,如pthread实时线程、timer_create高精度定时器)开发实时应用,兼容Linux生态的同时满足实时性需求。

三、RT-Linux与传统Linux的对比
特性 传统Linux RT-Linux(含PREEMPT_RT) 
调度器 CFS(公平分时) 优先级抢占式(支持硬实时调度) 
内核抢占 用户态可抢占,内核态有限 内核完全可抢占 
实时性等级 软实时(最佳延迟约10ms级) 硬实时(最坏延迟可降至微秒级) 
典型应用 服务器、桌面、通用嵌入式 工业控制、机器人、航空航天 
生态兼容性 完全兼容Linux软件栈 兼容大部分Linux软件,但需实时适配 

四、应用场景

RT-Linux主要用于需要实时性与Linux生态结合的领域:

1. 工业自动化:
如数控机床、PLC(可编程逻辑控制器)、分布式控制系统(DCS),利用Linux的网络协议栈和设备驱动生态,同时满足毫秒级控制精度。

2. 机器人技术:
如移动机器人导航、机械臂控制,结合ROS(机器人操作系统)框架(部分ROS版本基于RT-Linux)实现实时运动规划。

3. 航空航天与国防:
如无人机飞控系统、卫星载荷控制,利用RT-Linux的可定制性和实时性,同时通过Linux的安全机制满足系统可靠性要求。

4. 医疗设备:
如实时生理信号处理、医学成像设备,确保数据采集与处理的严格时序要求。

5. 电信与网络设备:
如实时通信协议处理(5G基站)、网络流量监控,结合Linux的网络协议栈实现高性能实时处理。

五、优缺点分析

优点

1. 兼顾实时性与生态丰富性:
无需放弃Linux的海量驱动、开发工具和开源软件(如Python、ROS),降低开发门槛。

2. 开源与可定制性:
基于开源Linux内核,可根据需求裁剪内核功能(如删除非实时组件),适合定制化嵌入式系统。

3. 成本优势:
相比商用RTOS(如VxWorks、QNX),RT-Linux(尤其是PREEMPT_RT社区版)无需授权费用,适合预算有限的项目。

缺点

1. 硬实时性能受限:
尽管PREEMPT_RT提升了实时性,但Linux内核本质仍为通用设计,最坏情况下延迟(如内核态锁竞争)可能高于专用RTOS(如VxWorks的微秒级确定性)。

2. 开发复杂度较高:
需深入理解Linux内核与实时调度机制,实时任务调试(如延迟分析)依赖专业工具(如cyclictest)。

3. 实时组件兼容性问题:
部分Linux子系统(如SWAP内存交换、某些文件系统)可能干扰实时性,需谨慎配置。

六、RT-Linux的现状与替代方案

• 现状:

◦ PREEMPT_RT补丁已逐步被主线Linux内核接纳(如自5.4版本起,部分实时特性默认开启),RT-Linux逐渐从“独立系统”演变为“Linux内核的实时增强”。

◦ 商业化支持:如Wind River的VxWorks Linux、Timesys的实时Linux解决方案,提供企业级维护与实时优化。

• 替代方案:

◦ 专用RTOS:如VxWorks、QNX、RTX(微软实时扩展),适合对硬实时要求极高的场景(如航空电子设备)。

◦ 实时微内核系统:如RTAI(已停止维护)、Xenomai(基于PREEMPT_RT的双内核方案,更侧重硬实时)。

◦ 容器化实时方案:如利用Docker实时容器(Linux内核cgroups资源隔离)运行实时任务,但实时性略逊于直接内核改造。

七、总结

RT-Linux是Linux向实时领域延伸的重要尝试,通过内核级改造使其具备硬实时能力,成为工业与嵌入式领域的主流选择之一。其核心优势在于“Linux生态+实时性”的平衡,适合需要复杂软件栈但对实时性要求非极端的场景。随着PREEMPT_RT的成熟,RT-Linux正逐渐融入主流Linux开发,推动“通用系统与实时系统的融合”趋势。

从系统层面深入解析RT-Linux(基于PREEMPT_RT补丁的现代实现),需聚焦其内核架构改造、实时调度机制、内存管理、中断处理、实时扩展接口及性能优化等核心技术细节。以下从操作系统底层原理角度展开分析:

一、内核架构与实时性改造

1. 双内核架构的演进(历史方案)

早期RT-Linux采用实时微内核+Linux主内核的双内核模式:

• 实时微内核(如RTAI/LXRT):
作为硬件抽象层,直接接管CPU和中断控制器,负责硬实时任务的调度(优先级抢占式)和时间管理,延迟可达微秒级。

◦ 实时任务在微内核空间运行,通过FIFO队列与Linux主内核通信。

• Linux主内核:
作为实时微内核的低优先级任务存在,处理非实时任务(如文件系统、网络协议栈),仅在实时微内核无任务时被调度。

• 局限性:双内核间通信存在额外开销,且需维护独立的驱动栈,逐渐被**单内核实时化方案(PREEMPT_RT)**取代。

2. PREEMPT_RT单内核架构

现代RT-Linux通过PREEMPT_RT补丁直接修改Linux内核,实现“单内核硬实时”,核心改造包括:

• 内核完全抢占(Full Preemption):

◦ 传统Linux内核态代码受自旋锁(spinlock)保护,无法被中断或抢占。PREEMPT_RT将内核代码中的自旋锁替换为实时互斥锁(rt_mutex),允许高优先级实时任务中断内核态执行。

◦ 引入抢占标记(preempt_count)和抢占延迟跟踪机制,确保内核代码可被安全抢占。

• 中断控制器改造:

◦ 将非实时中断(如磁盘、网络)的处理逻辑从中断上下文(IRQ context)迁移至内核线程(kthread),即中断线程化(Interrupt Threading)。实时中断(如传感器触发)仍在原始中断上下文快速处理,避免延迟。

◦ 通过中断优先级映射(如Linux的IRQ affinity)将关键中断绑定到特定CPU核心,减少多核竞争。

• 禁止非实时特性:

◦ 禁用SWAP内存交换,避免实时任务因页面换入/换出导致的不确定延迟。

◦ 可选关闭CPU节能模式(如C-States),确保处理器频率稳定,避免动态调频(DVFS)引入的时钟抖动。

二、实时调度器实现

1. 调度类与优先级体系

RT-Linux维护**实时调度类(RT Scheduler Class)和通用调度类(CFS)**的分层架构:

• 实时任务优先级:

◦ 范围为1(最高)~99(最低)(POSIX标准),高于CFS调度的普通任务(优先级100~139)。

◦ 支持两种调度策略:

◦ SCHED_FIFO:先进先出,同优先级任务按队列顺序执行,无时间片。

◦ SCHED_RR:时间片轮转,同优先级任务分配固定时间片(如10ms),超时后重新入队。

• 调度器入口:
通过pick_next_task()函数优先选择实时调度类中的高优先级任务,仅当实时队列空时才调度CFS任务。

2. 优先级继承与死锁避免

• 优先级继承协议(Priority Inheritance Protocol):
当低优先级任务(T1)持有高优先级任务(T2)所需的资源(如rt_mutex)时,临时将T1的优先级提升至T2的优先级,直至释放资源。

◦ 实现机制:通过rt_mutex结构体中的owner和wait_list跟踪阻塞链,内核在任务阻塞时自动调整优先级。

• 死锁检测:
实时调度器结合**等待图(Wait-for Graph)**检测任务间资源循环等待,避免实时任务因死锁永久阻塞。

3. 任务切换优化

• 上下文切换延迟:
实时任务切换(context switch)的核心优化点:

◦ 减少寄存器保存/恢复量:仅保存必要的寄存器(如通用寄存器、程序计数器),浮点寄存器等非必需状态可延迟保存(如使用lazy context切换)。

◦ CPU缓存亲和性:通过task_setAffinity()将实时任务绑定到特定CPU核心,避免跨核迁移导致的缓存失效。

• 调度器锁优化:
实时调度类使用**无锁队列(lock-free queue)**管理任务(如基于RCU的链表操作),减少调度器锁竞争带来的延迟。

三、内存管理与实时性

1. 实时内存分配策略

• 静态内存分配:
实时任务通过**POSIX共享内存(shm_open)或内核静态分区(如CMA内存)**预先分配连续物理内存,避免动态分配(malloc)的碎片化和延迟不确定性。

• 内存锁定(mlock):
通过mlock()系统调用将实时任务的地址空间锁定在物理内存中,禁止页面置换,确保访问速度恒定。

• slab分配器优化:
为实时任务单独创建slab缓存(如kmem_cache_create),预分配对象实例,减少运行时动态分配的开销。

2. 实时堆管理

• 分区内存分配(Partitioned Memory Allocation):
将内存划分为多个固定大小的分区,每个分区分配给特定类型的实时对象(如消息队列节点、定时器控制块),避免碎片化。

• 伙伴系统(Buddy System)调整:
禁用内存紧缩(compaction)和透明大页(THP),避免内核后台线程(如kswapd)干扰实时任务的内存访问。

四、中断与时间子系统

1. 中断处理架构

• 中断优先级分层:

◦ 实时中断(如硬实时设备触发)配置为最高硬件中断优先级(IRQ_PRIORITY_FAST),非实时中断(如USB、声卡)设为较低优先级。

◦ 通过request_irq()的flags参数区分实时中断(IRQF_TIMER)和非实时中断(IRQF_SHARED),实时中断处理程序(ISR)需尽可能简短,快速唤醒实时任务处理后续逻辑。

• 中断控制器隔离:
在多核系统中,将实时中断绑定到专用CPU核心(如通过proc/interrupts设置IRQ affinity),避免与非实时中断共享核心导致的抢占延迟。

2. 高精度时间源

• 时钟源选择:

◦ 优先使用**TSC(Time Stamp Counter,时间戳计数器)或HPET(High Precision Event Timer)**作为实时时钟源,提供纳秒级精度。

◦ 禁用传统的PIT(Programmable Interval Timer),因其精度仅为毫秒级。

• 实时定时器实现:

◦ 硬实时任务通过timer_create()创建POSIX定时器,底层依赖内核的**HRtimer(High-Resolution Timer)**子系统,定时器到期时触发实时调度器唤醒任务。

◦ 定时器中断处理程序运行于实时上下文,优先级高于普通中断。

五、实时扩展接口与系统调用

1. POSIX实时标准实现

RT-Linux兼容POSIX.1b(IEEE Std 1003.1b)实时扩展,核心接口包括:

• 实时线程(pthread):
通过pthread_attr_setschedparam()设置任务优先级和调度策略(SCHED_FIFO/SCHED_RR)。

• 同步机制:

◦ 实时信号量(rt_semaphore):基于内核rt_semaphore结构体,支持优先级继承和超时机制。

◦ 消息队列(mq_open):POSIX消息队列,提供带优先级的异步通信,底层使用内核kfifo实现。

• 事件通知(eventfd):
实时任务通过eventfd实现高精度事件触发(如纳秒级唤醒),替代传统poll()的毫秒级轮询。

2. 内核实时系统调用

• 实时任务控制:

◦ sched_setattr():设置任务的实时调度属性(优先级、调度策略)。

◦ sched_getoverrun():查询实时任务是否错过截止时间(用于调试和监控)。

• 内存管理扩展:

◦ mlockall(MCL_CURRENT | MCL_FUTURE):锁定当前及未来分配的内存页。

◦ shm_open():创建共享内存区域,支持实时任务间零拷贝数据传输。

六、性能分析与调试工具

1. 实时性测试工具

• cyclictest:
周期性运行高优先级实时任务,测量任务调度延迟的最大值、最小值和平均值,验证系统是否满足硬实时要求(如最大延迟需小于控制周期的1/5)。
cyclictest -p 99 -n -i 1000 -l 1000000  # 优先级99,周期1ms,运行1e6次
• ftrace实时跟踪:
通过ftrace内核跟踪工具记录实时任务的调度事件(如任务切换、中断触发),分析延迟来源(如内核锁竞争、中断处理耗时)。
echo function_graph > current_tracer
echo sched_switch >> set_ftrace_filter
2. 内核调试参数

• 实时调度统计:
通过/proc/sched_debug查看实时任务的调度记录,包括任务状态、等待时间、上下文切换次数等。

• 锁竞争分析:
启用CONFIG_DEBUG_RT_MUTEXES内核配置,通过dmesg日志输出rt_mutex的竞争事件,定位实时任务阻塞原因。

七、系统配置与优化实践

1. 内核编译选项

• 必选配置:
CONFIG_PREEMPT_RT=y          # 启用PREEMPT_RT实时补丁
CONFIG_RT_GROUP_SCHED=y      # 支持实时任务组调度(如为实时任务分配独立CPU资源)
CONFIG_HIGH_RES_TIMERS=y     # 高精度定时器
CONFIG_NO_HZ_FULL=y          # 全动态 tickless 内核,避免周期性时钟中断干扰
CONFIG_SMP=y                 # 多核支持(实时任务需绑定到特定核心)
• 禁用配置:
CONFIG_SWAP=n                # 关闭内存交换
CONFIG_DEBUG_KERNEL=n        # 禁用调试功能(减少内核额外开销)
CONFIG_IPV6=n                 # 可选禁用非必需子系统
2. 实时任务部署策略

• CPU核心隔离:
通过isolcpus=X内核参数将指定CPU核心(如core 0)隔离,仅运行实时任务,避免被Linux调度器分配给普通进程。

• 资源限制:
使用**cgroups(Control Groups)**为实时任务组分配独占CPU时间片(如cpu.cfs_quota_us=100000),限制非实时任务对资源的抢占。
echo 1 > /sys/fs/cgroup/cpu/rt_tasks/cpu.shares  # 为实时任务组分配更高CPU权重
八、与专用RTOS的技术对比
维度 RT-Linux(PREEMPT_RT) VxWorks(微内核RTOS) 
内核架构 单内核(通用+实时混合) 微内核(内核仅包含调度、内存、通信) 
最小延迟 约10-100微秒(取决于内核配置) 1-10微秒(确定性更高) 
内存占用 数MB到数百MB(依赖组件) 数十KB到数MB(高度可裁剪) 
任务切换开销 约1-5微秒 0.1-1微秒 
生态依赖 依赖Linux驱动和软件栈 自有实时驱动和工具链 
适用场景 复杂系统(需网络、文件系统) 极端实时+高可靠性场景(如航空电子) 

总结:RT-Linux的系统级设计哲学

RT-Linux的核心在于通过最小化内核改造实现实时性与Linux生态的兼容:

• 妥协性设计:未追求极致硬实时(如纳秒级确定性),而是在通用系统基础上通过调度器、中断、内存的定向优化,平衡实时性与复杂性。

• 工程导向:利用Linux成熟的驱动模型(如device tree)和调试工具(如perf、ftrace),降低工业场景的开发与维护成本。

• 演进趋势:随着Linux主线逐步接纳PREEMPT_RT特性(如5.10+内核默认启用部分实时补丁),RT-Linux正从“定制化方案”转向“标准Linux的实时模式”,推动实时系统与通用计算的融合。

相关文章:

RT-linux 系统详解

RT-Linux(Real-Time Linux)是一种基于Linux内核的实时操作系统(RTOS),旨在为Linux添加硬实时(Hard Real-Time)能力,使其适用于对时间确定性要求极高的嵌入式系统和工业控制场景。以下…...

开源网络地图可视化第六章学习指南

源代码地址:开源网络地图可视化-配套代码.zip - 蓝奏云 配套书籍:开源网络地图可视化——基于Leaflet的在线地图开发 (杨乃) (Z-Library)(1).pdf - 蓝奏云 3 第六章Leaflet地图动画 3.1 图标动画 3.1.1 沿线运动 沿线运动的动画使用了Leaflet.Geode…...

网页常见水印实现方式

文章目录 1 明水印技术实现1.1 DOM覆盖方案1.2 Canvas动态渲染1.3 CSS伪元素方案2 暗水印技术解析2.1 空域LSB算法2.2 频域傅里叶变换3 防篡改机制设计3.1 MutationObserver防护3.2 Canvas指纹追踪4 前后端实现对比5 攻防博弈深度分析5.1 常见破解手段5.2 进阶防御策略6 选型近…...

# 08_Elastic Stack 从入门到实践(八)---1

08_Elastic Stack 从入门到实践(八)—1 一、Logstash入门之简介以及部署安装 1、Elastic Stack 技术栈示意图 2、Logstash 简介 Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。(存储库当然是Ela…...

携程酒店 phantom-token token1004 分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 部分python代码 搞APP搞的心态有点崩…...

物理:从人体组成角度能否说明基本粒子的差异性以及组织结构的可预设性?

人类的个体差异源于粒子组合的复杂性、环境与随机性的相互作用,而非基本粒子本身的差异性。以下分层次解析: 一、基本粒子的同质性与组合多样性 1. 基本粒子的同一性 标准模型确认:同种类基本粒子(如电子、上夸克)具有完全相同的质量、电荷等属性,不存在个体差异。泡利不…...

前端面试每日三题 - Day 33

这是我为准备前端/全栈开发工程师面试整理的第33天每日三题练习: ✅ 题目1:Deno核心特性深度解析 革命性特性详解 // 安全权限控制(运行时显式授权) deno run --allow-netapi.example.com server.ts // 内置TypeScript支持 …...

JavaScript编译原理

在编程语言的世界中,编译器(如 GCC、TypeScript)和转译器(如 Babel)扮演着至关重要的角色,它们负责将人类可读的代码转换为机器或其他语言可执行的指令。这一过程通常分为四个关键阶段: 1. 词法…...

Nature图形复现—两种快速绘制热图的方法

相信大家在科研过程中,会遇到热图,有时候会觉得热图理解起来比较困难,或者觉得绘制热图也比较困难。本期教程我们来深入了解热图、绘制热图。 热图是一种通过颜色深浅或色阶变化来直观展示数据分布、密度或数值大小的可视化工具。它在多个领域…...

MySQL数据库——视图

目录 一、视图是什么? 二、特点 三、创建视图 四.查询视图 五.更新视图 六.视图的作用 总结 一、视图是什么? 视图是从一个或多个表中导出的虚拟表,它本身不存储数据,而是基于 SQL 查询的结果集。 二、特点 1.虚拟性&#xff1…...

标贝科技:大模型领域数据标注的重要性与标注类型分享

当前,大模型作为人工智能领域的前沿技术,其强大的泛化能力和复杂任务处理能力,依赖于海量数据的训练。而数据标注,作为连接原始数据与大模型训练的关键桥梁,在这一过程中发挥着举足轻重的作用。​ 大模型的训练依赖海…...

MYSQL备份恢复知识:第一章:备份操作举例

1. 备份工具 MySQL数据库的备份方式有两大类:一是物理备份,它对数据文件和日志进行整体备份;二是逻辑备份,通过DUMP工具将数据导出。具体的方法有以下几种: • 物理备份,MEB工具,是商用版本推荐…...

VS Code怎么设置python SDK路径

一、通过命令面板快速切换(推荐方法) 打开命令面板 • 快捷键:CtrlShiftP(Windows/Linux)或 CmdShiftP(macOS) • 输入命令:Python: Select Interpreter,回车后显示所有检…...

[经验总结]删除gitlab仓库分支报错:错误:无法推送一些引用到“http:”

问题描述 删除gitlab远程仓库报错。 [wingasowingaso release]$ git push gitlab --delete release remote: GitLab: You can only delete protected branches using the web interface. To http://x.x.x.x/gitlab/test.git! [remote rejected] release (pre-receive hoo…...

虹科干货 | CAN XL安全实践:深度防御下的密钥协商优化

摘要 随着汽车以太网的兴起和车载通信系统数量的增加,网络整合成为控制复杂性和成本的关键。当前架构呈现明确分层:以太网(100/1000Mbit/s)支撑信息娱乐、ADAS等高带宽应用,而CAN/CAN FD(0.5-5Mbit/s&#…...

Linux干货(一)

前言 从B站黑马程序员Linux课程摘选的学习干货,新手友好!若有侵权,会第一时间处理。 1.Linux目录结构 1.Linux操作系统的目录结构 Windows系统可以拥有多个盘符,如C盘、D盘、E盘 Linux没有盘符这个概念,只有一个根…...

Scala和Go差异

Scala和Go(又称Golang)是两种现代编程语言,各自具有独特的特性和设计哲学。 尽管它们都可以用于构建高性能、可扩展的应用程序,但在许多方面存在显著差异。 Scala和Go的详细比较,涵盖它们的异同点: 1. 语…...

PNG图片转icon图标Python脚本(简易版) - 随笔

摘要 在网站开发或应用程序设计中,常需将高品质PNG图像转换为ICO格式图标。本文提供一份高效Python解决方案,利用Pillow库实现透明背景完美保留的格式转换。 源码示例 from PIL import Imagedef convert_png_to_ico(png_path, ico_path, size):"…...

C语言中的宏

1.防止头文件重复包含 1.#pragma once #pragma once 是一个编译器指令,用于防止头文件被重复包含。它的核心作用是通过简单语法替代传统的头文件保护宏(#ifndef/#define/#endif),提升代码简洁性和可维护性。 作用详解 防止重复…...

飞拍技术介绍

运动控制探针功能详细介绍 运动控制探针功能详细介绍(CODESYS+SV63N伺服)_伺服探针功能-CSDN博客文章浏览阅读683次。文章浏览阅读1.2k次。本文详细介绍了如何使用汇川AM400PLC通过EtherCAT总线与禾川X3E伺服进行通信。包括XML硬件描述文件的下载与安装,EtherCAT总线的启用…...

Qt进阶开发:QTcpSocket的详解

文章目录 一、QTcpSocket 简介二、常用方法的介绍和使用三、常用的信号函数一、QTcpSocket 简介 QTcpSocket 是 Qt 网络模块中用于实现基于 TCP 协议的客户端通信的类。它提供了一个面向流的接口,允许程序通过套接字连接到远程主机,发送和接收数据。 所属模块:QtNetwork用于…...

React中的状态管理Dva总结

在 React 开发中,随着应用的复杂度增加,如何高效地管理应用状态成为了一个非常重要的问题。为了解决这一问题,很多开发者选择了 Redux,然而 Redux 的学习曲线较陡,且需要配置较多的样板代码。为此,Ant Desi…...

PyTorch中的nn.Embedding应用详解

PyTorch 文章目录 PyTorch前言一、nn.Embedding的基本原理二、nn.Embedding的实际应用简单的例子自然语言处理任务 前言 在深度学习中,词嵌入(Word Embedding)是一种常见的技术,用于将离散的词汇或符号映射到连续的向量空间。这种…...

Python Django基于模板的药品名称识别系统【附源码、文档说明】

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...

深度学习---获取模型中间层输出的意义

一、什么是 Hook(钩子函数)? 在 PyTorch 中,Hook 是一种机制,允许我们在模型的前向传播或反向传播过程中,插入自定义的函数,用来观察或修改中间数据。 最常用的 hook 是 forward hook&#xf…...

【软件测试】第一章·软件测试概述

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件测试与软件项目管理_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录…...

格雷希尔G10和G15系列自动化快速密封连接器,适用于哪些管件的密封,以及它们相关的特性有哪些?

格雷希尔G10和G15系列快速密封连接器,用于自动化和半自动化过程中的外部或内部密封,通过使用气压驱动来挤压内部的密封圈,创造一个适用于各种管件的无泄漏密封连接,连接器内部的弹性密封圈可以提供其他产品不能提供的卓越密封性能…...

从零实现一个高并发内存池 - 1

C 高性能内存池解析 在 C 开发中,内存管理一直是影响程序性能的关键因素之一。传统的内存分配方式如 malloc 和 free 在高并发场景下往往存在性能瓶颈。为了解决这一问题,很多优秀的内存池方案应运而生,其中 Google 的 tcmalloc(T…...

在 STM32 上使用 register 关键字

在 STM32 上使用 register 关键字时,有一些特别需要注意的事项。虽然 register 是 C 语言中的一个标准关键字,它用于提示编译器将变量尽可能存放在寄存器中,以加速访问,但在 STM32 这样的嵌入式平台上,还是需要考虑几个…...

【入门】纸盒的最大体积是多少?

描述 在一张尺寸为 n * n 厘米的正方形硬纸板的四个角上,分别裁剪掉一个 m * m 厘米的小正方形,就可以做成一个无盖纸盒,请问这个无盖纸盒的最大体积是多少? 立方体的体积 v 底面积 * 高) 比如: n 5 &am…...

漏桶算法的实际应用案例:数据库批量写入流量控制

场景描述 假设有一个物联网平台,需要实时接收成千上万台设备上报的数据(如温度、湿度等),并将数据存入数据库。设备可能在某些时刻集中发送数据(例如定时批量上报),直接写入数据库可能导致以下问…...

c++函数参数列表后面的const的作用(常量成员函数)

c函数参数列表后面的const的作用 class Person { public://普通构造函数Person():age(0){}//常量成员函数void read_age() const {age100; //错误&#xff01;常量成员函数不允许修改成员变量&#xff08;除非成员变量用mutable修饰&#xff09;std::cout << "age:…...

Java的While循环写的出票简单程序

import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner in new Scanner(System.in);int balance 0;while(true){System.out.print("请投币: ");int amount in.nextInt();balance balance amount;if(balance >10 )…...

时间序列基础【学习记录】

文章目录 1. 时间序列中的标签2. 时间序列中的窗口分割器2.1.概述2.2.窗口分割器demo 3. 时间序列的数据加载器3.1.概述3.2.时间序列的dataset3.3.Tensor类型3.4.测试完整流程demo 1. 时间序列中的标签 在目标检测领域的数据集中的图像会有一个标签**(标记一个物体是猫还是狗或…...

Andorid之TabLayout+ViewPager

文章目录 前言一、效果图二、使用步骤1.主xml布局2.activity代码3.MyTaskFragment代码4.MyTaskFragment的xml布局5.Adapter代码6.item布局 总结 前言 TabLayoutViewPager功能需求已经是常见功能了&#xff0c;我就不多解释了&#xff0c;需要的自取。 一、效果图 二、使用步骤…...

光谱相机的光电信号转换

光谱相机的光电信号转换是将分光后的光学信息转化为可处理的数字信号的核心环节&#xff0c;具体分为以下关键步骤&#xff1a; 一、分光后光信号接收与光电转换 ‌分光元件作用‌ 光栅/棱镜/滤光片等分光元件将入射光分解为不同波长单色光&#xff0c;投射至探测器阵列表面…...

MySQL历史版本下载及安装配置教程

1、访问官网下载mysql https://dev.mysql.com/downloads/mysql/ 2、找到历史版本 我这里的版本是最新的mysql8.0.42 下载完成之后,将压缩包进行解压 3、环境变量 在系统变量中找到Path,点击进入编辑&#xff0c;然后依次点击确定退出即可 注意&#xff01;&#xff01;&am…...

【ArcGIS】根据shp范围生成系列等距点:范围外等距点+渔网点(Python全代码)

【ArcGIS】根据shp范围生成系列等距点 目标1&#xff1a;生成边界外一定范围、并且等间距分布的点&#x1f4c1; 所需数据&#xff1a;操作步骤-ArcGIS代码处理-Python 目标2&#xff1a;生成等距渔网点&#x1f4c1; 所需数据&#xff1a;代码处理-Python 参考 目标1&#xff…...

基于FPGA的视频接口之千兆网口(六GigE纯逻辑)

协议简介 相信大家只有对于GigE有所了解的读者,才能找到这篇文章,所谓的GigE协议包含两个方面分别是视频协议(GVSP)和控制协议(GVCP)。 在本文我们重点讲的是基于FPGA纯逻辑实现阉割版的GigE协议,也就是说在很多视频传输过中,只用到了视频流传输,并没有控制方面的要求…...

android 权限配置

在AOSP 14的ROM定制中&#xff0c;<exceptions>和<privapp-permissions>是用于管理特权应用权限的两种不同机制&#xff0c;主要区别在于作用范围、配置方式和权限授予逻辑。以下是具体分析&#xff1a; 1. <privapp-permissions> 标签 作用&#xff1a; 用…...

广告推荐算法入门 day1 --项目选型

文章目录 0 前言1 广告推荐的基本流程2 场景和baseline初步框定2.1召回场景2.2排场景2.3精排场景 3 一个入门小例子感受--淘宝用户购物行为数据可视化分析3.1 数据集介绍3.2 数据分析目标1.时间维度2.产品维度3.行为维度4.用户维度 4 基础项目选型4.1场景 推荐资料后记 0 前言 …...

【Qt】之音视频编程2:QtAV的使用篇

QtAV 基本播放控制功能实现&#xff08;C & QML&#xff09; QtAV 提供了完整的播放控制 API&#xff0c;支持 播放、暂停、停止、快进快退、截屏 等功能。以下是具体实现方法&#xff1a; 1. C 控制方式 基本播放控制 #include <QtAV> #include <QtAV/AVPlaye…...

技术视角下的TikTok店铺运营:从0到1的5个关键点

在当今数字化时代&#xff0c;TikTok Shop作为新兴的电商平台&#xff0c;为众多商家带来了新的机遇。从技术运营的角度来看&#xff0c;以下5个关键点是每个TikTok店铺运营者都需要注意的&#xff1a; 1、规则先行&#xff0c;技术助力合规开店 地区选择&#xff1a;技术分析显…...

机器学习 --- 特征工程(一)

机器学习 — 特征工程&#xff08;一&#xff09; 文章目录 机器学习 --- 特征工程&#xff08;一&#xff09;一&#xff0c;特征工程概念二&#xff0c;特征工程API三&#xff0c;DictVectorizer 字典列表特征提取四&#xff0c;CountVectorizer 文本特征提取4.1 API4.2 英文…...

cocos creator 3.8 下的 2D 改动

在B站找到的系统性cocos视频教程,纯2D开发入门,链接如下: zzehz黑马程序员6天实战游戏开发微信小程序&#xff08;Cocos2d的升级版 CocosCreator JavaScript&#xff09;_哔哩哔哩_bilibili黑马程序员6天实战游戏开发微信小程序&#xff08;Cocos2d的升级版 CocosCreator Ja…...

2025-05-13 表征学习

表征学习 表征学习&#xff08;Representation Learning&#xff09;&#xff0c;又称特征学习&#xff0c;是机器学习领域中的一类技术&#xff0c;旨在自动的从原始数据中学习处有效的特征表示&#xff0c;使得后续的机器学习任务&#xff08;分类、聚类、预测&#xff09;能…...

【WebApi】YiFeiWebApi接口安装说明

YiFeiWebApi接口安装说明 一、 数据库配置文件修改二、 IIS环境配置(建议IIS7.0)三、 安装.NET 8.0 运行时四、 IIS配置站点五、 发布系统六、 测试接口七、测试服务器站点接口八、其他问题查看日志解决九、ApiPost项目文档 一、 数据库配置文件修改 说明&#xff1a; DSCSYSSq…...

亚马逊云科技:开启数字化转型的无限可能

在数字技术蓬勃发展的今天&#xff0c;云计算早已突破单纯技术工具的范畴&#xff0c;成为驱动企业创新、引领行业变革的核心力量。亚马逊云科技凭借前瞻性的战略布局与持续的技术深耕&#xff0c;在全球云计算领域树立起行业标杆&#xff0c;为企业和个人用户提供全方位、高品…...

爬虫请求频率应控制在多少合适?

爬虫请求频率的控制是一个非常重要的问题&#xff0c;它不仅关系到爬虫的效率&#xff0c;还涉及到对目标网站服务器的影响以及避免被封禁的风险。合理的请求频率需要根据多个因素来综合考虑&#xff0c;以下是一些具体的指导原则和建议&#xff1a; 一、目标网站的政策 查看网…...

Rimworld Mod教程 武器Weapon篇 近战章 第二讲:生物可用的近战来源

本讲分析的是在原版&#xff08;coreall dlc&#xff09;环境下&#xff0c;一个Pawn可以用的Tools的所有来源。 重点要分析的是RimWorld.Pawn_MeleeVerbs下的方法GetUpdatedAvailableVerbsList&#xff0c;我把它贴在下面&#xff1a; public List<VerbEntry> GetUpdat…...