【小黑嵌入式系统第三课】嵌入式系统硬件平台(一)——概述、总线、存储设备(RAMROMFLASH)

news2025/1/17 0:27:55

上一课:
【小黑嵌入式系统第二课】嵌入式系统的概述(二)——外围设备、处理器、ARM、操作系统

文章目录

    • 一、概述
    • 二、总线
      • 1. 总线的概念
        • 1.1 总线结构
        • 1.2 总线类型
          • 1.2.1 数据总线
          • 1.2.2 程序总线
          • 1.2.3 数据地址总线
          • 1.2.4 程序地址总线
        • 2. 总线协议
          • 2.1 握手协议
          • 2.2 总线读写
          • 2.3 DMA
          • 2.4 多总线系统
          • 2.5 多总线系统实例
    • 三、存储设备
      • 3.1 嵌入式系统存储器子系统的结构
      • 3.2 RAM
        • 1、静态RAM
        • 2、动态RAM
        • SRAM vs DRAM
      • 3.3 ROM
      • 3.4 Flash


一、概述

嵌入式系统的硬件除了核心部件——嵌入式处理器,还包括存储器系统外围接口部件以及连接各种设备的总线系统。

其中,存储器是嵌入式系统存放数据和程序的功能部件;

而外围设备决定了应用于不同领域的嵌入式系统的独特功能。

在这里插入图片描述

嵌入式系统的硬件是 以嵌入式处理器为中心,由存储器、I/O单元电路、通信模块、其它外部设备 等必要的辅助接口组成。

在实际应用中,嵌入式系统硬件配置非常精简,除了微处理器和基本的外围电路以外,其余的电路可以根据需要和成本进行裁剪、定制。

通常,嵌入式系统还包括人机交互界面,用于系统与人的交互。人机界面常常使用键盘、液晶屏、触摸屏等部件,以方便与人的交互操作。

存储器是构成嵌入式系统硬件的必要组成部分。在嵌入式系统中使用的存储器可以只是内部存储器,也可以包含外部存储器。

嵌入式处理器工作时必须有附属电路支持。在设计其硬件电路时,常常将它们与嵌入式处理器设计成一个模块,形成处理器子系统。

嵌入式处理器在功能上与通用处理器的区别之一在于嵌入式处理器上集成了大量的I/O电路。用户在开发时,根据系统需求选择某款嵌入式处理器,而不是让嵌入式处理器另外选择配合外围的大量I/O电路。

在这里插入图片描述


二、总线

1. 总线的概念

**总线(Bus)**是计算机各种功能部件之间传输信息的公共通信干线,它是由导线组成的传输线束。根据所传输的信息种类,计算机的总线可以划分为 数据总线、地址总线和控制总线 ,分别用来传输数据、数据地址和控制信号。

所有微机系统的总线结构,不外乎有“冯·诺伊曼”和“哈佛”两种。

1.1 总线结构
  • 冯·诺伊曼总线结构将程序存储器和数据存储器合在一起管理,采用同一套地址和数据总线对它们进行寻址。因此总线就特别繁忙,成为提高运行速度的“瓶颈”。但在使用上非常灵活。
    在这里插入图片描述

  • 哈佛总线结构采用两套总线分别控制程序存储器和数据存储器,分别读取程序代码和存取数据。
    ☆ 降低了总线繁忙程度和指令执行的时间。
    ☆ 哈佛结构使得指令的执行时间相等,提高了控制性能。
    在这里插入图片描述

  • 改进型哈佛总线结构 虽然也使用两个不同的存储器:程序存储器和数据存储器,但合并了两个存储器的地址总线,数据总线也进行了合并,即原哈佛结构需要4条不同的总线,改进后需要两条总线。
    ☆ 使用两个独立的存储器模块,分别存储程序指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;
    ☆ 具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则用来完成程序存储模块或数据存储模块与CPU之间的数据传输;
    ☆ 两条总线由程序存储器和数据存储器分时共用。 在这里插入图片描述

1.2 总线类型
1.2.1 数据总线

数据总线的宽度又称为计算机的“位数”,是计算机系统一个最重要的参数。原因是数据总线的宽度表明了计算机系统能够一次(单指令)处理的数据的范围,代表了计算机系统处理数据的能力。
如:MCS-51单片机的数据总线宽度为8位,ARM Cortex-M3的数据总线宽度为32位。

1.2.2 程序总线

