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

嵌入式系统 (2.嵌入式硬件系统基础)

2.嵌入式硬件系统基础

2.1嵌入式硬件系统的组成

嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。

嵌入式微处理器

嵌入式微处理器采用冯·诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间并通过同一总线访问,而后者将程序和数据分开存储,并使用独立的总线以提升数据吞吐率。指令系统包括RISC(精简指令集)和CISC(复杂指令集)。主流微处理器体系有ARM、MIPS、PowerPC、SH、X86等,时钟速度和总线数据宽度因体系不同而异。
在这里插入图片描述

嵌入式系统的总线

嵌入式系统的总线一般集成在微处理器中,可分为片外总线(如PCI、ISA)和片内总线(如AMBA、AVALON)。总线种类与微处理器的结构密切相关。

嵌入式系统的存储器

存储器分为主存和外存。主存用于存储可直接访问的代码和数据,常见类型有ROM、EPROM、Nor Flash、SRAM、DRAM等;外存(如NandFlash、SD卡)用于存储其他信息,容量大、价格低,但处理器无法直接访问,通常采用电子盘而非硬盘。

输入/输出接口和设备

嵌入式微处理器集成了大多数输入/输出接口和设备。接口包括中断控制器、DMA、串行/并行接口等,设备包括定时器、计数器、看门狗、RTC、UART、PWM、AD/DA、显示器、键盘和网络等。


2.2嵌入式处理器的特点

基础特点

嵌入式微处理器以通用微处理器为基础,与之相比具备体积小、重量轻、成本低、功耗低、可靠性高等优势,并增强了工作温度范围和抗电磁干扰能力。

集成度

嵌入式处理器不仅集成了CPU核心、缓存、MMU和总线,还集成了多种外设和接口(如中断控制器、DMA、定时器、串口等),通过高集成度实现低成本和低功耗的设计,可采用单芯片或芯片组形式。

性能分类

性能分为低端(价格低、性能≤50MIPS)、中端(150MIPS以上,低功耗)和高端(用于高强度计算,如VLIW架构和多处理器并行执行);通过提升时钟频率、增加缓存及并行度来满足不同需求。

功耗管理

嵌入式系统严格限制功耗,采用降低工作电压、动态调整时钟频率及关闭未使用功能块等策略,同时提供运行、待命、时钟关闭等功耗管理模式,优化总线和存储器规模以降低能耗。

成本控制

处理器成本受功能块数量、存储器大小、封装形式(如PQFP或BGA)、芯片尺寸等影响,通过权衡性能和集成度控制价格;此外,不同架构(如RISC、CISC、VLIW)的代码密度也对成本有重要影响。


2.3嵌入式处理器的类型

嵌入式处理器可以按照位数和用途进行分类。按位数分为4位、8位、16位、32位和64位;按用途分为嵌入式DSP(用于数字信号处理,采用哈佛结构,优化FFT性能)和通用嵌入式微处理器(如SoC芯片,集成通用处理器、总线、接口及设备)。

主流嵌入式处理器系列

当前主流嵌入式微处理器包括ARM系列、MIPS系列、PowerPC系列、SuperH系列和X86系列,这些系列中产品种类繁多,总计超过上千种。

ARM处理器

ARM处理器作为主流32位RISC处理器,具有低功耗、高性价比和高代码密度的特点,广泛应用于手机、游戏机、手持PC和机顶盒等。其分类包括应用处理器(高性能)、实时控制器(实时响应)和微控制器(低功耗、低成本),并支持多种架构版本如ARMv4、v5、v6及最新的ARM Cortex(v7)。
在这里插入图片描述
在这里插入图片描述

X86系列

X86嵌入式处理器由AMD、Intel等提供,广泛应用于工业控制和通信领域,特别是国内嵌入式PC应用中表现突出。

PowerPC(PPC)系列

MPC系列(Motorola)和PPC系列(IBM)主要用于通信、消费电子、工业控制和军用设备等,具有高度集成性,如支持以太网控制器、显示控制器和低功耗便携式设备。

嵌入式处理器的技术发展

当前技术趋势包括多处理器技术(如ARM MPcore支持1-4个ARM11处理器的集成)、64位处理器及优化SoC片内总线以扩展带宽。华为Mate60所使用的麒麟9000S芯片是中国在芯片领域自主研发的重要突破。


2.3嵌入式处理器的类型

按位数分类

嵌入式处理器按位数划分为4位、8位、16位、32位和64位。其中32位处理器已成为市场主流,占嵌入式市场总量的重要份额。

按用途分类

嵌入式处理器可分为嵌入式DSP和通用嵌入式微处理器。嵌入式DSP专注于数字信号处理,采用哈佛架构,程序与数据分开存储,优化了如FFT的处理速度;通用嵌入式处理器通常为集成处理器核心、总线和外围接口的SoC芯片,并可内嵌DSP协处理器。

主流嵌入式处理器系列

当前市场主流的嵌入式处理器系列包括ARM、MIPS、PowerPC、SuperH和X86系列。其中,ARM和MIPS广泛应用于消费电子,PowerPC多用于工业控制和军用设备,而X86系列因兼容性广泛用于嵌入式PC。

