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

ARM内核:嵌入式时代的核心引擎

引言

在当今智能设备无处不在的时代,ARM(Advanced RISC Machines)处理器凭借其高性能、低功耗的特性,成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集(RISC)的典范,ARM核通过独特的架构设计和技术创新,重塑了芯片产业的格局。

本文将从技术特点、工作模式、发展历程等方面,全面解析ARM核的核心竞争力

CPU内核概述

CPU(Central Processing Unit,中央处理器)是计算机或其他电子设备的核心部件,主要负责执行程序指令、处理数据和控制计算机的其他硬件部件。

CPU的主要组成部分

控制单元(Control Unit, CU)控制单元负责从内存中读取指令,并将其解码为一系列控制信号,以指导其他部件完成相应的操作。它还负责管理指令的执行顺序和流程。

算术逻辑单元(Arithmetic Logic Unit, ALU)ALU是CPU的核心部分,负责执行所有算术运算(如加法、减法、乘法、除法)和逻辑运算(如与、或、非、异或)。它的性能直接影响CPU的整体处理能力。

寄存器组(Registers)寄存器是CPU内部的高速存储单元,用于暂存指令、数据和地址。常见的寄存器包括:

  • 状态寄存器(如CPSR、SPSR):存储CPU的状态信息。
  • 程序计数器(PC):存储下一条要执行的指令的地址。
  • 指令寄存器(IR):存储当前正在执行的指令。
  • 通用寄存器(如R0-R15):用于存储用户数据和中间结果。

缓存(Cache)缓存是位于CPU和主内存之间的高速存储器,用于减少CPU访问内存的延迟。缓存通常分为一级缓存(L1 Cache)和二级缓存(L2 Cache),有些CPU还配备了三级缓存(L3 Cache)。缓存的大小和速度对CPU的性能有重要影响。

总线接口单元(Bus Interface Unit, BIU)BIU负责管理CPU与外部设备(如内存、输入输出设备)之间的数据传输。它通过总线与这些设备通信,确保数据的高效传输。

CPU的分类:

按字长分类

  • 8位微处理器:早期的微处理器,例如Intel 8080,主要用于简单的嵌入式系统。
  • 16位微处理器:例如Intel 8086,是早期个人计算机(如IBM PC)的核心部件。
  • 32位微处理器:例如Intel Pentium系列、ARM Cortex-A系列,广泛应用于现代计算机和移动设备。
  • 64位微处理器:例如Intel Core系列、AMD Ryzen系列、苹果M系列芯片,支持更大的内存寻址空间和更高的性能,是当前主流的处理器架构。

按架构分类

  • CISC(Complex Instruction Set Computer):复杂指令集计算机,指令集庞大且复杂,单条指令可执行多步操作(如内存存取、算术运算、逻辑判断等),直接支持高级语言操作。
  • RISC(Reduced Instruction Set Computer):精简指令集计算机,指令集简洁且长度固定,通过组合简单指令完成复杂任务,强调硬件流水线优化和单周期指令执行。

CPU的主要性能指标

  • 主频(Clock Speed)

主频是指CPU的时钟频率,单位是赫兹(Hz)。主频越高,CPU在单位时间内可以执行的指令数量越多。例如,3.5 GHz的CPU每秒可以执行35亿次时钟周期。

  • 核心数(Cores)

现代CPU通常包含多个核心(多核处理器),每个核心都可以独立执行指令。多核处理器可以提高多任务处理能力和并行计算能力。例如,四核处理器可以同时处理四个任务,而八核处理器可以处理更多任务。

  • 缓存大小(Cache Size)

缓存的大小直接影响CPU访问数据的速度。较大的缓存可以减少CPU访问主内存的次数,从而提高性能。例如,L1缓存通常为几十KB,L2缓存为几百KB到几MB,L3缓存为几MB到几十MB。

  • 功耗(Power Consumption)

CPU的功耗是衡量其能效的重要指标。低功耗的CPU更适合移动设备和嵌入式系统,而高性能的CPU通常功耗较高,适合桌面计算机和服务器。

CPU架构

ARM架构:

ARM架构的特点:

  • 指令简单高效:ARM架构采用精简指令集,指令数量少且简单,大多数指令在一个时钟周期内完成,提高了处理器的执行效率。
  • 低功耗设计:ARM架构注重低功耗,特别适合移动设备、嵌入式系统和物联网设备,能够在较低功耗下提供较高的计算性能。
  • 高集成度:ARM芯片通常采用SoC(System on Chip)设计,将CPU、GPU、通信模块、存储控制器等多种功能集成在同一芯片上,降低了成本和设备尺寸。

ARM架构的形成:

ARM架构最初由Acorn计算机公司在1985年开发,用于其个人计算机。1990年,Acorn与苹果和VLSI Technology合作成立了ARM公司(Advanced RISC Machines)。1991年,ARM公司推出了第一款商业化的ARM架构处理器——ARM6。

发展:

  • Cortex系列:2005年,ARM公司推出了Cortex系列处理器,分为A、R和M三个系列,分别针对不同的市场:

    • Cortex-A系列:应用程序型处理器,适用于智能手机、平板电脑和服务器。

    • Cortex-R系列:实时型处理器,适用于嵌入式系统和实时应用。

    • Cortex-M系列:微控制器型处理器,适用于微控制器和物联网设备。

  • ARMv8架构:2011年,ARM公司推出了ARMv8架构,支持64位计算,进一步提升了性能和能效。

  • ARMv9架构:2021年,ARM公司推出了ARMv9架构,支持人工智能、机器学习和安全特性,为未来的高性能计算和物联网应用奠定了基础。