决定了CPU每次能够从程序存储器取出多少位的指令,或者说一条指令中能够含有多少信息。因此程序总线的宽度在很大程度上决定了计算机系统指令集的效率。

1.2.3 数据地址总线

数据地址总线配合数据总线,对数据存储器进行寻址。其宽度决定了CPU能够寻址的数据存储器的多少。

1.2.4 程序地址总线

程序地址总线配合程序总线,对程序存储器进行寻址。程序地址总线的宽度决定了微处理器理论上能够含有的程序存储器的多少。

以上概念主要描述的是并行通信总线,对于串行通信总线,则情况会有较多区别。
不管怎样,总线是各种功能部件之间传输信息的公共通道,总线上所接的功能部件一定是可以多于2个的。

2. 总线协议
2.1 握手协议
  • 总线握手协议的作用是控制每个总线周期中数据传送的开始和结束,从而实现两个设备间协调和配合,保证数据传送的正确和可靠。

  • 这是因为总线上连接有多个通信设备,它们之间若随意在总线上传送数据必然会导致冲突。
    最简单的握手使用两根用来进行握手的电线enq(表示查询)和ack(表示应答),并使用专用的电线来传输数据。

  • 握手信号线必须以某种方式的信号变化来表明整个总线传输周期的开始和结束,以及在整个周期内每个子周期(若有)的开始和结束。

总线握手协议中的基本构件是 四周期握手协议

在这里插入图片描述

2.2 总线读写
  • 微处理器总线在握手基础上为CPU和系统其它部分建立通信。基本的总线操作包括读和写。
    在这里插入图片描述

  • 总线行为经常用时序图来说明,时序图表示了总线上的信号如何随时间变化。
    在这里插入图片描述

  • 在许多系统中,总线上也可执行突发数据传输。

在这里插入图片描述

  • 总线事务的状态机是对时序图的有效补充。
  • 当CPU决定执行一个读事务,它转换到新状态,并发给让设备正确工作的总线信号;而设备状态转换图捕获它这一端的总线协议状态。

在这里插入图片描述

2.3 DMA

关于DMA的文章:【物联网】DMA传输原理与实现详解(超详细)

某些数据传输可能并不需要CPU介入,如I/O设备和存储器之间的数据交换。要实现这类操作,就要求有CPU以外的设备单元能够控制总线上的操作。

  • 直接存储器访问(Direct Memory Access,DMA)允许不由CPU控制的总线读写操作。
    虽然名字上有“存储器”,但DMA也可以适用于映射到地址空间上的别的I/O设备。
  • DMA使用一种称为DMA控制器的专用硬件来完成外设与存储器之间的高速数据传送。
  • DMA控制器向CPU请求总线控制,当CPU不需使用总线传输数据时,则DMA控制器得到总线控制权,它能像CPU那样提供存储地址和必要的读写控制信号,实现直接在设备和存储器之间执行读写操作。

在这里插入图片描述
DMA控制器、CPU都可以发起总线数据传输,它们被称为总线主设备,总线上的其它设备则称为总线从设备。
总线在一段时间内只能由一个主设备控制使用,若多个总线主设备同时需要使用总线,此时需要“仲裁”,由仲裁器决定哪一个使用。

2.4 多总线系统
  • 一个微处理器系统可能使用多条总线来连接设备。
    在这里插入图片描述
  • 使用这样的总线配置主要考虑到以下几个原因:
    1、高速总线通常提供较宽的数据连接。
    2、高速总线通常要更昂贵的电路和连接器,可以通过使用较慢的、比较便宜的总线来降低低速设备成本。
    3、桥允许总线独立操作,因此可以在I/O操作中提供并行性。
2.5 多总线系统实例

ARM AMBA(Advanced Microcontroller Bus Architecture)总线系统
在这里插入图片描述


三、存储设备

存储设备更加详细文章:【物联网】ROM、RAM和FLASH的区别

存储器用来存放计算机工作所必须的数据和程序,在嵌入式系统中普遍使用。

嵌入式微处理器在运行时,大部分总线周期都是用于对存储器的读/写访问。存储器系统性能的好坏将在很大程度上影响嵌入式系统的性能。

为了追求存储器的高性能,一方面要从存储单元的设计、制造上研究改进(Flash、NVRAM) ;另一方面从存储器系统的结构上探索、优化(3D堆叠,多通道)。

  • 嵌入式系统存储器子系统的结构 :
  • RAM
  • ROM
  • Flash