ARM处理器的特点与分类

ARM处理器因功耗低、性价比高和代码密度高成为业界公认的标准。其产品包括ARM7、ARM9、ARM10、ARM11和ARM Cortex系列,并根据应用场景分为应用处理器(性能优先)、实时控制处理器(低功耗实时响应)和微控制器(成本最低)。

ARM架构发展

ARM架构从ARMv4到ARMv7逐步演进:

  • ARMv4引入Thumb指令集,提升代码密度和功耗效率;
  • ARMv5TE优化Thumb与ARM指令交互,扩展DSP指令集;
  • ARMv6新增SIMD扩展、多处理器支持,并优化内存和异常处理;
  • ARMv7定义应用(A)、实时(R)和微控制器(M)三种处理器配置,提升多媒体处理能力和浮点性能。
华为自研嵌入式处理器

华为Mate60搭载的麒麟9000S芯片采用自主设计的“泰山”内核,标志中国芯片技术突破。该芯片采用国产制程工艺,实现对美国技术的部分脱离,同时通过12核心设计(包含定制A78AE核心)达到3.1GHz的高主频。

未来发展趋势

嵌入式处理器正在向多核架构和64位技术演进。多核技术通过任务并行分解提升性能,而64位技术在嵌入式SoC中实现片内总线的高效扩展,解决系统性能与带宽瓶颈。ARM的AMBA架构已支持8到1024位总线宽度,推动嵌入式性能持续提升。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

系统性能瓶颈及64位需求

系统性能瓶颈可能体现在处理器的计算能力、内存访问带宽以及片上总线的数据吞吐能力上。对于嵌入式系统,是否需要64位技术,主要取决于应用场景中对64位地址(如更大内存寻址能力)还是64位数据(如更高数据精度或处理能力)的需求。例如,高性能计算或多媒体处理可能更需要64位数据,而复杂操作系统和大内存应用更依赖64位地址支持。


2.4嵌入式处理器的体系结构

嵌入式处理器的体系结构包含多层次的设计内容,包括其编程模型、处理器的运行模式、工作状态、寄存器体系、异常处理机制以及内存与 I/O 操作的设计和实现方式。以下为详细解析:

编程模型

嵌入式处理器支持多种数据类型,包括字节型(Byte,8位宽)、半字型(HalfWord,16位宽,要求2字节对齐)和字型(Word,32位宽,要求4字节对齐)。处理器提供灵活的操作模式,包括用户模式(User Mode)和特权模式(Privilege Mode),分别适用于普通任务和系统任务。在用户模式下,程序无法直接访问某些受保护的资源,而必须通过异常机制改变处理器运行模式。在特权模式下,处理器可以完全访问所有系统资源。此外,模式的切换可以通过三种方式实现:软件控制、异常触发或外部中断。

处理器模式

处理器支持 7种模式,分别适用于不同场景:

  • 用户模式(User Mode):用于运行普通用户程序,不允许直接访问受保护的资源。
  • 系统模式(System Mode):与用户模式类似,但具有访问所有资源的权限,用于运行系统特权任务。
  • 快速中断模式(FIQ Mode):用于处理快速数据传输的中断请求。
  • 中断请求模式(IRQ Mode):用于处理通用的外部中断。
  • 管理模式(Supervisor Mode):系统复位或异常处理时进入的模式,主要用于操作系统管理。
  • 终止模式(Abort Mode):处理内存访问异常或非法操作。
  • 未定义模式(Undefined Mode):处理未定义指令执行的情况,通常用于扩展指令集(例如通过软件仿真扩展ARM或Thumb指令)。

模式切换时,处理器会自动保存当前状态到影子寄存器中,以便在异常或中断处理完成后能快速恢复。

处理器工作状态

处理器有两种主要工作状态:

  1. ARM状态:执行32位ARM指令,要求字对齐,提供高性能。
  2. Thumb状态:执行16位Thumb指令,要求半字对齐,指令长度短,代码密度高。

此外,ARM还支持 Thumb-2扩展,引入了新的32位指令集,可以在Thumb状态下执行,这种混合模式能够更好地平衡性能与代码密度。ARM与Thumb状态之间的切换通过执行 BX指令 实现,同时设置操作数寄存器的状态位[0](0为ARM,1为Thumb)。状态切换不会影响处理器的模式或寄存器内容。

寄存器

ARM处理器的寄存器体系结构由 37个寄存器 组成:

  1. 31个通用寄存器

    • R0-R7:所有模式下共享的通用寄存器,功能相同,主要用于数据存储和运算。
    • R8-R12:根据模式不同有两组物理寄存器,一组用于FIQ模式,另一组用于其他模式。
    • R13(SP):栈指针,负责存储不同模式下的堆栈地址,切换模式时自动切换到对应栈指针值。
    • R14(LR):链接寄存器,用于保存函数调用的返回地址或异常返回地址。
    • R15(PC):程序计数器,保存当前指令地址,ARM状态下低2位为0,Thumb状态下低1位为0。
  2. 6个状态寄存器

    • CPSR(当前程序状态寄存器):记录当前模式、条件标志、控制标志(如中断使能标志)和处理器状态。
    • SPSR(保存的程序状态寄存器):在异常模式下保存CPSR的值,用于异常返回时恢复处理器状态。