ARM公司不直接生产芯片,而是将其架构授权给其他公司,允许它们在ARM架构基础上设计和制造处理器。这种模式使得ARM架构能够快速扩展到多个领域,并形成了丰富的生态系统。

SoC(System on Chip)

SOC(System on Chip,片上系统)是一种超大规模集成电路,它将整个信息处理系统集成到一块芯片上。简单来说,SOC芯片是在中央处理器(CPU)的基础上,扩展了多种专用接口和功能模块,形成了一个完整的系统级芯片。它相当于一个微型的“计算机”,能够完成复杂的任务和功能。
SOC(System on Chip)是现代电子设备的核心部件,它将多个功能模块集成到一块芯片上,实现了高性能、低功耗、小尺寸和高集成度的设计。

MIPS架构

MIPS(Million Instructions Per Second)是由美国MIPS技术公司开发的RISC(精简指令集)架构,专注于高性能32/64位处理器设计,强调指令效率与低功耗。

技术特点:
  • 高效流水线:支持5级流水线,优化指令吞吐量。
  • 可扩展性:提供MIPS32(32位)与MIPS64(64位)版本,适应不同计算需求。
  • 多线程支持:部分型号支持多线程技术(如MIPS MT),提升并行处理能力。

IP授权模式:与ARM类似,授权处理器内核设计给第三方厂商(如龙芯、联发科)。

PowerPC架构

PowerPC(Performance Optimization With Enhanced RISC)是IBM联合苹果、摩托罗拉开发的RISC架构,源自IBM POWER系列,强调高性能与实时性。

技术特点
  • 超标量设计:支持多指令并行发射,提升计算效率。
  • 高可靠性:内置ECC校验与冗余设计,适用于关键任务场景。
  • 灵活扩展:支持AltiVec向量指令集(类似SIMD),加速多媒体处理。
代表厂商
  • IBM:Power系列处理器主导高端服务器市场。
  • 恩智浦(NXP):QorIQ T系列用于汽车网络与网关控制器。

Intel x86架构

x86是Intel主导的CISC(复杂指令集)架构,以高复杂度指令与向后兼容性著称,长期统治PC与服务器市场。

技术特点
  • 复杂指令集:单指令可完成内存操作、算术运算等多步任务。
  • 微指令转换:现代x86处理器将CISC指令拆解为类RISC微指令(μops),提升执行效率。
  • 多核与超线程:支持多核并行与超线程技术(如Intel Hyper-Threading)。

RISC-V架构

RISC-V是加州大学伯克利分校开发的第五代开源RISC架构,以模块化设计打破专利壁垒,允许自由定制与免授权费使用。

技术特点
  • 模块化指令集:基础指令集(RV32I/RV64I) + 可选扩展(如浮点、向量、加密)。
  • 精简高效:固定长度指令(32/64位)与单周期执行,适合低功耗场景。
  • 开放生态:全球社区协作推动工具链(GCC、LLVM)与OS(Linux、FreeRTOS)适配。
代表厂商

平头哥半导体:玄铁系列芯片赋能阿里云IoT与AI基础设施。

SiFive:提供RISC-V IP核定制服务,客户包括NASA与SK海力士。

ARM架构版本及特点 

内核版本

  • ARMv1: 最早的ARM架构版本,主要用于简单的32位设备。

  • ARMv2: 增加了乘法指令,改进了性能。

  • ARMv3: 支持32位内存地址空间,增加了长乘法指令。

  • ARMv4: 引入了Thumb指令集,优化了代码密度。

  • ARMv5: 增加了Jazelle DBX技术,支持Java字节码执行。

  • ARMv6: 支持SIMD指令,改进了多媒体处理能力。

  • ARMv7: 引入了TrustZone技术,增强了安全性。

  • ARMv8: 支持64位计算,提升了性能和内存寻址能力。

  • ARMv9: 最新版本,增强了安全性和AI处理能力。

ARMv7-A/R:

  • TrustZone 安全扩展:一种安全技术,提供了硬件级别的安全隔离,用于保护敏感数据和代码,支持安全支付和设备管理等应用。

  • VFPv3/v4 浮点运算:向量浮点处理器的第三版和第四版,提供了更高性能的浮点运算能力。

  • NEON SIMD 加速:NEON(New Embedded Operating Narrow)是ARM的SIMD扩展,用于加速多媒体和信号处理任务。

  • A32/T32 指令集:A32是ARM的32位指令集,T32是Thumb-2指令集的32位版本,两者都旨在提高代码密度和性能。

  • Scalar FP (SP/DP):标量浮点运算,支持单精度(SP)和双精度(DP)浮点数。

ARMv8-A:

  • AArch64 (64位支持):ARM的64位架构,提供了更大的地址空间和更高的性能。

  • A64 指令集:ARMv8-A的64位指令集,支持更复杂的计算任务。

  • Adv SIMD (SP+DP Float):高级SIMD扩展,支持单精度和双精度浮点运算,用于高性能计算。

  • 虚拟化扩展 (Hyp模式):提供了虚拟化支持,允许在单个物理处理器上运行多个操作系统实例。

  • CRYPTO 加密指令集:提供了硬件加密和解密指令,增强了数据安全性。