3.1 嵌入式系统存储器子系统的结构

  • 嵌入式系统的存储器子系统与通用计算机的存储器子系统的功能并无明显的区别。
  • 这决定了嵌入式系统的存储器子系统的设计指标和方法也可以采用通用计算机的方法,尤其是嵌入通用计算机的大型嵌入式系统更是如此。
  • 存储器子系统设计的首要目标是使存储器在工作速度上很好地与处理器匹配,并满足各种存取需要。

存储器子系统设计的首要目标是使存储器在工作速度上很好地与处理器匹配,并满足各种存取需要。

  • 大量使用高速存储器,使它们在速度上与处理器相吻合,能够简便地解决问题,但受到经济上的限制。
    在实际的计算机系统中,总是采用分级的方法来设计整个存储器子系统。
  • 全部存储系统分为四级,即寄存器组、高速缓存、内存和外存。它们在存取速度上依次递减,而在存储容量上逐级递增。
    在这里插入图片描述
    存储的分层体系:
    在这里插入图片描述
    存储的分层体系:
    在这里插入图片描述
    寄存器组:

寄存器组是最高一级的存储器。

  • 在计算机设备中,寄存器组一般是CPU内含的,ARM处理器中有37个寄存器。
  • 有些待使用的数据或者运算的中间结果可以暂存在这些寄存器中。
  • 微处理器在对CPU内的寄存器读写时,速度很快,一般在一个时钟周期内完成。
  • 从总体上说,设置一系列寄存器是为了尽可能减少微处理器从外部取数的次数。
  • 但由于寄存器组是制作在CPU内部的,受芯片面积和集成度、以及指令系统的限制,寄存器的数量不可能做得很多。

高速缓冲存储器(Cache)

第二级存储器是高速缓冲存储器(Cache)。

  • 高速缓存是一种小型、快速的存储器,其存取速度足以与微处理器相匹配。
  • 高速缓存保存部分内存内容的拷贝,这部分内容应是被高频率使用的。如果正确使用,它能够减少内存平均访问时间。

内存

第三级是内存。

  • 运行的程序和数据都放在内存中。
  • 如果微处理器的访问大部分在高速缓存上,内存就可以采用速度稍慢的存储器,对系统性能的影响不会太大,同时又降低了成本。
  • 内存除主要使用RAM外,还要使用一定量的ROM。

外存

最低一级存储器是大容量的外存。

  • 这种外存容量大,但是在存取速度上比内存要慢得多。
  • 目前嵌入式系统中常用闪存作为大容量“硬盘”存储各种程序和数据。

3.2 RAM

随机存取存储器(Random Access Memory,RAM)能够随时在任一地址读出或写入内容。

  • RAM的突出优点是读写方便、使用灵活。缺点是不能长期保存信息,一旦停电,所存信息就会丢失。但维持静态数据所需的功耗通常较低。
  • RAM用于数据的临时存储或缓冲存储,在嵌入式系统中主要用于:
    • 存放当前正在执行的程序和数据,如用户的调试程序、程序的中间运算结果以及掉电时无需保存的I/O数据和参数等。
    • 作为I/O数据缓冲存储器,如显示输出缓冲存储器、键盘输入缓冲存储器等。
    • 作为函数调用时传递参数和返回值的、以及中断服务中保护CPU现场信息的栈。

RAM分类:

1、静态RAM
  • 静态随机存储器(Static RAM,SRAM)的存储单元电路是以双稳态电路为基础,因此状态稳定,只要不掉电,信息不会丢失。存储一位需要花6个晶体管.
    异步SRAM读写时序:
    在这里插入图片描述
  • SRAM的操作方法有两种,即读操作和写操作。异步SRAM的操作是最简单的,如下:

异步SRAM上的读操作方法:

  • 将地址送到地址线上
  • 然后让CE’=0,启用SRAM
  • 让R/W’=1
  • 一定延迟时间后,数据通过数据信号线输出。

异步SRAM上的写操作方法:

  • 将地址送到地址线上

  • 让CE’=0,启用SRAM

  • 让R/W’=0

  • 数据送到数据线上

  • 让R/W’=1,在R/W’上升沿数据被写入存储器。

  • 存储芯片读取时间应小于CPU从发出地址到要求数据稳定的时间间隔;存储芯片从片选有效到输出稳定的时间应小于系统自片选有效到CPU要求数据稳定的时间间隔,或提供外部电路,以产生READY信号,迫使CPU插入等待时钟Tw (时序匹配) 。若内存速度过慢,CPU插入大量等待时钟Tw ,则内存拖慢了整体处理速度(速度匹配)。

  • 例如, Intel 2114-2的读取时间最大为200 ns,而CPU要求的从地址有效到数据稳定的时间间隔为150 ns,则不能使用2114-2,可选用比它快的芯片。如果出于价格因素,一定要用2114-2,则需要设计READY产生电路,以便插入Tw。