影子寄存器是寄存器的物理映射,R8-R14在不同模式下具有不同的影子寄存器,用于快速切换。

异常处理机制

异常是由内部或外部事件触发的特殊情况,处理器在异常发生时会暂停当前指令,并跳转到预定义的向量地址执行异常处理程序。异常的类型和优先级如下:

  1. Reset(复位异常):系统复位时触发,进入Supervisor模式,禁用FIQ和IRQ中断。
  2. Undefined Instructions(未定义指令异常):执行未定义指令时触发,可用于扩展指令集。
  3. SWI(软件中断):执行SWI指令时触发,通常用于操作系统的系统调用。
  4. Prefetch Abort(预取中止):在指令预取阶段发生内存错误时触发。
  5. Data Abort(数据中止):在数据读写阶段发生错误时触发。
  6. IRQ(中断请求异常):外部IRQ信号触发,用于常规外设中断。
  7. FIQ(快速中断异常):外部FIQ信号触发,用于高优先级数据传输中断。

异常发生时,处理器会保存当前状态到影子寄存器(R14和SPSR),处理完成后通过恢复寄存器值返回正常执行流。

内存与I/O

ARM处理器使用线性地址空间,地址范围为4GB(2^32)。支持 大端(Big-endian)小端(Little-endian) 数据存储模式,通过硬件设置实现。

  1. I/O接口

    • I/O端口地址采用 内存映射编址,即I/O设备与内存单元共享统一的地址空间。
    • ARM处理器访问I/O端口的方式与访问内存相同,但I/O地址空间通常标记为不可缓存(Uncachable)和非缓冲(Unbufferable)。
  2. I/O数据与控制

    • 数据信息:如键盘输入和显示器输出。
    • 状态信息:外设当前工作状态信号(如READY信号和BUSY信号)。
    • 控制信息:CPU发送的控制信号(如读写控制信号、中断信号、片选信号等)。

2.5嵌入式系统的总线

嵌入式系统的总线是一种关键的通信机制,用于连接CPU、存储器和外围设备,实现数据、地址和控制信号的传输。根据位置划分,总线分为 片内总线片外总线。片内总线连接CPU内部的功能单元,如ALU(算术逻辑单元)、寄存器和缓存;片外总线则连接CPU与存储器(RAM、ROM)以及I/O接口。按照功能和信号类型划分,总线分为 数据总线(Dbus)地址总线(Abus)控制总线(Cbus),分别负责数据传输、地址定位和控制信号的传递。

总线的主要参数

嵌入式总线的性能受以下三个关键参数影响:

  1. 总线宽度:又称总线位宽,表示总线在一次操作中能传送的数据位数,例如16位总线可以传输16位数据。总线宽度越大,数据传输能力越强。
  2. 总线频率:表示总线的工作速度,单位为MHz。频率越高,总线传输速度越快。
  3. 总线带宽:即总线的最大数据传输率,用每秒传输的数据量(MB/s)衡量。公式为:总线带宽 =(总线宽度 / 8)× 总线频率。例如,32位总线在66MHz下的带宽为264MB/s。

总线的性能不仅取决于上述参数,还受电路设计和硬件成本影响。例如,高速总线通常使用更宽的数据连接和更昂贵的电路,但通过桥电路(Bus Bridge),可以在高速总线与低速总线之间提供并行性和独立操作。

多总线系统

现代嵌入式系统常采用多总线结构,将高速设备(如存储器、处理器)连接在高速总线中,而将低速设备(如外设)连接在低速总线中,通过桥(Bridge)将高速总线与低速总线进行互联。桥在多总线系统中发挥重要作用,允许不同速率的设备高效协同。例如,在一个典型的多总线系统中,CPU、缓存和存储器控制器通过高速总线(如AMBA AHB)连接,外围设备(如UART、SPI)则通过低速总线(如APB)与系统通信。桥的存在提高了总线之间的并行性,并简化了总线操作。
在这里插入图片描述
在这里插入图片描述

AMBA总线架构

AMBA(Advanced Microcontroller Bus Architecture) 是ARM公司设计的一种嵌入式总线规范,目前已发展到3.0版本。AMBA总线包括三种主要总线类型:

  1. AHB(Advanced High-performance Bus):用于高性能模块的连接,支持突发模式数据传输、事务分割以及流水线操作。AHB可以高效连接处理器、片上和片外存储器,支持一个或多个主单元(如RISC处理器、协处理器和DMA控制器)发起总线操作。从单元(如外存接口和总线桥接口)响应主单元的读写操作,并提供成功、失败或等待的反馈信号。
    AHB操作分为两个阶段:

    • 地址阶段:持续一个时钟周期,在HCLK上升沿有效,所有从单元在此时采样地址信息。
    • 数据阶段:持续一个或多个时钟周期,通过HREADY信号控制数据传输的延续或完成。
      在这里插入图片描述
  2. ASB(Advanced System Bus):类似AHB,适用于高性能模块,但目前逐渐被AHB取代。

  3. APB(Advanced Peripheral Bus):用于低性能外设的连接,通常作为AHB或ASB的子系统。APB通过APB桥连接到AHB/ASB,并实现以下功能:

    • 锁存地址直到数据传输完成。
    • 地址译码和外部片选信号生成。
    • 写操作时将数据驱动到APB总线,读操作时将数据驱动回AHB/ASB。
    • 通过PENABLE信号控制传输的时序。