ARMv9:

  • SVE2 向量扩展:可扩展向量扩展(Scalable Vector Extensions)的第二版,提供了更高性能的向量处理能力,适用于高性能计算和机器学习。

  • 机密计算架构:增强了安全性,提供了保护数据和代码免受未授权访问的机制。

  • 增强AI加速:针对人工智能和机器学习工作负载进行了优化,提高了AI应用的性能。

Thumb技术

  • Thumb模式ARM处理器的一种16位指令模式,旨在提高编码密度,减少内存占用,特别是在内存带宽有限的嵌入式系统中。ARM指令集是32bit的指令集,在Thumb模式执行的指令集是16bit的Thumb指令集不是完整的指令集,它是ARM指令集的子集。但是Thumb 指令具有更高的代码密度,即占用存储空间小,仅为ARM代码规格的65%,但其性能却下降的很少。所 以,Thumb指令集使ARM处理器能应用到有限的存储带宽,并且,代码密度要求很高的嵌入式系统中去。

  • ARM7TDMI:首款支持Thumb技术的处理器。

  • ARM9及后续系列:包括XScale,都集成了Thumb技术。

Thumb-2技术

  • ARM1156核心:Thumb-2技术首次出现,扩展了Thumb指令集,增加了32位指令,提高了性能。

  • 目标:结合Thumb的编码密度和ARM指令集的性能。

Jazelle技术

Jazelle是ARM体系结构的一种相关技术,用于在处理器指令层次对JAVA加速。ARM的Jazelle技术使 Java加速得到比基于软件的Java虚拟机(JVM)高得多的性能,和同等的非Java加速核相比功耗降低80%。
  • ARM926EJ-S:首款支持Jazelle技术的处理器,以字母'J'标示。

NEON (Advanced SIMD)技术

SIMD,即 single instruction multiple data,单指令流多数据流,也就是说一次运算指令可以执行多个数据流,从而提高程序的运算速度,实质是通过 数据并行 来提高执行效率
  • 进阶SIMD扩展集:提供64和128位的SIMD指令集,加速多媒体和信号处理。

ARMv7之后,将SIMD升级为 NEON技术 相当于扩展了浮点运算向量表 有一个VFS的二维向量表,将数 据存放到这个表中,cpu可以一次性取某个区域进行执行,NEON就是SIMD的升级 相当于将上面SIMD执 行指令的表格长度与宽度进行扩展,提升了数据集的压缩算法。 NENO可以进行指令扩展来实现相关功 能,但我们一般不使用,如果做一些GPU相关的工作就需要利用NENO的浮点运算特性。 可用于加速多 媒体和信号处理算法(如视频编码/解码)、2D/3D图形、游戏、音频和语音处理、图像处理技术、电话 和声音合成,其性能至少为ARMv5的3倍,为ARMv6 SIMD性能的两倍 在SIMD的基础上提升了两倍效 率 所以运算速度的加快不是单纯的提升CPU的频率 通过这两个技术提升指令执行的方式,还有其他的 方法(比如增加二级缓存)

 VFP (Vector Floating-point Coprocessor for ARM)技术

ARM架构中用于增强浮点运算能力的协处理器。它提供单精度和双精度浮点运算能力,完全兼容ANSI/IEEE Std 754-1985二进制浮点算术标准。VFP技术主要应用于需要浮点运算的领域,如PDA、智能手机、语音压缩与解压、3D图像处理、数字音效、打印机、机顶盒和汽车应用等。

  • SIMD支持:有助于降低编码大小并提高效率。

  • VFPv2是针对ARMv5TE、ARMv5TEJ和ARMv6体系结构中ARM指令集的可选扩展。VFPv3则是对ARMv7-A和ARMv7-R配置文件中ARM、Thumb和ThumbEE指令集的可选扩展,实现了32个或16个双字长寄存器。VFPv4或VFPv4-D32在Cortex-A12和A15 ARMv7处理器上实现,并且Cortex-A7可选地在具有Neon的FPU情况下拥有VFPv4-D32。VFPv4增加了半精度支持作为存储格式以及融合乘加指令。

安全性扩展TrustZone

TrustZone是ARM针对消费电子设备设计的一种硬件架构,其目的是为消费电子产品构建一个安全框架来抵御各种可能的攻击。
TrustZone在概念上将SoC的硬件和软件资源划分为安全(Secure World)和非安全(Normal World)两个世界,所有需要保密的操作在安全世界执行(如指纹识别、密码处理、数据加解密、安全认证等)其余操作在非安全世界执行(如用户操作系统、各种应用程序等)。

ARM核工作模式 

Privilege level(权限级别) 

 安全状态(Secure State)
  • 特权级别划分

    • PL0:仅 User模式(运行非特权应用程序)。

    • PL1:除User模式外的 所有其他模式(如FIQ、IRQ、Supervisor等)

非安全状态(Non-secure State)
  • 特权级别划分

    • PL0User模式(非特权应用程序)。

    • PL1除User和Hyp外的所有模式(如FIQ、IRQ、Supervisor等)。

    • PL2Hyp模式(需支持虚拟化扩展,Hypervisor专用)。

 ARM 处理器核的工作模式(Processor Modes)是其架构的重要特性之一,用于支持不同的权限级别和异常处理机制。

