《微机原理与接口技术》第 8 章 常用接口芯片
8.1 可编程定时/计数器8253/8254
8.1.1 8253的外部引脚及内部结构
8.1.2 8253的工作方式
8.1.3 8253的方式控制字和读/写操作
8.1.4 8253的初始化编程及应用
8.1.5 可编程定时/计数器8254
……
8.2 可编程并行接口8255
8.2.1 并行通信的概念
(1)并行通信与串行通信
数据通信:随着多计算机系统的应用和计算机网络的发展,计算机与外部设备之间,计算机与计算机之间常常要进行数据交换,这些数据交换可称为数据通信。
数据通信方式有两种:并行通信、串行通信。
并行通信:指数据的各位同时进行传送的通信方式,可以字或字节为单位并行进行。
并行通信速度快,但所用的通信线多、成本高,故不宜进行远距离通信。计算机内部各种总线都是以并行方式传送数据的。(近距离、大量、快速数据通信)
串行通信:指数据逐位顺序传送的通信方式。
串行传送的速度低,但只需要很少的通信线,适用于长距离而速度要求不高的场合。在网络中传送数据纯大多数采用串行方式。
(2)并行接口
无论是并行通信还是串行通信,它们在I/O接口与CPU之间的通信而言,均是以并行通信方式传送数据的。
并行通信由并行接口完成,它以字节(或字)为单位与I/O设备或被控对象进行数据交换,以同步方式传输。
例如打印机接口,A/D、D/A转换器接口,IEEE 488接口,开关量接口,控制设备接口等。
从并行接口的电路结构来看,它有硬连线接口和可编程接口之分。
硬连线接口的工作方式及功能用硬连线的不同方式来设定,不能用软件编程的方法加以改变;
可编程接口的工作方式及功能可以用软件编程的方法加以改变。
本节将对可编程并行接口8255进行讨论。
一个并行接口中包括状态信息、控制信息和数据信息,这些信息分别存放在状态寄存器、控制寄存器和数据缓冲寄存器中。
① 状态寄存器
状态寄存器用来存放外设的信息,CPU通过访问这个寄存器来了解某个外设的状态,进而控制外设的工作,以便与外设进行数据交换。
② 控制寄存器
并行接口中有一个控制寄存器和一个状态寄存器,CPU对外设的操作命令都寄存在控制寄存器中,状态寄存器主要是用来提供外设的各种状态位,以供CPU来查询。
③ 数据缓冲寄存器
在并行接口中还设置了输入缓冲寄存器和输出缓冲寄存器,缓冲器是用来暂存数据的。这是因为外设与CPU交换数据时,CPU的速度远远高于外设的速度。例如,打印机的打印速度与CPU的速度相差的远不止一个数量级。在并行接口中设置缓冲器,把要传送的数据先放入缓冲器中,打印机按照安排好的打印队列进行打印,这样可以保证输入、输出数据的可靠性。
图8.1是一个典型的并行接口与CPU、外设的连接图。
(3)数据输入过程
数据输入过程是指外设向CPU输入数据的过程。
① 当外设将数据通过数据输入线送给接口时,先使状态线“输入数据准备好”为高电平,然后通过接口把数据送到输入缓冲寄存器中,同时把“输入应答”信号置成高电平1发给外设。
② 外设接到应答信号后,将撤销“输入数据准备好”信号。在接口收到数据后,它会在状态寄存器中设置“准备好输入”状态位,以便CPU对其进行查询。
③ 接口向CPU发出一个中断请求信号,这样CPU可以用软件查询方式或中断的方式将接口中的数据输入到CPU中。
④ CPU在接收到数据后,将“准备好输入”的状态位自动清除,并使数据总线处于高阻状态,准备外设向CPU 输入下一个数据。
(4)数据输出过程
数据输出过程是指CPU向外设输出数据的过程。
① 当外设从接口接收到一个数据后,接口的输出缓冲寄存器“空”,使状态寄存器的“输出数据准备好”状态位置成高电平1,这表示CPU可以向外设接口输出数据,这个状态位可供 CPU查询。
② 此时接口也可向CPU发出一个中断请求信号,同上面的输入过程相同,CPU可以用软件查询方式或中断的方式将CPU中的数据通过接口输出到外设中。当输出数据送到接口的输出缓冲寄存器后,再输出到外设。
③ 与此同时,接口向外设发送一个启动信号,启动外设接收数据。外设接收到数据后,向接口回送一个“输出应答”信号。
④ 接口接收到该信号后,自动将接口状态寄存器中的“准备好输出”状态位重新置为高电平1,通知CPU可以向外设输出下一个数据。
8.2.2 8255外部引脚及内部结构
8255是Intel公司生产的一种通用的可编程并行I/O接口芯片,它有3个并行I/O口,又可通过编程设置多种工作方式,价格低廉,使用方便,可以直接与Intel系列的芯片连接使用,在中小系统中有着广泛的应用。
在IBM-PC/XT系列微机中,8255接口用于接收键盘输入的扫描码和系统配置的 DIP开关状态,以及用于扬声器控制和存储器奇偶校验。
(1)8255内部结构
8255是一个40根引脚的双列直插式组件,内部结构:
① 3个8位I/О数据端口:A口、B口、C口。
② 1个8位的控制端口。
8255的内部结构如图8.2所示:
① 面向CPU的接口电路
a. 数据总线缓冲器:数据总线缓冲器是一个三态双向的8位缓冲器,是8255与系统数据总线的接口。与此关联的接口信号线是数据线D7~D0,它直接与CPU数据总线相连,以实现CPU与8255接口之间的信息传递。CPU向8255写入控制字或从8255中读状态信息,,以及所有数据的输入和输出,都需要通过数据缓冲器来进行传递。
b. 读/写控制逻辑:读/写控制逻辑是8255内部完成读/写控制功能的部件,它接收来自CPU的地址和控制信号,并依据这些信号,通过内部控制逻辑向8255的各功能部件发出读/写控制命令,用于管理数据、控制字或状态字的传送。与此部分有关的有6根信号线:片选信号~CS,读信号~RD,写信号~WR,端口选择信号A1、A0,以及 RESET复位信号。
② 面向外设的接口电路
8255提供了3个输入/输出通道可与外部设备相连接。每一个通道有一个8位的数据端口用于输入和输出,其工作方式可由编程设定,具体介绍如下。
a. 端口A:包含一个8位的数据输出锁存/缓冲器和一个8位的数据输入锁存器,与之关联的接口线是PA7~PA0。
b. 端口B:包含一个8位的数据输入/输出、锁存/缓冲器和一个8位的数据输入缓冲器,与之关联的接口线是PB7~PB0。
c. 端口C:包含一个8位的数据输出锁存/缓冲器和一个8位的数据输入锁存器。必要时端口C可分成两个4位端口,分别与端口A和端口B配合工作,以输出控制信号,或者接收从外设输入的状态信号,与之关联的接口线是PC7~PC0。
③ 内部控制逻辑
内部控制逻辑:A组控制部件、B组控制部件。
A组控制部件:控制端口A和端口C的高4位(PC7~PC4);
B组控制部件:控制端口B和端口C的低4位(PC3~PC0)。
控制逻辑内部设置了一个控制寄存器,接收来自CPU的控制字(一个字节),根据控制字的内容决定各数据端口的工作方式。也可以根据控制字对端口C的每一位进行置位和复位。控制寄存器的内容只能写入而不能读出。
(2)8255的引脚功能
8255芯片有40根引脚,各引脚信号如图8.3所示。
8255的各引脚功能定义如下。
D7~D0(输入/输出、三态):双向三态数据线,用来传送数据、控制字和状态字等信息,直接与系统数据总线相连。
RESET(输入):复位信号,高电平有效。当它有效时,所有寄存器,包括控制寄存器的内容全部清零,A口、B口、C口均被设定为输入方式。
A1、A0(输出):端口选择信号。8255内部共有4个端口,即3个数据端口(A口、B口、C口)和一个控制端口(控制寄存器),它们可由程序寻址。A1、A0的不同编码可分别寻址上述4个端口,它们与片选信号~CS一起决定8255各端口的地址,规定A1A0为00、01、10、11时,分别选中端口A、端口B、端口C、控制端口。A1、A通常与系统总线的低位地址线相连。
~RD(输入):读信号,低电平有效。当它为低电平时,CPU 从 8255中读取数据或状态信息。通常接系统总线的~IOR信号。
~WR(输入):写信号,低电平有效。当它为低电平时,CPU将数据或命令字写入8255。通常接系统总线的~IOW信号。
~CS(输入):片选信号,低电平有效。当它为低电平时,选中8255芯片。通常由系统总线的高位地址线经译码得到。
A1A0和~RD、~WR、~CS信号相配合可对各端口进行输入/输出访问,其组合逻辑功能如表8.1所示。
PA7~PA0(输入/输出、三态):A口的8根输入/输出信号线。可用软件编程决定这8条线是工作于输入、输出还是双向方式。
PB7~PB0(输入/输出、三态):B口的8根输入/输出信号线。可用软件编程指定这8条线作输入还是输出。
PC7~PC0(输入/输出、三态):C口的8根输入/输出信号线。这8条线根据其设定的工作方式可作输人或输出线使用,也可用作控制信号的输出或状态信号的输入。
8.2.3 8255的工作方式
8255提供如下3种工作方式。
(1)方式0———基本输入/输出方式
(2)方式1———选通输入/输出方式
(3)方式2———双向传送方式。
端口A:可工作于3种工作方式(方式0、方式1、方式2);
端口B:可工作于两种工作方式(方式0、方式1);
端口C:可工作于方式0。
端口C常常根据控制命令分成两个4位端口,每个4位端口包含一个4位的输入缓冲器和一个4位的输出锁存器,它们分别配合A口和B口输出控制信号和输入状态信号。
(1)工作方式0(基本输入/输出方式)
它适用于简单的无条件输入/输出数据或查询式输入/输出数据的场合。
① 无条件数据的传送过程中:输入/输出数据随时都处于准备好状态,8255与CPU及外设之间无须交换应答(握手)信号;
② 查询式数据的传送过程中:需要有应答信号,通常A口与B口作为输入/输出数据端口,而C口分为两个4位端口分别作为控制信号输出口和状态信号输入口,用于配合A口和B口的查询式数据传送。
当A口、B口、C口都工作于方式0时,8255各口的输入/输出有16种组合,如表8.2所示。
(2)工作方式1(选通输入/输出方式)
……
(3)工作方式2(双向输入/输出方式)
……
8.2.4 方式控制字及状态字
(1)8255的控制字
8255有3种基本工作方式,而且对C口各位又可以进行按位操作。
CPU通过向8255内部的控制寄存器写入不同的控制字来选择不同的工作方式和位操作。
① 方式控制字
方式控制字用来决定8255的工作方式。它将3个通道分为两组:即A口和C口的高4位作为一组(A组),B口和C口的低4位作为一组(B组)。
方式控制字的格式如图8.10所示。
② C口置位/复位控制字
置位/复位控制可对C口中的任意一位进行置位或者复位操作。该控制字各位定义如图8.11所示。
(2)8255的状态字
8255的状态字为查询式输入/输出数据提供了外设的工作状态,如IBF、~OBF、INTR等。根据8255工作在不同的工作方式下,以及各端口作输入、输出的不同情况,状态字的格式有所不同。值得注意的是,C口的状态字与C口各位对外的引脚状态不完全一致。
当8255的A口、B口工作在方式1或A口工作在方式2时,通过读C口的状态,可以检测A口和B口的状态。
当8255的A口和B口均工作在方式1的输入时,由C口读出的8位数据各位的意义如图8.12所示。
当8255的A口和B口均工作在方式1的输出时,由C口读出的状态字各位的意义如图8.13所示。
当8255的A口工作在方式2时,状态字各位的意义如图8.14所示。
8.2.5 8255与CPU的连接
8255占用4个I/O端口地址,即A口、B口、C口和控制寄存器。
在8255的连接使用中:
① 它的8根数据线D7~D0与系统数据总线相连。
② A1、A0分别接地址总线的A1和A0。
③ 地址总线高位A15~A2经译码器译码后接片选信号~CS。
④ 控制信号线RESET、~RD、~WR分别与系统控制总线的RESET、~IOR、~IOW信号相连,如图8.15所示。
8.2.6 8255应用举例
8255A初始化时,先要写入控制字,以指定它的工作方式,然后才能通过编程,将总线上的数据从8255A输出给外设,或者将外部设备的数据通过8255A送到CPU中。
【例8.1】利用8255方式0实现打印机的接口
打印机可以打印计算机送来的 ASCII码字符。因为ASCII码为8位,所以我们利用8255A口的工作方式0来实现打印机与CPU之间的并行输出接口,8255与打印机的连接示意图如图8.16所示。
假设,8255由地址译码决定的A口、B口、C口及控制寄存器的端口地址分别为380H、381H、382H、383H。用A口的 PA7~PA0与打印机的D7~D0相连,作为打印字符的输出数据线。
当接口将数据送至打印机的输入线D7~D0上时,利用一个负的锁存脉冲~STROBE将数据锁存于打印机内部,并开始打印处理。同时,打印机送出高电平的BUSY信号,表示打印机正忙,一旦 BUSY变为低电平,则表示打印机又可以接收新的数据了。
在实现打印机接口时,可以设置A组、B组均工作在方式0下,使A口的PA7~PA0与打印机的D7~D0相连,并利用C口的PC6作为输出信号接打印机的选通端~STROBE,PC2作为输入信号接打印机的忙信号BUSY。
由此可以作如下的初始化:A口为输出,C口的高4位为输出、低4位为输入,B口保留,A、C口均工作于方式0。
初始化程序如下:
MOV AL,1 00 00 001B ;将控制字送AL中1 00 00 001B
MOV DX,0383H ;将控制寄存器端口地址送DX中
OUT DX,AL ;设置控制寄存器内容——决定工作方式MOV AL, 00001101B ;将PC6设置为1
OUT DX, AL ;设置控制寄存器内容——决定C口的内容
若要将BL中的字符送到打印机输出,则可用下面程序来完成。
MOV DX,0382H ;将C口地址送DX中
PWAIT:IN AL, DX ;输入C口数据AND AL,04H ;测试 PC2JNZ PWAIT ;忙则等待MOV AL,BL ;将BL中的打印字符送回AL中MOV DX, 0380H ;将A口地址送DX中OUT DX, AL ;将AL字符送出打印MOV AL,0CHMOV DX,383HOUT DX,AL ;设置C6为0INC ALOUT DX,AL ;设置C6为1
利用下面一段程序,可以完成一批字符数据的打印输出。假设要打印的字符串位于当前数据段从DATA 开始的内存区域中,字符串长度在 BLAK单元中。
PRINT: MOV AL,BLAKMOV CL,ALMOV SI,OFFSET DATA
GOON: MOV DX,0382H
PWAIT:IN AL, DXAND AL,04HJNZ PWAITMOV AL,[SI]MOV DX, 0380HMOV DX, ALMOV AL,00HMOV DX,0382HMOV DX,ALNOPNOPMOV AL,40HMOV DX,ALINC SIDEC CLJNZ GOONRET
【例8.2】……
【例8.3】……
8.3 可编程串行接口8251
8.3.1 串行通信概述
8.3.2 8251的外部引脚及内部结构
8.3.3 8251的控制字及其工作方式
8.3.4 8251串行接口应用举例
……
8.4 模拟I/O接口
8.4.1 DAC及其与CPU的接口
8.4.2 ADC及其与CPU的接口
……
8.5 例题解析
……
8.6 本章实验项目
……
相关文章:
《微机原理与接口技术》第 8 章 常用接口芯片
8.1 可编程定时/计数器8253/8254 8.1.1 8253的外部引脚及内部结构 8.1.2 8253的工作方式 8.1.3 8253的方式控制字和读/写操作 8.1.4 8253的初始化编程及应用 8.1.5 可编程定时/计数器8254 …… 8.2 可编程并行接口8255 8.2.1 并行通信的概念 (1)…...
upload-labs靶场通关详解:第12-13关
目录 第12关:get00截断 一、分析源代码 二、解题思路 三、解题步骤 第13关:post00截断 一、分析源代码 二、解题思路 三、解题步骤 第12关:get00截断 一、分析源代码 $is_upload false; $msg null; if(isset($_POST[submit])){$ex…...
YOLO模型初次训练体验(+实测)
1.训练目的 做一个简单的示例,本次训练的目的希望模型能够识别桌面的两个图标。(主要是方便准备数据) 2.数据准备 安装一个截图软件,在桌面不同分辨率,不同背景的情况下,随机调整两个图标的位置并截图保存。 原始图片: 先为截图批量重命名: 使用重命名工具,设置命…...
OSA实战笔记二
本文是我在实际项目开发中,总结和归纳的笔记,主要记录了OSA常用的参数释义。 OSA的Params 1、Scroll Sensivity 对⿏标滚轮(或类似)输⼊的敏感度,与通过滚动条拖动或滚动⽆关。 2、Scroll Sensivity On X Axis 对…...
OSI 网络七层模型中的物理层、数据链路层、网络层
一、OSI 七层模型 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 1. 物理层(Physical Layer) 功能:传输原始的比特流(0和1),通过物理介质(如电缆、光纤、无线电波)…...
如何自学FPGA设计?
众所周知,FPGA设计自学难度不小,更不存在速成的捷径。这里简单说一下学习的规划,希望能给入门者提供一些方向。 学会相应的知识 不论是科班毕业还是理工科专业出身,想要入行FPGA开发,基础知识必须扎实。尤其是在高校…...
leetcode 合并区间 java
用 ArrayList<int[]> merged new ArrayList<>();来定义数组的list将数组进行排序 Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));如果前面的末尾>后面的初始,那么新的currentInterval的末尾这两个数组末尾的最大值,即…...
如何将内网的IP地址映射到外网?常见方法及详细步骤
自己计算机搭建网络端口服务,或公司内部本地服务器部署项目后,如果同时需要提供异地互联网上连接使用,就需要将内网IP地址映射到外网上。 将本地网络的内网 IP 地址映射到外网,通常是为了允许外部网络访问内网中的特定服务&#…...
Node.js AI 通义灵码 VSCode 插件安装与功能详解
Node.js 作为基于 Chrome V8 引擎的 JavaScript 运行时,使 JavaScript 成为后端开发的重要选择。 在 Node.js 开发中,使用高效的工具可以显著提升开发效率和代码质量。 通义灵码作为一款智能编码助手,为 Node.js 开发者提供了强大的支持。 …...
Linux中的 I/O 复用机制 select
第一部分:select 基本概念 1.1. I/O 复用的提出:并发处理的挑战 在传统的网络服务模型中,服务器为每一个客户端连接创建一个独立的线程或者进程来处理。这种模式在并发连接数量较少时或许尚能应对,但当并发量显著增大时…...
再议AOI算法
AOI算法优化 首先,需要知道AOI(Area of Interest)是什么。AOI通常用于游戏或者分布式系统中,用来管理玩家或对象的视野范围,只关注感兴趣区域内的其他对象,减少不必要的通信和数据传输。 整理思路 如文章…...
Unreal5 从入门到精通之如何实现 离线语音识别
文章目录 前言将语言服务器作为外部进程运行UE 项目设置开始捕获语音同时运行服务器进程和游戏进程将 SoundWave 而不是麦克风作为输入将数据发送到语言服务器节点的工作原理详细文档前言 今天我们要说的是一个语音转文本(STT)的插件 Offline Speech Recognition, 它支持离线…...
form-create-designer中$inject参数的数据结构及各项属性说明
FcDesigner 是一款基于Vue的开源低代码可视化表单设计器工具,通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。 …...
WHAT - CSS 中的 min-height
文章目录 语法常见用途1. 防止元素被压缩得太小2. 配合 Flexbox 保证高度3. 用于内容区域动态撑高但不塌陷 与其他属性的区别提示 在 WHAT - CSS 中的 min-width 中我们已经详细介绍过 width。对于高度, CSS 同样提供一个 min-height. min-height 是 CSS 中用于设置…...
畅游Diffusion数字人(30):情绪化数字人视频生成
畅游Diffusion数字人(0):专栏文章导航 前言:仅从音频生成此类运动极具挑战性,因为它在音频和运动之间存在一对多的相关性。运动视频的情绪是多元化的选择,之前的工作很少考虑情绪化的数字人生成。今天解读一个最新的工作FLOAT&…...
PLC系统中开关量与模拟量信号解析
引言 在现代工业自动化进程中,可编程逻辑控制器(PLC)凭借其强大的功能与灵活性,成为工业控制系统的核心设备。PLC能够高效、精准地控制工业生产流程,很大程度上依赖于其对开关量和模拟量信号的处理能力。深入理解这两…...
Qt中解决Tcp粘包问题
Qt中解决Tcp粘包问题 Qt中解决Tcp粘包问题——以文件发送为例服务器端客户端效果演示注意点 Qt中解决Tcp粘包问题——以文件发送为例 创建的工程如下图所示: 服务器端 界面的布局以及名称如下图所示: 并且在Qt中增加网络模块 QT core gui n…...
Qt调用librdkafka
Qt调用librdkafka Windows系统编译Qt使用的kafka(librdkafka) VS2017编译librdkafka 2.1.0 经过上面的步骤我已经编译好了librdkafka库,我编译的主要十release版的,需要debug版的小伙伴编译的时候要留意一下。 接下来就是调用我们编译的kafka库了。 一、环境介绍 Qt:…...
深入解析Node.js文件系统(fs模块):从基础到进阶实践
文章目录 引言一、核心能力解析1.文件读写操作2.文件复制方案对比3.文件监控机制 二、扩展知识体系1.高级文件操作2.性能优化策略3.安全实践指南 三、最佳实践总结 引言 在 Node.js 生态系统中,fs 模块是与文件系统交互的核心工具。本文将通过代码示例和实践经验&a…...
9、AI测试辅助-代码Bug分析提示词优化
AI测试辅助-优化代码Bug分析提示词 Bug分析1、优化代码2、根据报错结果定位 Bug分析 利用AI优化代码Bug,有两种方式,一种是优化潜在的问题,一种是根据执行后的报错进行查找定位优化。其中如何用好提示词是关键 1、优化代码 常见需要优化的…...
AI无法解决的Bug系列(一)跨时区日期过滤问题
跨时区开发中,React Native如何处理新西兰的日期过滤问题 有些Bug,不是你写错代码,而是现实太魔幻。 比如我最近给新西兰客户开发一个React Native应用,功能非常朴素:用户选一个日期范围,系统返回该范围内…...
leetcode 153. Find Minimum in Rotated Sorted Array
题目描述 分析 可以发现一个规律: 假如整个数组最后一个元素是x。 最小值左侧(不含最小值自己)的元素全部大于x。 最小值右侧(包含最小值自己,不包含x)的元素全部小于x。 如果整个数组是有序的&#x…...
Brave 连接 Websocket 失败
前提: websocket 的服务启动正常连接的url是: ws://localhost: 15000/[子url] 在 Brave 浏览器的 console 中看到错误: WebSocket connection to ws://localhost:15000/ws failed:解决方法(Brave 浏览器专用) 方法 1:关闭 Brave 的 Shiel…...
【设计模式】基于 Java 语言实现工厂模式
目录 一、简单工厂模式 1.1 简单工厂模式的介绍 二、工厂方法模式 2.1 工厂方法模式的介绍 2.2 工厂方法模式的基本实现 2.3 工厂方法模式的应用场景 三、抽象工厂 3.1 抽象工厂的概念 3.2 抽象工厂的基本结构 3.3 抽象工厂的基本实现 3.4 抽象工厂的应用场景 四、…...
94.LabelGrid 的遍历与属性编辑 Maui例子 C#例子
for (int i 0; i < LabelGrid.Children.Count; i) {if (LabelGrid.Children[i] is Label label){await MainThread.InvokeOnMainThreadAsync(() >{label.TextColor Colors.Gray;});} } await Task.Delay(1000); // 延迟1秒 if (currentValue 0) {currentValue 16; } …...
Https流式输出一次输出一大段,一卡一卡的-解决方案
【背景】 最近遇到一个奇怪的现象,前端vue,后端python,服务部署在服务器上面后,本来一切正常,但公司说要使用https访问,想着也没什么问题,切过去发现在没有更改任何代码的情况下,ht…...
【C# 自动化测试】Selenium显式等待机制详解
Selenium显式等待机制详解 一、显式等待的概念 在自动化测试中,等待机制是处理页面元素加载延迟的重要手段。显式等待允许我们在继续执行代码之前等待某个条件发生,这比固定的强制等待更灵活高效。 二、显式等待的实现代码 1. 核心等待方法 /// <…...
【Redis】哈希表结构
目录 1、背景2、哈希表【1】底层结构【2】哈希冲突【3】链地址法【4】传统rehash【5】渐进式rehash【6】rehash触发条件【7】特性 1、背景 redis中的hashtable(哈希表)是一种高效的键值对存储结构,主要用于实现redis的字典类型,接…...
Redisson中为什么用lua脚本不用事务
一文详解事务和lua脚本的区别 核心问题: 为什么 Redisson 在实现分布式锁、信号量等复杂对象时,倾向于使用 Lua 脚本,而不是 Redis 内建的事务 (MULTI/EXEC)? 结论概览: Lua 脚本为 Redisson 提供了更强的原子性保证、…...
成功解决!!!Ubuntu系统安装包时出现:dpkg: 处理归档XXX时出错
在Ubuntu系统中在安装新的包时,有时会报错连环依赖问题,常见的报错为:下列软件包有未满足的依赖关系:XXX依赖XXX 但是它不会被安装 E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以…...
MySql数据库连接池
C数据库连接池 前言1.MySql API 函数讲解1.1 连接数据库的步骤1.2 MySQL C API1.2.1 初始化连接环境1.2.2 连接mysql服务器1.2.3 执行sql语句1.2.4 获取结果集1.2.5 得到结果集的列数1.2.6 获取表头 -> 列名(字段名)1.2.7 得到结果集中各个字段的长度(字节为单位)1.2.8 遍历…...
C++之fmt库介绍和使用(2)
C之fmt库介绍与使用(2) Author: Once Day Date: 2025年5月19日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …...
Python的collections模块:数据结构的百宝箱
Python的collections模块:数据结构的百宝箱 对话实录 小白:处理数据时,Python自带的数据结构不够用,有更强大的工具吗? 专家:那可不能错过collections模块,它提供了许多高效实用的数据结构&am…...
吃透 Golang 基础:数据结构之数组
文章目录 吃透 Golang 基础:数据结构之数组概述初始化访问和赋值小结参考资料 吃透 Golang 基础:数据结构之数组 对于 Golang 当中的顺序数据结构,使用频率最高的当然是切片,因为切片非常的灵活。与之相对比,数组常常会…...
第三个小程序动工:一款结合ai的菜谱小程序
1.环境搭建,与初步运行 安装及使用 | Taro 文档 找到一个合适的文件夹,cmd D:\gitee>pnpm install -g tarojs/cli╭──────────────────────────────────────────╮│ …...
小程序涉及提供提供文本深度合成技术,请补充选择:深度合成-AI问答类目
一、问题描述 最近新项目AI咨询小程序审核上线,按照之前小程序的流程,之前审核,提示审核不通过,审核不通过的原因:小程序涉及提供提供文本深度合成技术 (如: AI问答) 等相关服务,请补充选择:深…...
数据结构测试模拟题(1)
1、约瑟夫问题 #include<bits/stdc.h> using namespace std; const int N25; int e[N],ne[N],head-1,idx1; int n,m; void add_to_head(int x){e[idx]x;ne[idx]head;headidx; } void add(int k,int x){e[idx]x;ne[idx]ne[k];ne[k]idx; } int main(){cin>>n>>…...
Elasticsearch高级面试题汇总及答案
Elasticsearch高级面试题汇总及答案 这套Elasticsearch面试题汇总大全,希望对大家有帮助哈~ 1、什么是Elasticsearch Analyzer? 分析器用于文本分析,它可以是内置分析器也可以是自定义分析器。 2、Elasticsearch 支持哪些配置管理工具? 1、 Ansible 2、 Chef 3、 Pu…...
界面控件DevExpress WinForms v24.2——PDF Viewer功能升级
DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…...
Apache Apisix配置ip-restriction插件以限制IP地址访问
介绍 ip-restriction 插件可以通过将 IP 地址列入白名单或黑名单来限制对服务或路由的访问。 支持对单个 IP 地址、多个 IP 地址和类似 10.10.10.0/24 的 CIDR(无类别域间路由)范围的限制。 属性 参数名类型必选项默认值有效值描述whitelistarray[st…...
Maven 项目打包时添加本地 Jar 包
在 Maven 项目开发中,我们经常会遇到需要引入本地 Jar 包的场景,比如使用未发布到中央仓库的第三方库、公司内部自定义工具包,或者处理版本冲突的依赖项。本文将详细介绍如何通过 Maven 命令将本地 Jar 包安装到本地仓库,并在项目…...
JavaScript 性能优化:调优策略与工具使用
引言 在当今的 Web 开发领域,性能优化已不再是锦上添花,而是产品成功的关键因素。据 Google 研究表明,页面加载时间每增加 3 秒,跳出率将提高 32%。而移动端用户如果页面加载超过 3 秒,有 53% 的用户会放弃访问。性能…...
48、c# 中 IList 接⼝与List的区别是什么?
在 C# 中,IList 接口和 List 类在集合操作中扮演不同角色,主要区别体现在定义、功能、灵活性、性能及适用场景等方面。以下是详细对比: 1. 定义与本质 IList 接口 抽象契约:仅定义集合的基本操作(如索引访问、添加、…...
在 Azure OpenAI 上使用 Elastic 优化支出和内容审核
作者:来自 Elastic Muthukumar Paramasivam,Bahubali Shetti 及 Daniela Tzvetkova 我们为 Azure OpenAI 正式发布包添加了更多功能,现在提供内容过滤监控和计费见解的增强! 在之前的博客中,我们展示了如何使用 Elasti…...
Redis学习专题(三)主从复制
目录 引言: 1、搭建一主多从 1) 创建/hspredis目录, 并拷贝redis.conf 到 /hspredis 2) vi /hspredis/redis.conf , 进行如下设置 3) 创建3个文件/hspredis/redis6379.conf 、/hspredis/redis6380.conf 、/hspredis/redis6381.conf 并编辑 4) 启动三台redis服…...
设计模式之备忘录模式
在日常开发中,我们经常会遇到这样的场景:需要保存对象的某个历史状态,以便将来恢复。这种需求最常见的例子就是“撤销操作”。在这种情况下,备忘录模式(Memento Pattern)就派上了用场。 目录 1. 概念 2. 代码实现 3. 总结 1. …...
深度学习-runner.run(data_loaders, cfg.workflow)内部执行过程
文件:~/catkin_ws/SparseDrive/projects/mmdet3d_plugin/apis/mmdet_train.py 完成数据加载器、优化器、运行器实例化后, RUNNERS.register_module() class IterBasedRunner(BaseRunner):"""Iteration-based Runner.This runner train m…...
嵌入式开发学习日志(linux系统编程--文件读写函数)Day24
一、系统编程 标准oi 【输入输出】 stdio.h 头文件 :stdio.h >标准输入输出头文件;/usr/include/stdio.h 二、文件操作 1、关于文件操作的步骤 (1)打开文件; (2)io操作,读写…...
DEBUG:Lombok 失效
DEBUG:Lombok 失效 问题描述 基于 Spring Boot 的项目中,编译时显示找不到 log 属性。查看对应的 class 类,Lombok 正常在编译时生成 log 属性。 同时存在另一个问题,使用Getter注解,但实际使用中该注解并没有生效&…...
Qt 控件发展历程 + 目标(1)
文章目录 声明简述控件的发展历程学习目标QWidget属性 简介:这篇文章只是一个引子,介绍一点与控件相关的但不重要的内容(浏览浏览即可),这一章节最为重要的还是要把之后常用且重要的控件属性和作用给学透,学…...