APB从单元具有简单的接口,依赖特定设计实现外设的控制和数据传输。其操作信号(如PSELx和PADDR)决定目标寄存器的访问。
在这里插入图片描述

PCI与CPCI总线

PCI(Peripheral Component Interconnect)总线 是一种高性能32位或64位总线,具有多路复用地址和数据总线,并支持即插即用和中断共享。PCI总线主要参数如下:

  • 数据宽度:32位或64位。
  • 总线速度:33MHz或66MHz。
  • 数据传输方式:由一个主控设备(Master)发起操作,目标设备(Slave)响应请求。同一时刻总线只支持一对设备进行传输,通过仲裁机制分配主控权。

为了适应工业需求,CPCI(Compact PCI)总线将PCI总线规范扩展为工业标准。CPCI结合了PCI总线的高性能和欧洲卡结构的高可靠性,广泛应用于高端嵌入式系统和工业控制领域。CPCI定义了两种板卡尺寸(3U: 100mm×160mm 和 6U: 233mm×160mm),适合在高可靠性要求的环境下使用。

串行总线

嵌入式系统中常用的串行总线包括:

  1. I2C(Inter-Integrated Circuit):用于短距离、低速的设备通信,具有简单的双线结构(SDA数据线和SCL时钟线)。
  2. SPI(Serial Peripheral Interface):支持全双工、高速数据传输,通过主从架构实现多设备通信。
  3. USB(Universal Serial Bus):支持高速通信和多设备连接,是现代嵌入式设备的常用接口。

这些串行总线通过减少引脚数量和简化硬件设计,提升了系统的模块化和扩展能力。


2.6嵌入式系统的存储器

嵌入式系统的存储器是系统核心组成部分,负责存储程序、数据及配置信息。根据存储器的访问方式和功能,可分为 高速缓存(Cache)主存(片内或片外存储器)外存(如Flash存储和各种存储卡)。不同存储器在速度、容量、可靠性和成本上各有特点,在嵌入式系统中常组合使用,以实现高效运行和数据存储需求。
在这里插入图片描述

高速缓存(Cache)

Cache 是嵌入式处理器内部的高速存储器,用于加速主存访问,存放最频繁使用的数据和指令,是主存中部分内容的副本。Cache 以其速度高于主存的特点显著提升了处理器性能,常见于32位嵌入式微处理器中。

Cache 的类型包括数据 Cache、指令 Cache 或两者结合的混合 Cache。处理器访问时,Cache 控制器检查目标地址的数据是否在 Cache 中,若存在则称为 “命中”,否则为“未命中”。未命中时需从主存读取数据并存入 Cache 后供处理器使用。写入数据时的策略有两种:

  1. 通写(Write Through):写入数据时,Cache 和主存同时更新,保证主存与 Cache 同步。
  2. 回写(Write Back):仅在 Cache 数据被替换或移出时才更新主存,这种方式能减少主存访问次数,提高性能。
    在这里插入图片描述
主存(Primary Storage)

主存是处理器直接访问的存储器,主要用于存放操作系统、应用程序以及运行时数据。嵌入式系统中主存可位于 片内存储器(SoC内部)片外存储器(SoC外部)。片内存储器具有存取速度快的特点,但容量较小;片外存储器容量大,但访问速度较慢。

主存类型:
  1. SRAM(静态随机存取存储器)

    • 特性:SRAM 不需要刷新数据,存储单元由六管电路组成,具有低延迟、高速度的特点。
    • 缺点:容量小、成本高,通常用于高速缓存(Cache)或小型片内存储。
    • 典型芯片规格:2114(1Kx4)、6116(2Kx8)、62256(32Kx8)等。
      在这里插入图片描述
  2. DRAM(动态随机存取存储器)

    • 特性:采用动态存储单元设计(单管或多管电路),需要定期刷新以保持数据完整性。
    • 优点:相比 SRAM,DRAM 单位容量成本更低,可用于较大规模存储。
    • 工作方式:采用行列地址选通机制,地址被内部分为两路以减少引脚数,需配备 DRAM 控制器处理刷新和多路切换。
      在这里插入图片描述
  3. SDRAM(同步动态随机存取存储器)

    • 特性:与处理器共享时钟信号,能够同步工作。其内置双存储阵列,支持交替存储和数据读取,显著提升数据读取效率。
    • 优点:是 DRAM 家族中速度最快的一种,广泛应用于高性能嵌入式系统中。

主存中也包括一些 ROM 类存储器(如 Nor Flash、EPROM、E2PROM 等),用于存储不常更改的系统固件或代码。