2、动态RAM
  • 动态随机存储器(Dynamic RAM,DRAM)的存储单元电路以小电容(几pF~几十pF)为基础,大容量的DRAM存储单元一般为1T1C(1晶体管1电容)结构,电路简单、集成度高。

  • 但DRAM即使不掉电也会因小电容放电而丢失信息,需要定时刷新(每行几us~十几us的刷新周期),因此在工作时必须配合DRAM控制器。

  • DRAM有很多类型,主要是接口方面的不同,内部存储单元基础则差别不大。(最老式的)异步接口的有FPM DRAM、EDO DRAM,同步接口的有SDR SDRAM、DDR~DDR6 SDRAM。这些产品均有在产及应用。

在这里插入图片描述
对DRAM的操作除了一般的读写之外,还有刷新等必需的操作。有了DRAM控制器可以极大地释放CPU直接操作DRAM的负担,同时实现高可靠性。

EDO DRAM读时序
在这里插入图片描述

SRAM vs DRAM
  • SRAM不需要刷新电路即能保存它内部存储的数据,DRAM每隔一段时间,要刷新充电一次,否则内部的数据即会消失。
  • SRAM速度快,不必配合内存刷新电路,可提高整体的工作效率。
  • SRAM集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,而且价格较高。
  • 因为DRAM需要定时刷新,消耗能量相对大;而SRAM在系统进入待机工作方式时,只需要微小的待机电流就可以维持数据不丢失。但需要注意的是,SRAM的静态功耗低,但是工作时动态功耗不低。
  • 例如:cache追求的是速度所以选择SRAM,而内存则追求容量所以选择能够在相同空间中存放更多内容并且造价相对低廉的DRAM。

3.3 ROM

只读存储器(Read-Only Memory,ROM)中的内容一经写入,在工作过程中就只能读出不能重写,即使掉电,写入的内容也不会丢失。

  • ROM在嵌入式系统中非常有用,常常用来存放系统软件(如ROM BIOS)、应用程序等不随时间改变的代码或数据。
  • ROM可以分为工厂可编程ROM现场可编程ROM两大类。
    • 工厂可编程ROM(即掩模可编程ROM,Mask-Programmable ROM)是由半导体厂商按照用户要求掩模制成,之后不能改写,用户只能读出、不能改写。掩模ROM一般只用于大批量生产的计算机产品中,在产品研制和实验室小批量生产时,应选用现场可编程ROM。
    • 有几种不同类型的现场可编程ROM(Field Programmable ROM),一些只可编程一次(OTP),而另一些可以被重复编程。
      • 可编程ROM(Programmable ROM),为一般的术语。

      • 紫外线可擦可编程ROM(UV Erasable Programmable ROM, UV_EPROM)
        在这里插入图片描述

      • 电可擦可编程ROM(Electrical Erasable Programmable ROM, EEPROM)

3.4 Flash

快闪存储器、闪存(Flash Memory)是一种电可擦可编程ROM存储器,现今被广泛使用于内存和外存。

  • Flash的特点:

    • 在不加电情况下能长期保存信息,同时又能在线进行快速擦除与重写。
    • 从软件的观点来看,由于可以使用一套相似的软件接口,Flash和EEPROM的技术十分类似(虽然电路结构不同)。
  • 闪存与 EEPROM的区别:

    • 有些EEPROM擦写和编程时要加高电压(如12V),这意味着重新编程时必须将芯片从系统中取下来;而Flash使用标准供电电压擦写和编程,允许芯片在标准系统内部编程(在系统可编程ISP、在应用可编程IAP) 。
    • EEPROM可以单独擦写某个存储单元,操作起来很方便;Flash则必须擦除一个存储块,然后再写入新数据到这个块中,因此需要保存和重写此块中被迫被擦除的内容。
    • 大部分Flash允许某些块被保护,这一点对存储空间有限的嵌入式系统非常有用,即将引导代码放进保护块内而允许更新设备上其它的存储块。
    • EEPROM通常容量较小,Flash则可以有非常大容量。