FIQ(快速中断模式)

IRQ(普通中断模式)

Supervisor(管理模式)

Monitor(监视器模式)

Abort(中止模式)

Hyp(虚拟机管理模式)

With Security Extensions(需要安全扩展)

With Virtualization Extensions(需要虚拟化扩展) 

正常模式(Normal Modes)
  • 用途:处理常规任务或中断。

    • User模式(usr)

      • 特点

        • 运行应用程序的非特权代码,无法直接访问硬件资源。

        • 通过系统调用(SVC指令)切换到特权模式(如Supervisor模式)。

        • 支持安全(Secure)和非安全(Non-secure)状态。

    • System模式(sys)

    • 特点

      • 使用与User模式相同的寄存器组,但运行特权级代码(如操作系统内核任务)。

      • 适用于需要低权限但需访问特权资源的场景。

 异常模式(Exception Modes)
  • 用途:处理硬件异常、中断或安全扩展功能。

    • FIQ模式(fiq)

      • 特点

        • 处理高优先级中断(Fast Interrupt Request),响应速度最快。

        • 拥有专用寄存器(R8-R14),减少上下文保存开销。

        • 适用于实时性要求高的外设(如DMA控制器)。

    • IRQ模式(irq)

      • 特点

        • 处理普通中断(Interrupt Request),优先级低于FIQ。

        • 自动保存部分寄存器状态,便于快速恢复执行流。

    • Supervisor模式(svc)

      • 特点

        • 默认的复位启动模式,处理系统调用(SVC指令)。

        • 操作系统内核的核心运行环境,可访问所有系统资源。

    • Abort模式(abt)

      • 特点

        • 处理内存访问异常(如缺页、非法地址访问)。

        • 保存异常地址和状态寄存器(如FAR、IFSR/DFSR)。

  • Undefined模式(und)

    • 特点

      • 处理未定义指令异常(如执行未知操作码)。

      • 通常用于软件仿真或动态指令扩展。

  • Monitor模式(mon)

    • 特点

      • 管理安全与非安全状态的切换(通过SMC指令触发)。

      • 隔离敏感操作(如加密、密钥管理)与普通应用程序。

  • Hyp模式(hyp)

    • 特点

      • 虚拟机监控程序(Hypervisor)的专用模式。

      • 管理虚拟机的创建、调度和资源隔离。

(1)User mode
An operating system runs applications in User mode to restrict the use of system resources.
Software executing in User mode executes at PL0. Execution in User mode is sometimes described as unprivileged execution.
操作系统在用户模式下运行应用程序以限制系统资源的使用。在用户模式下执行的软件在PL0执行。在用户模式下执行有时被描述为非特权执行。
Application programs normally execute in User mode, and any program executed in User mode:
Makes only unprivileged accesses to system resources, meaning it cannot access protected system resources.
Makes only unprivileged access to memory.
Cannot change mode except by causing an exception,
应用程序通常在用户模式下执行,而在用户模式下执行的任何程序:
仅对系统资源进行非特权访问,这意味着它无法访问受保护的系统资源。
仅对内存进行非特权访问。
除非引起异常,否则无法更改模式,
用户模式是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。
(2)System mode
Software executing in System mode executes at PL1. System mode has the same registers available as User mode, and is not entered by any exception.
在系统模式下执行的软件在PL1上执行。系统模式具有与用户模式相同的寄存器,并且不能通过任何异常进入系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
(3)Supervisor mode
Supervisor mode is the default mode to which a Supervisor Call exception is taken. Executing a SVC (Supervisor Call) instruction generates a Supervisor Call exception, that is taken to Supervisor mode. A processor enters Supervisor mode on Reset.
Supervisor模式是采取Supervisor Call异常的默认模式。执行SVC(Supervisor Call)指令会生成 Supervisor Call异常,该异常被带到Supervisor模式。处理器在复位时进入Supervisor模式。
管理模式是CPU上电后默认模式,因此在该模式下主要用来做系统的初始化,软中断处理也在该模式下。当用户模式下的用户程序请求使用硬件资源时,通过软件中断进入该模式。
(4)Abort mode
Abort mode is the default mode to which a Data Abort exception or Prefetch Abort exception is taken.
中止模式是数据中止异常或预取中止异常的默认模式。
中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。
(5)Undefined mode
Undefined mode is the default mode to which an instruction-related exception, including any attempt to execute an UNDEFINED instruction, is taken.
未定义模式是与指令相关的异常(包括任何执行未定义指令的尝试)采取的默认模式。
(6)FIQ mode
FIQ mode is the default mode to which an FIQ interrupt is taken.
FIQ模式是采用FIQ中断的默认模式。
快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。
(7)IRQ mode
IRQ mode is the default mode to which an IRQ interrupt is taken.
IRQ模式是采用IRQ中断的默认模式。
一般中断模式也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源。
(8)Hyp mode
Hyp mode is the Non-secure PL2 mode, implemented as part of the Virtualization Extensions. Hyp mode is entered on taking an exception from Non-secure state that must be taken to PL2
Hyp模式是作为虚拟化扩展的一部分实现的非安全PL2模式。Hyp模式在从非安全状态获取必须带到PL2的异常时进入
The Hypervisor Call exception and Hyp Trap exception are exceptions that are implemented as part of the Virtualization Extensions, and that are always taken in Hyp mode.
Hypervisor Call异常和Hyp Trap异常是作为虚拟化扩展的一部分实现的异常,并且始终在Hyp模式下执行。
In a Non-secure PL1 mode, executing a HVC (Hypervisor Call) instruction generates a Hypervisor Call exception.
在非安全PL1模式下,执行HVC(Hypervisor Call)指令会生成Hypervisor Call异常
(9)Monitor mode
Monitor mode is the mode to which a Secure Monitor Call exception is taken. In a PL1 mode, executing an SMC (Secure Monitor Call) instruction generates a Secure Monitor Call exception.
监视器模式是采用安全监视器调用异常的模式。在PL1模式下,执行SMC(安全监视器调用)指令会生成安全监视器调用异常。
Monitor mode is a Secure mode, meaning it is always in the Secure state, regardless of the value of the SCR(secure config register).NS bit. Software running in Monitor mode has access to both the Secure and Non-secure copies of system registers. This means Monitor mode provides the normal method of changing between the Secure and Non-secure security states.
监视器模式是一种安全模式,这意味着无论SCR.NS位的值如何,它都始终处于安全状态。在监视器模式下运行的软件可以访问系统寄存器的安全和非安全副本。这意味着监视器模式提供了在安全和非安全安全状态之间更改的正常方法。