外存(Secondary Storage)

外存是处理器无法直接访问的存储器,通常通过控制器接口进行操作,用于存放用户数据、配置文件和其他持久性信息。外存容量大,但访问速度较慢。在嵌入式系统中,外存多以 电子盘(使用半导体芯片存储数据) 的形式实现,具有体积小、功耗低和抗震能力强等特点。

外存类型:
  1. Nand Flash

    • 特性:作为 Flash Memory 的一种,Nand Flash 具有大容量、低成本、高回写速度等优点,是外存的主流选择。
    • 用途:可独立作为外存使用,也可组成各种存储卡(如 USB 盘、SD 卡、CF 卡)。
    • 与 Nor Flash 的区别:Nand Flash 注重大容量存储和成本优化;而 Nor Flash 随机访问速度快,功耗低,多用于主存。
  2. NOR Flash

    • 特性:具有快速随机访问、电压低、功耗低的优点,稳定性较高,适合固件和操作系统存储。
      在这里插入图片描述
  3. MMC(多媒体卡)

    • 特性:支持高频率(26MHz和52MHz),数据总线宽度灵活(1到8位),传输速率可达52MB/s。
    • 应用场景:适用于移动设备和便携式电子设备,提供低功耗和小尺寸解决方案。
  4. SD卡

    • 特性:由松下、东芝和 SanDisk 联合推出,是一种标准化的存储卡,提供不同尺寸(标准、mini、micro)和容量。
    • 应用场景:被广泛用于移动存储、智能手机和数码相机中。
  5. Compact Flash(CF 卡)

    • 特性:最早由 SanDisk 提出,体积小,仅为 PCMCIA 卡的四分之一,但提供完整的 PCMCIA-ATA 功能。
    • 接口:CF 卡接口为 50 针,遵循 ATA 协议。
    • 应用场景:适用于高可靠性要求的嵌入式设备。
  6. Disk On Chip(DOC)

    • 特性:采用 Nand Flash 芯片作为存储单元,并结合控制芯片和 TrueFFS 技术仿真硬盘。TrueFFS 技术提高了写入次数和数据可靠性,使 DOC 的寿命远高于普通 Flash 存储。
    • 应用场景:适用于高写入寿命和高可靠性的嵌入式系统。

相关文章:

嵌入式系统 (2.嵌入式硬件系统基础)

2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间…...

Vue3轮播图的实现:vue3-carousel的使用和配置

vue3-carousel 是一个用于 Vue 3 的轻量级、响应式、功能强大的轮播组件。它允许你轻松创建可以滚动的图片或内容滑块。下面是关于如何安装、使用以及配置 vue3-carousel 的一些示例和详细说明。 目录 一、安装 vue3-carousel 二、引入 三、轮播全局样式修改 一、安装 vue3-…...

Spring AI ectorStore

Spring AI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析: 一、VectorStore的基本概念 定义:VectorStore特别适用于处理那些经过嵌入…...

uniapp vue2版本如何设置i18n