Flash与各种存储器技术的比较:
在这里插入图片描述

  • Flash的分类:

    • NOR Flash是在EEPROM的基础上发展起来的,它的存储单元由N-MOS构成,而连接N-MOS单元的线是独立的。NOR Flash可以随机读取任意单元的内容,有SRAM形式的接口,适合于程序代码的并行读取,常用于制作计算机的BIOS存储器和微控制器的内部存储器等。
    • NAND Flash是将几个N-MOS单元用同一根线连接起来,适合按顺序读取存储单元的内容,适合于数据或文件的存储。
  • Flash的操作包括读出和写入:

    • 读操作:处理器只要提供地址、读操作信号和片选信号,存储器就返回在该位置保存的数据。大部分的Flash在系统重启时自动进入读状态,启动读状态不需要特别的初始化序列。
    • 写操作:把程序或数据写入Flash的过程也叫作编程。Flash的编程有两种方式,一种是在线编程,一种是离线编程。
  • Flash的编程:

    • 存储位置必须在重写操作之前被擦除。如果旧的数据没有被擦除,写操作的结果会是新旧数值的某种逻辑组合,存储的数据通常是错误的。
    • 一次至少有一个扇区或者块被擦除,而不可能只是擦除一个单个的字节。
    • 擦除旧数据和写入新数据的操作过程是随着芯片制造商的不同而异的。因此针对Flash编程,提供一个软件层来完成擦除和写入操作比较方便,这个软件层叫作Flash的驱动程序。
  • Flash的嵌入式应用:

    • Flash文件系统:因为Flash提供了可被重写的非易失性存储,因此它可以被看作类似于硬盘的存储系统。在作为文件系统的情况下,由驱动程序提供的函数要更加面向文件,提供诸如open()、close()、read()、write()等标准文件系统函数。Flash文件系统的组织与普通的外存基本相同。
    • 便携设备的存储装置:随着数码产品的飞速发展,利用其大容量非易失的特点,Flash作为一种最常用的存储装置应用于数码相机(如CF卡、SD卡、记忆棒等)、MP3等数码产品中。但有的设备并不一定需要将Flash组织成文件系统。
    • 内存中的ROM:存储程序代码和常数,还可以实现ISP或IAP。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

new Object()到底占用几个字节

Java内存模型 对象内存中可以分为三块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding),以64位操作系统为例(未开启指针压缩的情况)Java对象布局 如下图所示: 其中对象头中的Mark Word中的详细信息在文章synchr…

地下水与饮用水提标处理树脂

随着饮用水和地下水污染物检测技术水平的不断提高,世界各国管理机构跟踪监测的水体污染数目也不断增加。近年来,针对砷、高氯酸盐和铀等水体污染物,新的强化控制措施不断的付诸实施。此外,用氯化物及其衍生物进行水体消毒会带来诸…

leetcode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些…

【ajax】withCredentials

默认值:false。在获取同域资源时设置 withCredentials 没有影响。 true:在跨域请求时,会携带用户凭证 false:在跨域请求时,不会携带用户凭证;返回的 response 里也会忽略 cookie ajax中的作用 跨域请求时…

药物滥用第一篇介绍