ARM核寄存器介绍

通用寄存器

ARM处理器通常有16个32位的通用寄存器,编号从R0到R15

  • R0-R10:普通的通用寄存器,用于存放用户的数据。在函数调用和日常计算中使用。

  • R11 (fp: frame pointer):帧指针寄存器,用于记录当前函数调用的栈帧的起始地址。在访问局部变量和执行函数调用时非常有用。

  • R12 (ip: intra-procedure-call scratch register):在函数内部调用过程中用作临时寄存器,可以用来临时存储数据,如保存sp(栈指针)。

  • R13 (sp: stack pointer):栈指针寄存器,指向当前栈顶的位置。栈是用于存储函数调用信息、局部变量和临时数据的数据结构。

  • R14 (lr: link register):链接寄存器,在函数调用时用来保存返回地址。当一个函数被调用时,调用该函数的指令地址会被存储在lr中,以便在函数执行完毕后能够返回到正确的位置继续执行。

  • R15 (pc: program counter):程序计数器,指向CPU接下来要执行的指令的地址。每次指令执行完毕后,pc会自动更新为下一条指令的地址。

程序状态寄存器

  • CPSR(Current Program Status Register)  当前程序状态(模式、中断使能等)

CPSR是一个32位的寄存器,用于存储处理器的状态信息和控制信息

N、Z、C、V,最高4位称为条件码标志。ARM的大多数指令可以条件执行的,即通过检测这些条件码标志来决定程序指令如何执行。

各个条件码的含义如下:

N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0。

Z:如果结果为0,则Z=1;如果结果为非零,则Z=0。

C:其设置分一下几种情况:

               对于加法指令(包含比较指令CMN),如果产生进位,则C=1;否则C=0。

               对于减法指令(包括比较指令CMP),如果产生借位,则C=0;否则C=1。

               对于有移位操作的非法指令,C为移位操作中最后移出位的值。

               对于其他指令,C通常不变。

V:对于加减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则V=1;如果无溢出发生,则V=0;对于其他指令,V通常不发生变化。

  • SPSR(Saved Program Status Register)   异常发生时保存的CPSR值

相关文章:

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代,ARM(Advanced RISC Machines)处理器凭借其高性能、低功耗的特性,成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集(RISC)的典范,ARM核…...

ITS290F Human Computer Interaction

ITS290F Human Computer Interaction & User Experience Design Lab 1. Introduction to CodePen What you’ll learn in this lab: • Understanding CodePen • Creating a front-end page • Using Google form to submit your lab work CodePen is a cloud-based in…...

[Java]继承

1. 什么是继承? 继承是面向对象编程的一种机制,允许一个类(叫做子类)继承另一个类(叫做父类)的属性和方法。也就是说,子类可以“继承”父类的行为(方法)和状态&#xff…...

DeepSeek能下围棋吗?(续)

休息了一下,接着琢磨围棋,其实前面一篇里的规则有个漏洞的,就是邻居关系定义有问题,先回顾一下游戏规则: 游戏规则 定义: 1.数字对,是指两个1到9之间的整数组成的有序集合。可与记为(m,n)&…...

51单片机(STC89C52)开发:点亮一个小灯

软件安装: 安装开发板CH340驱动。 安装KEILC51开发软件:C51V901.exe。 下载软件:PZ-ISP.exe 创建项目: 新建main.c 将main.c加入至项目中: main.c:点亮一个小灯 #include "reg52.h"sbit LED1P2^0; //P2的…...

【数据结构】并查集

1.基本操作 void makeset(){ for(int i1;i<n;i)fa[i]i; }int findd(int x){ while(fa[x]!x)xfa[x]fa[fa[x]]; return x; }void unionn(int x,int y){ int zxfindd(x);int zyfindd(y); if(zx!zy)fa[zy]zx; }2.种类并查集 Parity Game 关押罪犯 [NOIP 2010 提高组] 关押罪…...

基于Rectified Flow FLUX的图像编辑方法 RF-Solver