如何设置i18n在该软件设置过语言的情况下优先选择所设置语言,在没有设置的情况下,获取本系统默认语言就,将系统默认语言设置为当前选择语言。 1、下载依赖: npm install vue-i18n --save 2、创建相关文件(在最外层&…...

【2024华为OD-E卷-100分-boss的收入】(题目+思路+JavaC++Python解析)

题目描述 题目:boss的收入 在一个公司中,有一个老板(boss)和若干名员工(employees)。老板和员工的收入信息存储在一个数组中,其中数组的每个元素表示一个人的收入。数组的第0个元素表示老板的…...

若依 ruoyi-vue HandlerInterceptor 拦截器 文件接口自定义权限

文件资源添加自定义权限 package com.huida.framework.config;import com.huida.framework.interceptor.FileInterceptor; import com.huida.framework.interceptor.RequestInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springfr…...

在离线环境中安装 `.rpm` 包的步骤

在一些环境中,可能无法直接通过网络安装软件包。特别是在没有互联网连接的情况下,我们仍然可以手动下载 .rpm 安装包并进行离线安装。本文将介绍如何在离线环境中安装多个 .rpm 包,确保软件的顺利安装和依赖关系的处理。 1. 将 .rpm 文件复制…...

Python----Python爬虫(selenium的使用,定位元素,层级定位)

一、介绍与安装 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器。 Sele…...

Docker 服务、镜像、容器之命令(Docker Services, Images, and Container Commands)

Docker 服务、镜像、容器之命令 Docker是一个强大的容器化平台,能够帮助开发者高效地构建、部署和管理应用程序。本文将详细介绍Docker的服务命令、镜像命令和容器命令,帮助你快速上手Docker。 一、Docker的服务相关命令 在使用Docker之前&#xff0c…...

当歌 - RSS 订阅分发平台开发

以下将详细介绍当歌平台的技术架构、功能实现以及相关代码逻辑。 一、项目概述 当歌是一个极简的 RSS 订阅分发平台,旨在为用户提供便捷的 RSS 管理和订阅服务,帮助用户轻松获取和分享最新资讯。 二、技术架构 后端语言:PHP 数据库&#…...

vue3使用AntV X6 (图可视化引擎)历程[二]

通过h函数动态展示自定义节点内容 一、案例效果 二、案例代码 父组件. BloodTopology.vue <template><div><TopologyCompact><template #main-board-box><TopologyDependent domId"featureBloodContainer" :nodeData"originalNode…...

爬虫学习记录

1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…...

Erlang语言的函数实现

Erlang语言函数实现的深度探讨 引言 Erlang是一种并发编程语言&#xff0c;最初由爱立信公司为电信系统开发。它以其强大的并发处理能力和容错机制而闻名&#xff0c;广泛应用于实时系统和分布式系统。本文将详细探讨Erlang语言中的函数实现&#xff0c;包括函数的定义、调用…...

LLM之RAG实战(五十一)| 使用python和Cypher解析PDF数据,并加载到Neo4j数据库

一、必备条件&#xff1a; python语言Neo4j数据库python库&#xff1a;neo4j、llmsherpa、glob、dotenv 二、代码&#xff1a; from llmsherpa.readers import LayoutPDFReaderfrom neo4j import GraphDatabaseimport uuidimport hashlibimport osimport globfrom datetime …...

单例模式-如何保证全局唯一性?

以下是几种实现单例模式并保证全局唯一性的方法&#xff1a; 1. 饿汉式单例模式 class Singleton { private:// 私有构造函数&#xff0c;防止外部创建对象Singleton() {}// 静态成员变量&#xff0c;存储单例对象static Singleton instance; public:// 公有静态成员函数&…...

05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos

Docker学习&#xff0c;常用安装&#xff1a;Mysql、Redis、Nginx、Nacos 一、Docker安装Mysql 1、docker search mysql ##查找mysql版本都有哪些 2、docker pull mysql:5.6 ##下载5.6版本的mysql镜像 3、docker run -p 13306:3306 --name mysql ##运行…...

docker 启动redis 守护进程

文章目录 前言一、整体流程二、状态图三、结语 前言 在现代软件开发中&#xff0c;缓存和消息队列是提高应用性能和扩展性的关键。Redis 是一种流行的内存数据结构存储系统&#xff0c;它支持多种类型的数据结构&#xff0c;如字符串、哈希、列表、集合、有序集合等。使用 Doc…...

Angular由一个bug说起之十三:Cross Origin

跨域 想要了解跨域&#xff0c;首要要了解源 什么是源&#xff0c;源等于协议加域名加端口号 只有这三个都相同&#xff0c;才是同源&#xff0c;反之则是非同源。 比如下面这四个里&#xff0c;只有第4个是同源 而浏览器给服务器发送请求时&#xff0c;他们的源一样&#xff0…...

为深度学习引入张量

为深度学习引入张量 什么是张量&#xff1f; 神经网络中的输入、输出和转换都是使用张量表示的&#xff0c;因此&#xff0c;神经网络编程大量使用张量。 张量是神经网络使用的主要数据结构。 张量的概念是其他更具体概念的数学概括。让我们看看一些张量的具体实例。 张量…...

opencv摄像头标定程序实现

摄像头标定是计算机视觉中的一个重要步骤&#xff0c;用于确定摄像头的内参&#xff08;如焦距、主点、畸变系数等&#xff09;和外参&#xff08;如旋转矩阵和平移向量&#xff09;。OpenCV 提供了方便的工具来进行摄像头标定。下面分别给出 C 和 Python 的实现。 1. C 实现…...

Flutter:封装一个自用的bottom_picker选择器

效果图&#xff1a;单列选择器 使用bottom_picker: ^2.9.0实现&#xff0c;单列选择器&#xff0c;官方文档 pubspec.yaml # 底部选择 bottom_picker: ^2.9.0picker_utils.dart AppTheme&#xff1a;自定义的颜色 TextWidget.body Text() <Widget>[].toRow Row()下边代…...

Docker 容器自动化管理之脚本(Script for Docker Container Automation Management)

Docker 容器自动化管理之脚本 简介 Docker‌是一个开源的容器化平台&#xff0c;旨在简化应用程序的开发、部署和运行过程。它通过将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;使得开发人员能够在不同的环境中以一致的方式构建、打包和分发应用程序‌。 Docke…...

client-go中watch机制的一些陷阱

Reference https://stackoverflow.com/questions/51399407/watch-in-k8s-golang-api-watches-and-get-events-but-after-sometime-doesnt-get-an 问题描述 最近在使用 client-go 的 watch 机制监听 k8s 中的 deployment 资源时&#xff0c;发现一个奇怪的现象 先看下代码&a…...

用户界面的UML建模11

然而&#xff0c;在用户界面方面&#xff0c;重要的是要了解《boundary》类是如何与这个异常分层结构进行关联的。 《exception》类的对象可以作为《control》类的对象。因此&#xff0c;《exception》类能够聚合《boundary》类。 参见图12&#xff0c;《exception》Database…...

计算机网络之---数据链路层的功能与作用

数据链路层概念 数据链路层&#xff08;Data Link Layer&#xff09;是计算机网络中的第二层&#xff0c;它位于物理层和网络层之间&#xff0c;主要负责数据在物理链路上的可靠传输。其基本功能是将网络层传来的数据分成帧&#xff0c;并负责在物理链路上可靠地传输这些数据帧…...

添加到 PATH 环境变量中

命令解释 # 将命令中的<CLI_PATH>替换为您aliyun文件的所在目录。 echo export PATH$PATH:<CLI_PATH> >> ~/.bash_profile echo export PATH$PATH:/data2/ljsang/aliyun/aliyun >> ~/.bash_profileexport PATH$PATH:/data2/ljsang/aliyun/aliyun&…...

【51单片机零基础-chapter6:LCD1602调试工具】

实验0-用显示屏LCD验证自己的猜想 如同c的cout,前端的console.log() #include <REGX52.H> #include <INTRINS.H> #include "LCD1602.h" int var0; void main() {LCD_Init();LCD_ShowNum(1,1,var211,5);while(1){;} }实验1-编写LCD1602液晶显示屏驱动函…...

Linux 内核中的 netif_start_queue 函数:启动网络接口发送队列的关键

在 Linux 内核的网络子系统中,netif_start_queue 函数扮演着至关重要的角色。这个函数的主要功能是启动(或启用)网络接口的发送队列,标志着网络接口已经准备好开始发送数据包。本文将深入探讨 netif_start_queue 函数的用途、工作原理以及在实际网络驱动代码中的应用。 函…...

(七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络

零、开篇趣谈 还记得第一次用支付宝"刷脸"时的新奇感吗&#xff1f;或者被抖音的人脸特效逗乐的瞬间&#xff1f;这些有趣的应用背后&#xff0c;其实藏着一个精妙的AI世界。今天&#xff0c;就让我们开启一段奇妙的人脸识别技术探索之旅吧&#xff01; 一、人脸识…...

ExcelDataReader:一个.Net高性能Excel开源读取器

推荐一个用于读取Microsoft Excel文件的高性能开源库。 01 项目简介 ExcelDataReader是一个功能强大且易于使用的开源项目&#xff0c;提供了丰富的读取API&#xff0c;专门读取Excel文件的数据&#xff0c;特别是处理大数据量的情况。 ExcelDataReader支持Excel版本从2007年…...

人工智能-机器学习之多元线性回归(项目实践一)

目标&#xff1a;运用scikit-learn进行多元线性回归方程的构建&#xff0c;通过实际案例的训练集和测试集进行预测&#xff0c;最终通过预测结果和MSE来评估预测的精度。 一、首先安装scikit-learn&#xff1a;pip install scikit-learn C:\Users\CMCC\PycharmProjects\AiPro…...

Mysql--基础篇--约束(主键,外键,唯一,检查,枚举及复合约束等)

在MySQL中&#xff0c;约束&#xff08;Constraints&#xff09;是用于确保数据库中数据完整性和一致性的规则。通过定义约束&#xff0c;可以防止用户插入、更新或删除不符合特定条件的数据&#xff0c;从而保证数据的准确性和可靠性。MySQL支持多种类型的约束&#xff0c;每种…...

经典多模态模型CLIP - 直观且详尽的解释

对比语言-图像预训练&#xff08;CLIP&#xff09;&#xff0c;这是一种创新的多模态建模策略&#xff0c;能够创建视觉和语言的联合表示。CLIP 的效果非常出色&#xff0c;可以用于构建高度特定且性能卓越的分类器&#xff0c;而无需任何训练数据。本文将深入探讨其理论基础&a…...

着丝粒鉴定CentIER v3.0安装与使用-bioinfomatics tools41

使用CentIE鉴定着丝粒 T2T基因组端粒与着丝粒的区别及其鉴定方法-随笔02_chip-seq鉴定着丝粒-CSDN博客 T2T时代的基因组组装-文献精读-9_基因组t2t组装-CSDN博客 桑树T2T基因组-文献精读16_桑树基因组-CSDN博客 辣椒属2个T2T基因组-文献精读23_辣椒基因组-CSDN博客 大花…...

Objective-C语言的多线程编程

Objective-C语言的多线程编程 在现代应用程序开发中&#xff0c;尤其是移动应用开发&#xff0c;多线程编程是一个不可或缺的部分。使用多线程可以提升应用的响应能力&#xff0c;使得可以同时处理多个任务&#xff0c;从而优化用户体验。在本文中&#xff0c;我们将深入探讨O…...

Golang的并发编程框架比较

# Golang的并发编程框架比较 中的并发编程 在现代软件开发中&#xff0c;处理高并发的能力愈发重要。Golang作为一门支持并发编程的编程语言&#xff0c;提供了丰富的并发编程框架和工具&#xff0c;使得开发者能够更轻松地处理并发任务。本文将介绍Golang中几种常用的并发编程…...

通过 oh-my-posh posh-git 优化PowerShell

转自oh-my-posh & posh-git 提升在 windows 环境的开发体验 oh-my-posh 是用于自定义 PowerShell 主题和配色的工具&#xff0c;posh-git 则是为 PowerShell 提供了方便的 git 状态显示和命令补全功能。 安装PowerShell 7和 winget下载器&#xff0c;都可以直接在 Microsof…...

【Linux系列】Vim 编辑器中的高效文本编辑技巧:删除操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

慧集通(DataLinkX)iPaaS集成平台-连接器

如何创建连接器&#xff1f; 连接器是用于跟各系统进行连接&#xff0c;是集成交互的基础构成也是主要构成之一&#xff1b;连接器一般是根据业务系统的开放的不同方式由开发人员进行封装&#xff0c;封装完成后交付人员可以在所有连接那里建立对应的连接&#xff0c;连接需要…...

vue3使用vue3-video-play播放m3u8视频

1.安装vue3-video-play npm install vue3-video-play --save2.在组件中使用 import vue3-video-play/dist/style.css; import VideoPlay from vue3-video-play;// 视频配置项 const options reactive({src: https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8, //视频源mute…...

单片机-外部中断

中断是指 CPU 在处理某一事件 A 时&#xff0c;发生了另一事件 B&#xff0c;请求 CPU 迅速去处理(中断发生)&#xff1b;CPU 暂时停止当前的工作(中断响应)&#xff0c; 转去处理事件 B(中断服务)&#xff1b;待 CPU 将事件 B 处理完毕后&#xff0c;再回到原来事件 A 被中断的…...

《C++11》右值引用深度解析:性能优化的秘密武器

C11引入了一个新的概念——右值引用&#xff0c;这是一个相当深奥且重要的概念。为了理解右值引用&#xff0c;我们需要先理解左值和右值的概念&#xff0c;然后再理解左值引用和右值引用。本文将详细解析这些概念&#xff0c;并通过实例进行说明&#xff0c;以揭示右值引用如何…...

【HTML+CSS+JS+VUE】web前端教程-1-VScode开发者工具快捷键

VScode打开文件夹与创建文件 1、选择文件夹 2、拖拽文件夹 生成浏览器文件.html的快捷方式 ! 回车vscode常用快捷键列表 代码格式化&#xff1a;shift alt F 向上或向下移动一行&#xff1a; alt up 或者 alt down 快速复制一行代码&#xff1a;shift alt up 或者 sh…...

【嵌入式硬件】直流电机驱动相关

项目场景&#xff1a; 驱动履带车&#xff08;双直流电机&#xff09;前进、后退、转弯 问题描述 电机驱动MOS管烧毁 电机驱动采用IR2104STRH1R403NL的H桥方案&#xff08;这是修改之后的图&#xff09; 原因分析&#xff1a; 1.主要原因是4路PWM没有限幅&#xff0c;修改…...

接口测试-postman(使用postman测试接口笔记)

一、设置全局变量 1. 点击右上角设置按钮-》打开管理环境窗口-》选择”全局“-》设置变量名称&#xff0c;初始值和当前值设置一样的&#xff0c;放host放拼接的url&#xff0c;key放鉴权那一串字符&#xff0c;然后保存-》去使用全局变量&#xff0c;用{{变量名称}}形式 二、…...

强化学习常用库的版本对应关系

本文介绍了pytorch强化学习框架和常用python库的对应关系。 持续更新中! 基础包 工具包版本描述python3.9.13-numpy1.24.3-protobuf3.19.6结构化数据包cython0.29.21静态编译器setuptools66.0.0-学习框架 工...

Unity 热更新基础知识

文章目录 1.一些名词2.三种编译方式3.Unity 两种脚本后端3.1 Mono3.2 IL2CPP3.3 对比 1.一些名词 IL&#xff08;Intermediate Language&#xff09;&#xff1a;中间语言&#xff08;类似于汇编代码&#xff09;CIL&#xff08;Common Intermediate Language&#xff09;&…...

JetBrains IDEs和Visual Studio Code的对比

JetBrains IDEs和Visual Studio Code的对比 JetBrains IDEs是捷克JetBrains公司开发的一系列集成开发环境(IDE)。以下是具体介绍:IntelliJ IDEA是JetBrains 公司的一款产品 主要产品 IntelliJ IDEA:一款功能强大且广泛应用的Java集成开发环境,有开源免费的社区版和商业收…...

C语言将点分十进制的IP字符串转成4个整数

最近在做lldp的snmp返回值时需要做这样的转换处理&#xff1a;C语言将点分十进制的IP字符串转成4个整数。 这里用两种方式&#xff1a; sscanf格式化处理用 inet_aton函数将ip字符串转成32位的整形&#xff0c;然后再根据bit转成对应的4个整数。 man命令可以确认下sscanf和i…...

慧集通(DataLinkX)iPaaS集成平台:数据流程的基本操作

流程搭建与发布 该功能下是我们集成的流程配置实现&#xff0c;在这里我们可以通过搭建一条条不同的流程来实现不同的业务场景。列表界面如下所示&#xff1a; 下面我们做一个业务场景的流程来具体讲解下该功能&#xff08;OA销售单推送T销售出库单场景&#xff09;。 首先…...