AMP: Ampicillin,中文名氨苄青霉素,同义名氨苄西林,一种β-内酰胺类抗生素,属于青霉素家族的一员,化学式为C16H19N3O4S,可治疗多种细菌感染。 氨苄西林为半合成的广谱青霉素(结构如上…

基于单片机设计的家用自来水水质监测装置

一、前言 本文介绍基于单片机设计的家用自来水水质监测装置。利用STM32F103ZET6作为主控芯片,结合水质传感器和ADC模块,实现对自来水水质的检测和监测功能。通过0.96寸OLED显示屏,将采集到的水质数据以直观的方式展示给用户。 随着人们对健…

Unity DOTS World Entity ArchType Component EntityManager System概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面地几个关键概念,方便大家上手学习掌握Unity DOTS开发。 Unity DOTS 中所有的Entities 都是被放到World世界中。每个Entity在它所在的World里面有唯一不同的ID号来区分。DOTS项目中可以同时有多个World。每个W…

04 接口隔离原则

官方定义 <<代码整洁之道>>作者罗伯特 C马丁 为 “接口隔离原则” 的定义是&#xff1a;客户端不 应该被迫依赖于它不使用的方法&#xff08;Clients should not be forced to depend on methods they do not use&#xff09;。 该原则还有另外一个定义&#xff1…

【Proteus仿真】【STM32单片机】太阳能追光系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶、光敏传感器、PCF8591 ADC模块、按键模块、28BYJ48步进电机驱动模块、直流电机模块等。 主要功能&#xff1a; 系统运行后&#x…

网络工程师知识点6

91、3、IP ABC类私有地址和个数 A类私有地址1个&#xff1a;10.0.0.0/8 B类私有地址16个&#xff1a;172.16.0.0~172.31.0.0/16 C类私有地址256个&#xff1a;192.168.0.0~192.168.255.0/24 92、拥塞管理机制的实现过程分为哪两步&#xff1f; 第一步&#xff1a;将准备从一个…

MATLAB中sos2tf函数用法

目录 语法 说明 示例 二阶节系统的传递函数表示 sos2tf函数的功能是将数字滤波器的二阶节&#xff08;section&#xff09;数据转换为传递函数形式。 语法 [b,a] sos2tf(sos) [b,a] sos2tf(sos,g) 说明 [b, a] sos2tf(sos) 返回由 sos 描述的离散时间系统的传递函数系…

璟丰机电丨Parker派克江苏代理商 供应高品质驱动器和电机产品

苏州璟丰机电有限公司是一家专注于工业自动化领域的系统集成商&#xff0c;为客户提供非标自动化系统的设计研发、量身定做、批量生产等非标自动化解决方案&#xff0c;并代理这世界一流品牌的美国Parker派克。 派克Parker是全球领先的运动和控制技术与系统多元化制造商&#…

Minio 文件上传(后端处理同文件判断,同一文件秒传)

记录minio 文件上传 MinIO提供多个语言版本SDK的支持&#xff0c;下边找到java版本的文档&#xff1a; 地址&#xff1a;https://docs.min.io/docs/java-client-quickstart-guide.html maven依赖如下&#xff1a; XML <dependency><groupId>io.minio</groupId…

openHarmony新建项目及本地模拟机配置

新建项目 新建项目 选择空模板 选择一个非中文路径 在新建项目过程中可能会存在杀毒软件报病毒信息&#xff0c;建议退出退出杀毒软件 直到右侧窗口出现 Previewer预览选项&#xff0c;证明项目搭建完成 相关常用文件及文件夹解析 实时预览 调整预览设备类型 …

CSS3 渐变

CSS3 渐变可以让你在两个或多个指定的颜色之间显示平稳的过渡。 CSS3渐变有两种类型&#xff1a;线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial Gradients&#xff09;。 线性渐变&#xff08;Linear Gradients&#xff09;&#xff1a; 线性…

数据抓取代码示例

以下是一个使用lua-http和Lua编写的爬虫程序&#xff0c;用于爬取内容。此程序使用了https://www.duoip.cn/get_proxy的代码。 -- 引入lua-http库 local http require "http" ​ -- 定义get\_proxy函数 local function get_proxy()-- 使用https://www.duoip.cn/get…

idea jrebel热部署插件免费激活

介绍 jrebel是一款热部署的插件 idea上原生是不支持热部署的&#xff0c;一般更新了 Java 文件后要手动重启 Tomcat 服务器&#xff0c;才能生效&#xff0c;我们可以使用jrebel来热部署。 安装jRebel 在plugin中&#xff0c;选中marketplace&#xff0c;搜索jrebel&#x…

Window 窗口函数 (Spark Sql)

在 Spark SQL 中&#xff0c;Window 函数是一种用于在查询结果集中执行聚合、排序和分析操作的强大工具。它允许你在查询中创建一个窗口&#xff0c;然后对窗口内的数据进行聚合计算。 import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions…

AnHookd Hook

1.Hook Hook译为“钩子”&#xff0c;就是在事件传送到终点前截获并监控事件的传输&#xff0c;像个钩子钩上事件一样&#xff0c;并且能够在钩上事件时处理一些自己特定的事件。 Android操作系统有一套自己的事件分发机制&#xff0c;所有的代码调用和回调都是按照一定顺序执…

MyBatis涉及的动态SQL

动态 SQL 提供了更大的灵活性和可重用性&#xff0c;可以根据不同情况生成不同的 SQL 语句&#xff0c;从而满足应用程序的需求。它简化了数据库操作的编写和管理&#xff0c;提高了开发效率和代码的可维护性。 <if> 用于条件判断&#xff0c;根据条件决定是否包含某个SQ…