Diffusion Models专栏文章汇总:入门与实战 前言:现在越来越多的开源模型是基于Rectified Flow,特别是FLUX和HunYuan Video,但是Rectified Flow inversion的性质和之前有所不同,这篇博客解读一下如何使用Rectified Flow对FLUX进行编辑。 目录 RF直接逆向会出现问题 为什R…...

[创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索

关键词&#xff1a; 从系统的角度&#xff0c;麻雀、人体系统、企业系统、软硬件系统、软件系统、通信系统、5G系统是类似的&#xff1a; 都有&#xff1a;内在看不见的规律、外在显性各种现象 都是&#xff1a;输入、处理、输出 都是&#xff1a;静态、要素、组成、结构、组织…...

C语言指针专题三 -- 指针数组

目录 1. 指针数组的核心原理 2. 指针数组与二维数组的区别 3. 编程实例 4. 常见陷阱与防御 5. 总结 1. 指针数组的核心原理 指针数组是一种特殊数组&#xff0c;其所有元素均为指针类型。每个元素存储一个内存地址&#xff0c;可指向不同类型的数据&#xff08;通常指向同…...

Contrastive Imitation Learning

机器人模仿学习中对比解码的一致性采样 摘要 本文中&#xff0c;我们在机器人应用的对比模仿学习中&#xff0c;利用一致性采样来挖掘演示质量中的样本间关系。通过在排序后的演示对比解码过程中&#xff0c;引入相邻样本间的一致性机制&#xff0c;我们旨在改进用于机器人学习…...

Springboot使用AOP时,需不需要引入AspectJ?

Springboot使用AOP时,需不需要引入AspectJ? 在Spring Boot中使用AOP时&#xff0c;是否需要引入AspectJ取决于你选择的具体AOP实现方式。以下是详细分步说明&#xff1a; 1. 默认场景&#xff1a;使用Spring AOP&#xff08;基于代理&#xff09; 不需要引入AspectJ依赖&am…...

使用iis服务器模拟本地资源服务器unityaddressables热更新出错记录

editor中设置了using exculexing 模拟远程加载addressable可以实现资源热更新&#xff0c;build后的软件却没有成功。 iis服务器中mime中需要设置bundle的文件扩展名&#xff0c;时editor成功&#xff0c;build后失败 原因没有设置hash的扩展名&#xff0c;设置后editor和buil…...

17 一个高并发的系统架构如何设计

高并发系统的理解 第一:我们设计高并发系统的前提是该系统要高可用&#xff0c;起码整体上的高可用。 第二:高并发系统需要面对很大的流量冲击&#xff0c;包括瞬时的流量和黑客攻击等 第三:高并发系统常见的需要考虑的问题&#xff0c;如内存不足的问题&#xff0c;服务抖动的…...

MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)

使用 mongosh cd mongsh_bin_path mongosh “mongodb://user:passip:port/db”这样就直接进入了对应的db 直接输入&#xff1a; 这样 role “read_only_role" 就获得了3个 action&#xff0c; 分别是 查询&#xff0c;列举集合&#xff0c;集合元数据查询 P.S: 如果没有 …...

我的AI工具箱Tauri版-Custom3DModelCreationforH2Panel卡通图片2D转绘3D

本教程基于自研的AI工具箱Tauri版进行ComfyUI工作流Custom3DModelCreationforH2Panel卡通图片2D转绘3D。 Custom3DModelCreationforH2Panel卡通图片2D转绘3D 基于先进的SD模型技术&#xff0c;能够将2D动漫图片高效转换为高清的3D图像&#xff0c;满足各种创作需求。通过智能算…...

1 HDFS

1 HDFS 1. HDFS概述2. HDFS架构3. HDFS的特性4. HDFS 的命令行使用5. hdfs的高级使用命令6. HDFS 的 block 块和副本机制6.1 抽象为block块的好处6.2 块缓存6.3 hdfs的文件权限验证6.4 hdfs的副本因子 7. HDFS 文件写入过程&#xff08;非常重要&#xff09;7.1 网络拓扑概念7.…...

14-6-3C++STL的list

&#xff08;一&#xff09;list的插入 1.list.insert(pos,elem);//在pos位置插入一个elem元素的拷贝&#xff0c;返回新数据的位置 #include <iostream> #include <list> using namespace std; int main() { list<int> lst; lst.push_back(10); l…...

GESP2023年12月认证C++六级( 第三部分编程题(2)工作沟通)

参考程序1代码&#xff1a; #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <string> #include <map> #include <iostream> #include <cmath> #include <vector> using name…...

深度学习的应用

目录 一、机器视觉 1.1 应用场景 1.2 常见的计算机视觉任务 1.2.1 图像分类 1.2.2 目标检测 1.2.3 图像分割 二、自然语言处理 三、推荐系统 3.1 常用的推荐系统算法实现方案 四、图像分类实验补充 4.1 CIFAR-100 数据集实验 实验代码 4.2 CIFAR-10 实验代码 深…...

【自学笔记】MySQL的重点知识点-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 MySQL重点知识点MySQL知识点总结一、数据库基础二、MySQL的基本使用三、数据类型四、触发器&#xff08;Trigger&#xff09;五、存储引擎六、索引七、事务处理八、…...

计算机网络之物理层通信基础(信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念)

一、信道 信道是信号的传输媒介&#xff0c;一般用来表示向某一个方向传送信息的介质。信道可以按照不同标准进行分类&#xff1a; 按传输信号分类&#xff1a;可分为模拟信道和数字信道。 按传输介质分类&#xff1a;可分为无线信道和有线信道。无线信道以电磁波为传输介质&…...

C++初阶 -- 初识STL和string类详细使用接口的教程(万字大章)

目录 一、STL 1.1 什么是STL 1.2 STL的版本 1.3 STL的六大组件 二、string类 2.1 string类的基本介绍 2.2 string类的默认成员函数 2.2.1 构造函数 2.2.2 析构函数 2.2.3 赋值运算符重载 2.3 string类对象的容量操作 2.3.1 size和length 2.3.2 capacity 2.3.3 r…...

Cursor 背后的技术栈:从 VS Code 到 AI 集成

引言 在当今快速发展的软件开发领域&#xff0c;开发者工具正在经历一场由人工智能&#xff08;AI&#xff09;驱动的革命。Cursor 作为一款新兴的智能编程助手&#xff0c;凭借其强大的 AI 能力和高效的开发体验&#xff0c;迅速吸引了大量开发者的关注。Cursor 不仅继承了 V…...

ESP32和STM32在处理中断方面的区别

为了通俗地讲解ESP32和STM32在处理中断方面的区别&#xff0c;我们可以把它们想象成两个不同的“智能管家”系统&#xff0c;各自负责管理一个家庭&#xff08;即嵌入式项目&#xff09;的各种任务。我们将重点放在如何处理突发事件&#xff08;即中断&#xff09;上。 ESP32 …...

99.23 金融难点通俗解释:小卖部经营比喻PPI(生产者物价指数)vsCPI(消费者物价指数)

目录 0. 承前1. 简述&#xff1a;价格指数对比2. 比喻&#xff1a;两大指数对比2.1 简单对比2.2 生动比喻 3. 实际应用3.1 价格传导现象 4. 总结5. 有趣的对比6. 数据获取实现代码7. 数据可视化实现代码 0. 承前 本文主旨&#xff1a; 本文使用小卖部比喻PPI和CPI&#xff0c;…...

计算机网络概述

1. 计算机网络的定义 计算机网络是指由多个通过物理介质或无线方式互相连接的计算设备组成的系统。其主要目的是实现数据的传输和资源共享。网络中的计算设备可以包括台式机、笔记本电脑、服务器、手机、打印机、智能设备等。 网络的广义定义 首先要理解“网络”的广义含义。网…...

169 多数元素

给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 class Solution { public int majorityElement(int[] nums) { // 存储每个数字的…...

线程配置经验

工作时&#xff0c;时常会遇到&#xff0c;线程相关的问题与解法&#xff0c;本人会持续对开发过程中遇到的关于线程相关的问题及解决记录更新记录在此篇博客中。 目录 一、线程基本知识 1. 线程和进程 二、问题与解法 1. 避免乘法级别数量线程并行 1&#xff09;使用线程池…...

算法随笔_34: 最后一个单词的长度

上一篇:算法随笔_33: 132模式-CSDN博客 题目描述如下: 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a; 输入&am…...

java 正则表达式匹配Matcher 类

Matcher 类 用法 在 Java 中&#xff0c;Matcher 类是用于匹配正则表达式的工具&#xff0c;而 group() 方法是 Matcher 类中的一个重要方法&#xff0c;用于提取匹配结果中的捕获组&#xff08;captured groups&#xff09;。以下是对 group() 方法的详细解释&#xff1a; 1.…...

【Blazor学习笔记】.NET Blazor学习笔记

我是大标题 我学习Blazor的顺序是基于Blazor University&#xff0c;然后实际内容不完全基于它&#xff0c;因为它的例子还是基于.NET Core 3.1做的&#xff0c;距离现在很遥远了。 截至本文撰写的时间&#xff0c;2025年&#xff0c;最新的.NET是.NET9了都&#xff0c;可能1…...

python 使用Whisper模型进行语音翻译

目录 一、Whisper 是什么? 二、Whisper 的基本命令行用法 三、代码实践 四、是否保留Token标记 五、翻译长度问题 六、性能分析 一、Whisper 是什么? Whisper 是由 OpenAI 开源的一个自动语音识别(Automatic Speech Recognition, ASR)系统。它的主要特点是: 多语言…...

pytorch实现循环神经网络

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 PyTorch 提供三种主要的 RNN 变体&#xff1a; nn.RNN&#xff1a;最基本的循环神经网络&#xff0c;适用于短时依赖任务。nn.LSTM&#xff1a;长短时记忆网络&#xff0c;适用于长序列数据&#xff0c;能有效解决…...

侯捷 C++ 课程学习笔记:深入理解 C++ 核心技术与实战应用

目录 引言 第一章&#xff1a;C 基础回顾 1.1 C 的历史与发展 1.2 C 的核心特性 1.3 C 的编译与执行 第二章&#xff1a;面向对象编程 2.1 类与对象 2.2 构造函数与析构函数 2.3 继承与多态 第三章&#xff1a;泛型编程与模板 3.1 函数模板 3.2 类模板 3.3 STL 容器…...

大厂面试题备份20250131

20250131 模型压缩怎么做&#xff1f;除了知识蒸馏 模型压缩是为了减少深度学习模型的计算和存储需求&#xff0c;提高推理效率。除了知识蒸馏&#xff0c;常见的模型压缩方法包括&#xff1a; 1. 剪枝&#xff08;Pruning&#xff09; 非结构化剪枝&#xff08;Unstructur…...

(三)QT——信号与槽机制——计数器程序

目录 前言 信号&#xff08;Signal&#xff09;与槽&#xff08;Slot&#xff09;的定义 一、系统自带的信号和槽 二、自定义信号和槽 三、信号和槽的扩展 四、Lambda 表达式 总结 前言 信号与槽机制是 Qt 中的一种重要的通信机制&#xff0c;用于不同对象之间的事件响…...

玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…...

从0开始,来看看怎么去linux排查Java程序故障

一&#xff0c;前提准备 最基本前提&#xff1a;你需要有liunx环境&#xff0c;如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后&#xff0c;你还需要安装jdk和配置环境变量 1. 安装JDK&#xff08;以OpenJDK 17为例&#xff09; 下载JDK…...

Java实现LFU缓存策略实战

LFU算法原理在Java中示例实现集成Caffeine的W-TinyLFU策略缓存实战总结LFU与LRU稍有不同,LFU是根据数据被访问的频率来决定去留。尽管它考虑了数据的近期使用,但它不会区分数据的首次访问和后续访问,淘汰那些访问次数最少的数据。 这种缓存策略主要用来处理以下场景: 数据…...

LeetCode--84. 柱状图中最大的矩形【单调栈】

84. 柱状图中最大的矩形 正文 题目如下 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 这道题暴力很简单&#xff0c;但是时间复杂度是O(N^2)&#xf…...

感悟人生路

匆匆复匆匆&#xff0c;新春时光沙漏里&#xff0c;过了又来&#xff0c;只是那时和此时。累了&#xff0c;行过百公里&#xff0c;灯光交汇处&#xff0c;都是向往幸福之所。一路长虹&#xff0c;速度跟上节奏&#xff0c;福祉盈门&#xff0c;出入平安。​ 跨越时空&#xff…...

Autogen_core源码:_agent_instantiation.py

目录 _agent_instantiation.py代码代码解释代码示例示例 1&#xff1a;使用 populate_context 正确设置上下文示例 2&#xff1a;尝试在上下文之外调用 current_runtime 和 current_agent_id示例 3&#xff1a;模拟 AgentRuntime 使用 AgentInstantiationContext _agent_instan…...

开源智慧园区管理系统如何重塑企业管理模式与运营效率

内容概要 在如今快速发展的商业环境中&#xff0c;企业面临着日益复杂的管理挑战。开源智慧园区管理系统应运而生&#xff0c;旨在通过技术创新来应对这些挑战。它不仅是一个简单的软件工具&#xff0c;而是一个全面整合大数据、物联网和智能化功能的综合平台&#xff0c;为企…...

网络工程师 (9)文件管理

一、树形目录结构 &#xff08;一&#xff09;定义与构成 树形目录结构由一个根目录和若干层子文件夹&#xff08;或称为子目录&#xff09;组成&#xff0c;它像一棵倒置的树。这棵树的根称为根文件夹&#xff08;也叫根目录&#xff09;&#xff0c;从根向下&#xff0c;每一…...

Java小白入门教程:内置数据类型(四类八种)和引用数据类型

目录 一、内置数据类型&#xff08;四类八种&#xff09; 1. 整数类型&#xff08;四种子类型&#xff09; 2. 浮点类型&#xff08;两种子类型&#xff09; 3. 字符类型&#xff08;一种子类型&#xff09; 4. 布尔类型&#xff08;一种子类型&#xff09; 二、引用数据类…...

pytorch图神经网络处理图结构数据

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;是一类能够处理图结构数据的深度学习模型。图结构数据由节点&#xff08;vertices&#xff09;和边&#xff08;edges&#xff09;组成&a…...

CRC校验详解

CRC校验即循环冗余校验(Cyclic Redundancy Check),是基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误。首先看两个概念,后续会用到。 模2除法:也叫模2运算,就是结果除以2后取余数。模2除法每一位除的结果不影响其它位,即不向上一位借位,所以实际…...

使用where子句筛选记录

默认情况下,SearchCursor将返回一个表或要素类的所有行.然而在很多情况下,常常需要某些条件来限制返回行数. 操作方法: 1.打开IDLE,加载先前编写的SearchCursor.py脚本 2.添加where子句,更新SearchCursor()函数,查找记录中有<>文本的<>字段 with arcpy.da.Searc…...

人工智能导论--第1章-知识点与学习笔记

请根据教材内容&#xff0c;完成进行下面的作业任务。必须包含有教材的具体内容&#xff0c;不能是生成式AI系统的生成内容。 参考教材1.1节的内容介绍&#xff0c;谈谈你对“智能”的认识。思维能力是智能的重要特征之一&#xff0c;结合教材1.1.2节内容&#xff0c;从思维的…...

半导体SAP管理系统:数字化转型的驱动力

在当今全球科技竞争日益激烈的背景下&#xff0c;半导体行业作为信息技术的基石&#xff0c;其生产效率、质量控制和成本优化直接关系到企业的市场竞争力和可持续发展。随着数字化转型的深入&#xff0c;半导体企业纷纷寻求高效、智能的管理系统以提升运营效率。SAP管理系统&am…...