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

51单片机的寻址方式(完整)

        

目录

一、立即数寻址

二、直接寻址

三、寄存器寻址

四、寄存器间接寻址

五、变址寻址

六、位寻址

七、指令寻址

(一)绝对寻址

 (二)相对寻址


        在 51 单片机中,寻址方式是指在执行指令时,CPU 寻找操作数所在存储单元地址的方法。

        由于计算机的指令执行过程中,常常需要对数据进行操作,而这些数据存储在不同的位置,如寄存器、存储器等,因此需要特定的方式来找到这些数据的地址,从而完成指令的操作。寻址方式的合理运用能够提高程序的执行效率、节省存储空间。

        51 单片机有 7 种寻址方式,分别是:立即数寻址直接寻址寄存器寻址寄存器间接寻址变址寻址位寻址指令寻址

        可以分为两类:操作数寻址指令寻址,在7种寻址方式中,除了指令寻址之外,其余六种都属于操作数寻址。

        每种方式都有其特点和适用场景,以下作详细介绍。

一、立即数寻址

1、概念

        立即数寻址是指在指令中直接给出操作数,该操作数紧跟在操作码之后,作为指令的一部分存放在程序存储器中。

        在执行指令时,CPU 直接从指令中获取操作数,而不需要再通过其他方式去寻找操作数的地址。

        例如,指令 “MOV A, #30H”,其中 “#30H” 就是立即数,这条指令的功能是将立即数 30H 传送到累加器 A 中。

2、特点

(1)优点寻址方式简单直接,执行速度快。因为操作数直接包含在指令中,CPU 无需额外的时间去访问内存来获取操作数,所以能快速完成数据的传输和运算。

(2)缺点操作数是固定在指令中的,缺乏灵活性。如果需要修改操作数,就需要修改指令本身,这在一些需要动态改变数据的情况下不太方便。

3、适用场景

(1)初始化操作:在程序开始时,常常需要对一些寄存器或内存单元进行初始化赋值,使用立即数寻址可以方便地将初始值直接传送给相应的寄存器或内存单元

(2)常数运算:当进行一些与常数相关的运算时,立即数寻址可以直接将常数作为操作数参与运算,无需先将常数存储在内存中再进行访问。

4、例子

(1)数据传送:“MOV R0, #50H”,这条指令将立即数 50H 传送给寄存器 R0,即将 50H 这个值赋给 R0,使得 R0 存储单元中的内容变为 50H。

(2)加法运算:“ADD A, #0AH”,该指令是将累加器 A 中的内容与立即数 0AH 相加,结果存放在累加器 A 中。例如,若 A 中原来的内容是 30H,执行该指令后,A 中的内容变为 3AH(30H + 0AH = 3AH)。

二、直接寻址

1、概念

        在 51 单片机里,直接寻址指的是在指令里直接给出操作数所在的内存单元地址CPU 依据该地址,直接从对应的内存单元读取或者写入操作数

        例如,指令 “MOV A, 30H”,此指令中的 “30H” 即为操作数所在的内存单元地址,CPU 会把地址为 30H 的内存单元中的内容传送到累加器 A 里。

2、特点

(1)优点:

        ① 操作直观。指令中直接给出内存单元地址,很容易理解和编写程序,开发者能清晰知晓操作的具体内存位置。

        访问特定单元。能对内部数据存储器的特定单元进行操作,像特殊功能寄存器(SFR),这些寄存器对单片机的各种功能进行控制,直接寻址能方便地对它们进行读写操作。

(2)缺点:

        ①寻址范围受限。只能访问内部数据存储器,包括低 128 字节(地址范围 00H - 7FH)以及特殊功能寄存器(地址范围 80H - FFH),不能访问外部数据存储器。

        灵活性欠佳。当需要操作多个连续的内存单元时,使用直接寻址需要为每个单元单独编写指令,不够灵活高效。

3、适用场景

(1)访问特殊功能寄存器:特殊功能寄存器控制着单片机的众多功能,例如定时器、串口、中断等。通过直接寻址可以方便地对这些寄存器进行配置和控制

(2)访问内部数据存储器的特定单元:当程序需要对内部数据存储器中的特定单元进行读写操作时可使用直接寻址

4、例子

(1)访问特殊功能寄存器:“MOV P1, #0FFH”,P1 是一个特殊功能寄存器,代表单片机的 P1 端口。此指令将立即数 0FFH 传送到 P1 端口,也就是把 P1 端口的 8 个引脚都置为高电平。

(2)访问内部数据存储器单元:“MOV 30H, A”,这条指令把累加器 A 中的内容传送到内部数据存储器地址为 30H 的单元中。若 A 中的内容为 55H,执行该指令后,地址 30H 单元的内容就变为 55H。

三、寄存器寻址

1、概念

        51 单片机的寄存器寻址是指操作数存放在寄存器中,指令中直接给出寄存器名,CPU 通过指定的寄存器来获取操作数或存放运算结果。

        在 51 单片机里,可用于寄存器寻址的寄存器有工作寄存器 R0 - R7、累加器 A、寄存器 B、数据指针 DPTR 等。

        例如指令 “MOV A, R2”,该指令就是将工作寄存器 R2 中的内容传送到累加器 A 中。

2、特点

(1)优点:

        ① 执行速度快由于寄存器位于 CPU 内部,访问寄存器的速度比访问内存要快很多,所以采用寄存器寻址的指令执行效率较高。

        ②代码简洁指令中只需指定寄存器名,无需额外的地址信息,使得指令长度较短,代码更加简洁。

(2)缺点:

        ① 寄存器数量有限51 单片机中可用于寄存器寻址的寄存器数量相对较少,这限制了同时可操作的数据数量。当需要处理较多的数据时,可能会出现寄存器不够用的情况。

        ② 数据存储容量小每个寄存器的存储容量有限,通常为 8 位(如 R0 - R7、A、B 等),对于一些需要处理大数据的情况不太适用。

3、适用场景

(1)频繁数据操作:当需要对数据进行频繁的读取、写入和运算操作时,使用寄存器寻址可以提高程序的执行速度。例如在循环计算中,将中间结果存放在寄存器中进行快速处理

(2)控制操作:在对单片机的一些控制操作中,使用寄存器寻址可以方便地对控制寄存器进行读写,实现对单片机各种功能的控制。

4、例子

(1)数据传送:“MOV R3, A”,这条指令将累加器 A 中的内容传送到工作寄存器 R3 中。若累加器 A 中的内容为 20H,执行该指令后,R3 中的内容就变为 20H。

(2)加法运算:“ADD A, R5”,该指令将累加器 A 中的内容与工作寄存器 R5 中的内容相加,结果存放在累加器 A 中。假设 A 中的内容为 30H,R5 中的内容为 10H,执行该指令后,A 中的内容变为 40H(30H + 10H = 40H)。

四、寄存器间接寻址

1、概念

        51 单片机的寄存器间接寻址是指操作数的地址存放在寄存器中,指令通过指定的寄存器来间接获取操作数的实际地址进而访问该地址对应的内存单元以获取操作数或存放运算结果

        在 51 单片机里,可用于寄存器间接寻址的寄存器有 Ri(i = 0, 1,即R0、R1 )数据指针 DPTR ,使用时需在寄存器名前加 “@” 符号来表示间接寻址。

        例如,指令 “MOV A, @R0”,它的作用是把寄存器 R0 所存放的地址对应的内存单元中的内容传送到累加器 A 中。

2、特点

(1)优点:

        ① 灵活性高可以通过改变寄存器中的地址值,方便地访问不同的内存单元,适用于处理连续存储的数据块,如数组、表格等。例如使用 R0、R1 或 DPTR 间接寻址时,通过改变其存储的地址,就能灵活访问不同的片内或片外 RAM 单元。

        ② 可动态访问内存在程序运行过程中,能根据实际情况动态地改变寄存器中的地址,从而实现对不同内存区域的访问,增强了程序的灵活性和适应性。

(2)缺点:

        ① 执行速度稍慢相较于寄存器寻址,寄存器间接寻址需要先从寄存器中获取地址,再根据该地址去访问内存单元,多了一个中间步骤,所以执行速度会稍慢一些。

        ② 增加编程复杂度使用寄存器间接寻址时,需要对寄存器中的地址进行管理和维护,这增加了编程的复杂度,对程序员的要求较高。

3、适用场景

(1)访问连续存储的数据:当需要处理连续存储在内存中的数据时,如数组、表格等,可以使用寄存器间接寻址,通过改变寄存器中的地址值,依次访问数组或表格中的各个元素。

(2)动态内存访问:在程序运行过程中,根据不同的条件需要访问不同的内存区域时,可使用寄存器间接寻址。通过动态改变寄存器中的地址,实现对不同内存区域的灵活访问。

4、例子

① 使用 Ri 间接访问片内 RAM 空间

        在 51 单片机里,R0 和 R1 能够当作间接寻址寄存器去访问片内 RAM 的低 128 字节(地址范围是 00H - 7FH)。示例代码如下:

MOV R0, #30H ; 将地址 30H 存入 R0
MOV A, @R0   ; 把片内 RAM 地址 30H 单元的内容传送到累加器 A

        这里,R0存放着操作数的地址,通过@R0就能间接访问该地址对应的片内 RAM 单元。

② 使用 Ri 间接访问片外 RAM 空间

        R0 和 R1 同样可用于间接访问片外 RAM 的低 256 字节(地址范围是 00H - FFH)。要使用 MOVX 指令,示例代码如下:

MOV R0, #20H ; 将地址 20H 存入 R0
MOVX A, @R0  ; 把片外 RAM 地址 20H 单元的内容传送到累加器 A

        在此,R0 存放片外 RAM 的地址,借助 @R0 间接访问对应的片外 RAM 单元。

③ 使用 DPTR 间接访问片外 RAM 空间

        数据指针 DPTR 是一个 16 位的寄存器,可用来间接访问整个 64KB 的片外 RAM 空间(地址范围是 0000H - FFFFH)。同样使用 MOVX 指令,示例代码如下:

MOV DPTR, #1000H ; 将地址 1000H 存入 DPTR
MOVX A, @DPTR    ; 把片外 RAM 地址 1000H 单元的内容传送到累加器 A

        这里,DPTR 存放片外 RAM 的地址,通过 @DPTR 间接访问对应的片外 RAM 单元。

五、变址寻址

1、概念

        51 单片机的变址寻址是以数据指针 DPTR 或程序计数器 PC 作为基址寄存器,以累加器 A 作为变址寄存器将两者的内容相加得到操作数的地址再通过该地址访问程序存储器中的操作数

        这种寻址方式主要用于访问程序存储器中的常数表格。变址寻址指令有两条,分别是“MOVC A, @A + DPTR”和“MOVC A, @A + PC”

2、特点

(1)优点:

        ① 方便访问表格数据在程序存储器中可以存放一些固定的数据表格,如字符的段码表、三角函数表等,通过变址寻址可以方便地根据累加器 A 中的偏移量来访问这些表格中的数据。

        ② 节省存储空间对于一些需要重复使用的固定数据,将其存放在程序存储器中,使用变址寻址进行访问,避免了在数据存储器中重复存储这些数据,节省了存储空间。

(2)缺点:

        ① 寻址范围受限变址寻址主要用于访问程序存储器,且其寻址范围受限于基址寄存器和变址寄存器的组合。对于较大规模的数据表格,可能需要更复杂的处理方式。

        ② 执行速度相对较慢由于需要进行基址和变址的相加运算来得到操作数的地址,相比于直接寻址和寄存器寻址,执行速度会相对较慢。

3、适用场景

(1)查表操作:当程序中需要根据某个变量的值来查找对应的固定数据时,如将数字转换为对应的七段数码管显示码、根据角度值查找正弦函数值等,变址寻址是一种非常有效的方法。

(2)代码的复用和优化对于一些固定的数据和算法,可以将其存储在程序存储器中,通过变址寻址来调用,提高代码的复用性和程序的执行效率。

4、例子

① 使用 MOVC A, @A+DPTR 指令访问表格数据

ORG 0000H
START:MOV A, #02H ; 将偏移量 2 送入累加器 AMOV DPTR, #TABLE ; 将表格的起始地址送入 DPTRMOVC A, @A + DPTR ; 根据 A 和 DPTR 的内容计算地址,访问表格中的数据SJMP $ ; 程序暂停TABLE:DB 01H, 02H, 03H, 04H, 05H ; 定义一个数据表格
END

        在这个例子中,首先将偏移量 2 送入累加器 A,然后将表格的起始地址 TABLE 送入 DPTR。

        执行 MOVC A, @A + DPTR 指令时,将 A 和 DPTR 的内容相加,得到操作数的地址,从程序存储器中读取该地址处的数据,并将其送入累加器 A。由于偏移量为 2,所以最终 A 中的值为 03H。

② 使用 MOVC A, @A + PC 指令访问表格数据

ORG 0000H
START:MOV A, #01H ; 将偏移量 1 送入累加器 AADD A, #03H ; 补偿 PC 的值,因为执行 MOVC 指令时 PC 已经指向下一条指令MOVC A, @A + PC ; 根据 A 和 PC 的内容计算地址,访问表格中的数据SJMP $ ; 程序暂停TABLE:DB 10H, 20H, 30H, 40H, 50H ; 定义一个数据表格
END

        在这个例子中,首先将偏移量 1 送入累加器 A。由于 MOVC A, @A + PC 指令执行时,PC 已经指向下一条指令,所以需要对 A 的值进行补偿(这里补偿值为 3,具体补偿值取决于 MOVC 指令和表格之间的指令字节数)。

        执行 MOVC A, @A + PC 指令时,将 A 和 PC 的内容相加,得到操作数的地址,从程序存储器中读取该地址处的数据,并将其送入累加器 A。由于偏移量为 1,经过补偿后,最终 A 中的值为 20H。

六、位寻址

1、概念

        51 单片机的位寻址是一种特殊的寻址方式,它允许对单片机内部数据存储器中的可位寻址区域的某一位进行单独的操作包括位的置位、清零、取反、逻辑运算等

        可位寻址的区域主要有两部分一是内部数据存储器的 20H - 2FH 单元,这 16 个字节共 128 位,位地址范围是 00H - 7FH;二是部分特殊功能寄存器(SFR),这些特殊功能寄存器本身具有字节地址,其中部分寄存器的每一位也有独立的位地址。

2、特点

(1)优点

        ① 操作灵活可以对某一位进行单独的操作,而不影响其他位的状态,这在处理一些标志位、控制位时非常方便。例如,在控制外设时,可以通过位操作来单独控制某个引脚的电平。

        ② 节省存储空间对于只需要一位信息的场合,使用位寻址可以避免使用一个字节来存储信息,从而节省了存储空间。

        ③ 提高程序效率位操作指令通常执行速度较快,能够提高程序的执行效率,特别是在处理一些实时性要求较高的任务时。

(2)缺点

        ①寻址范围有限位寻址只能针对特定的可位寻址区域进行操作,不能对所有的内存单元进行位操作。

        ② 编程复杂度相对较高在使用位寻址时,需要准确了解可位寻址区域的位地址分配,对于初学者来说,可能会增加编程的难度。

3、适用场景

(1)状态标志管理:在程序中,常常需要使用一些标志位来记录程序的运行状态,如溢出标志、进位标志、中断标志等。使用位寻址可以方便地对这些标志位进行置位、清零和检测操作。

(2)控制信号处理:在控制外部设备时,可能需要通过单片机的某些引脚输出控制信号,这些控制信号通常只需要一位信息(高电平或低电平)。使用位寻址可以直接对这些引脚对应的位进行操作,实现对外设的控制

(3)逻辑运算:在进行一些逻辑运算时,如与、或、非等,可以使用位寻址对单个位进行操作,实现更精细的逻辑控制

4、例子

① 对内部数据存储器的位寻址区域进行操作

ORG 0000H
START:SETB 20H.0 ; 将 20H 单元的第 0 位置 1CLR 20H.1 ; 将 20H 单元的第 1 位清 0CPL 20H.2 ; 将 20H 单元的第 2 位取反MOV C, 20H.3 ; 将 20H 单元的第 3 位的值传送到进位标志 CSJMP $ ; 程序暂停
END

        在这个例子中,SETB 指令用于将指定的位置 1,CLR 指令用于将指定的位清 0,CPL 指令用于将指定的位取反,MOV C, bit 指令用于将指定位的值传送到进位标志 C。

② 对特殊功能寄存器的位进行操作

ORG 0000H
START:SETB P1.0 ; 将 P1 端口的第 0 位置 1,即 P1.0 引脚输出高电平CLR P1.1 ; 将 P1 端口的第 1 位清 0,即 P1.1 引脚输出低电平JB P1.2, LOOP ; 如果 P1.2 引脚为高电平,则跳转到 LOOP 处执行SJMP $ ; 程序暂停
LOOP:; 处理 P1.2 引脚为高电平的情况SJMP $ ; 程序暂停
END

        在这个例子中,SETB 和 CLR 指令分别用于对 P1 端口的某一位进行置位和清零操作,JB 指令用于检测指定位是否为高电平,如果为高电平则跳转到指定的地址执行。P1 是一个特殊功能寄存器,其每一位对应单片机的一个引脚,通过位寻址可以方便地对这些引脚进行控制和检测。

七、指令寻址

        在51单片机中,指令寻址使用于控制转移指令中,其操作数给出转移的目标位置的地址,访问的是 code 区域

        常见的寻址方式包括绝对寻址相对寻址,两者在跳转指令(如JMP、CALL)中尤为重要。

(一)绝对寻址

        绝对寻址是在指令的操作数中直接提供目标位置的地址或地址的一部分,CPU根据该地址直接访问存储器或外设。        

        51单片机的绝对寻址分为 完整地址(16位) 和 部分地址(11位) 两种形式,分别对应不同的指令和场景。

1、16位绝对寻址(完整地址)

(1)指令示例:LJMP(长跳转)、LCALL(长调用)

(2)特点: 直接指定完整的16位目标地址(例如LJMP 1000H); 可跳转至 ROM 的任意位置(64KB范围); 指令长度为3字节(操作码 + 高8位地址 + 低8位地址)。

(3)适用场景:跨大范围跳转(如从0000H跳转到F000H);调用位于不同代码段的子程序

(4)例子

ORG 0000HLJMP INIT   ; 强制跳转到INIT(地址可能超出2KB)ORG 1000H
INIT:MOV SP, #60HLJMP LOOP   ; 长跳转到其他代码段ORG 2000H
LOOP:; 主循环代码

2、11位绝对寻址(部分地址)

(1)指令示例:AJMP(绝对跳转)、ACALL(绝对调用)

(2)特点:仅指定地址的低11位(例如AJMP 500H);目标地址 = 当前PC的高5位 + 指令中的11位地址(组合为16位地址);跳转范围限制在当前2KB页面内(11位地址范围:0~2047);④ 指令长度为2字节(操作码 + 11位地址)。

(3)适用场景: 页面内跳转(如代码集中在同一2KB区域); 节省代码空间(比LJMP少1字节)

(4)例子

ORG 0000H       ; 程序起始地址AJMP MAIN   ; 跳转到MAIN(假设MAIN在0x0000~0x07FF范围内)ORG 0030H
MAIN:MOV P1, #0FFHACALL DELAY ; 调用同一2KB页面内的子程序SJMP MAINDELAY:; 延时子程序RET

 (二)相对寻址

1、概念

        相对寻址通过偏移量(补码形式)实现跳转,目标地址 = 当前PC值 + 偏移量。偏移量范围为-128~+127(8位),适用于短距离跳转

        例如:SJMP LOOP 中的LOOP标签偏移量为0FEH(即-2),表示跳转到当前指令的前两条指令。

2、特点:位置无关性:代码可移植到不同地址执行(偏移量不变);代码紧凑:仅需1字节偏移量(如SJMP指令占2字节); 范围受限:仅支持短距离跳转(-128~+127字节);动态计算:运行时根据PC值计算目标地址。

3、适用场景:循环控制:如DJNZ指令实现循环计数;条件分支:JZ、JC等条件跳转;代码优化:减少程序体积,提高执行效率。

4、例子

LOOP:DJNZ R0, LOOP   ; R0减1,若不为0则跳转到LOOP(偏移量自动计算)SJMP $          ; 无限循环($表示当前指令地址,偏移量为0FEH)JZ NEXT         ; 若A=0,跳转到NEXT标签(相对偏移)

        
        以上内容即为51单片机的七种寻址方式,创作不易,麻烦给个三连呗~ 

 

相关文章:

51单片机的寻址方式(完整)

目录 一、立即数寻址 二、直接寻址 三、寄存器寻址 四、寄存器间接寻址 五、变址寻址 六、位寻址 七、指令寻址 (一)绝对寻址 (二)相对寻址 在 51 单片机中,寻址方式是指在执行指令时,CPU 寻找操作…...

深入理解 Linux 的 top 命令:实时监控系统性能

在 Linux 系统管理和性能优化中,top 命令是一个不可或缺的工具。它可以实时显示系统的进程信息和资源使用情况,帮助管理员快速定位性能瓶颈。本文将详细介绍 top 命令的输出内容及其使用方法,帮助你更好地掌握系统性能监控。 一、top 命令简介 top 是一个动态显示系统状态的…...

Excel(函数篇):IF函数、FREQUNCY函数、截取函数、文本处理函数、日期函数、常用函数详解

目录 IF函数等于判断区间判断与AND函数、OR函数一同使用IFNA函数和IFERROR函数 FREQUNCY函数、分断统计LEFT、RIGHT、MID截取函数FIND函数、LEN函数SUBSTITUTE函数ASC函数、WIDECHAR函数实战:如何获取到表中所有工作簿名称文本处理函数TEXT函数TEXTJOIN函数 日期函数…...

基于 Python 爬取 TikTok 搜索数据 Tiktok爬虫(2025.3.17)

1. 前言 在数据分析和网络爬虫的应用场景中,我们经常需要获取社交媒体平台的数据,例如 TikTok。本篇文章介绍如何使用 Python 爬取 TikTok 用户搜索数据,并解析其返回的数据。 结果截图 2. 项目环境准备 在正式运行代码之前,我…...

本专栏开栏通知相关申明

通知 本专栏主要介绍本人C开发过程中遇到的各种技术栈问题,开此栏用于整合自己所学习到的所有知识点,现在无偿分享给大伙。大伙有好的建议或者问题可以在评论直接留言,我不一定有时间看到,但是看到会回复的。 技术栈1 截止到202…...

数据库设计实验(3)—— 分离与附加、还原与备份

一、目的与要求 掌握SQL Server2012拷贝物理文件的方法;掌握SQL Server 2012附加数据库的方法;掌握SQL Server 2012备份和还原的方法;掌握SQL Server 2012定期自动备份的方法。开始简单的SQL查询 二、实验准备 了解数据库分离和附加的意义&…...

Swift 并发中的任务让步(Yielding)和防抖(Debouncing)

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

hibernate 自动生成数据库表和java类 字段顺序不一致 这导致添加数据库数据时 异常

hibernate 自动生成的数据库表和java类 字段顺序不一致 这导致该书写方式添加数据库数据时 异常 User user new User( null, username, email, phone, passwordEncoder.encode(password) ); return userRepository.save(user);Hibernate 默认不会保证数据库表字段的顺序与 Ja…...

05 MP4解码AAC + 格式知识

AAC⾳频格式ADIF这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中 ADTS是AAC⾳频的传输流格式。AAC⾳频格式在MPEG-2(ISO-13318-7 2003)中有定义。AAC后来⼜被采⽤…...

docker和k8s区别详解

一、核心定位对比 维度DockerKubernetes (K8s)引用来源核心功能容器引擎(构建、运行、分发容器)容器集群管理系统(编排、调度、扩展)[1][2][5]抽象层级单机容器化技术跨主机集群管理平台[5][6]技术目标解决应用环境一致性解决大规…...

生信分析服务作图TCGA/GEO数据库挖掘细胞测序转录学代做指导辅导

生信分析服务作图、TCGA/GEO数据库挖掘、细胞测序转录学代做指导辅导等相关内容,是当前生命科学研究中不可或缺的一部分。以下是对这些服务的详细解析: 一、生信分析服务作图 生信分析服务作图是生信分析中的重要环节,它通过将复杂的生物信…...

修改HuggingFace模型默认缓存路径

huggingface模型的默认缓存路径是~/.cache/huggingface/hub/ 通常修改为自己的路径会更为方便。 方式一:cache_dir 参数 可以通过from_pretrained函数中的 cache_dir 参数来指定,缺点,每次都需要手动指定,比较麻烦。 如&#x…...

游戏引擎学习第167天

回顾和今天的计划 我们不使用引擎,也不依赖库,只有我们自己和我们的小手指在敲击代码。 今天我们会继续进行一些工作。首先,我们会清理昨天留下的一些问题,这些问题我们当时没有深入探讨。除了这些,我觉得我们在资产…...

阿里云服务器环境部署 三 Minio文件服务集群的搭建

Minio文件服务集群的搭建 一 准备工作 1、三台机器 配置 vim /etc/hosts 172.16.108.44 minio4 172.16.108.43 minio3 172.16.108.42 minio2 [rootbigdata41 es]# docker --version Docker version 26.1.4, build 5650f9b [rootbigdata43 minio]# docker-compose -v -bash…...

让人感到疑惑的const

const 关键字在不同的编程语言中有着不同的含义和限制,但通常它被用来声明一个常量或只读变量。然而,在 JavaScript 中,const 的行为有时可能会让人感到困惑,因为它并不总是意味着“不可变”(immutable)。让…...

网易云信架构升级实践,故障恢复时间缩至8秒

一、项目背景 网易云信是网易旗下集IM与音视频技术于一体的PaaS服务平台,为全球提供融合通信与视频的核心功能和组件,包括IM即时通讯、短信、信令等通信服务,以及RTC、直播、点播、互动直播、互动白板等音视频服务,此外&#xf…...

算法刷题记录——LeetCode篇(3) [第201~300题](持续更新)

(优先整理热门100及面试150,不定期持续更新,欢迎关注) 207. 课程表 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequ…...

navicat导出文件密码解密

文章目录 一、概念二、导出文件1、创建的数据库连接信息2、导出带密码的连接信息3、查看导出后的文件 三、Python代码解析四、参考地址 一、概念 Navicat中导出的带密码的文件后缀是.ncx结尾的,里面是xml格式的文件,存储了数据库的连接,方便…...

uniapp vue3项目定义全局变量,切换底部babar时根据条件刷新页面

前言 uniapp项目中,每个tabbar页面来回点时候,不会触发页面更新。但是有时页面上有数据发生改变需要更新模版时,就得能及时的通知到页面。如果在onshow生命周期里每次都调用异步请求更新数据,有些不合理,况且页面有时…...

Linux上的`i2c-tools`工具集的详细介绍;并利用它操作IMX6ULL的I2C控制器进而控制芯片AP3216C读取光照值和距离值

IC-Tools 工具集介绍 i2c-tools 是 Linux 下用于 IC 设备调试 的用户空间工具集(你也可以把它看成是一个库,类似于之前自己用过的触摸屏库tslib库、FreeType矢量字符库),它提供了一系列命令行工具,可以扫描、读取、写入 IC 设备,…...

## DeepSeek写射击手机小游戏

DeepSeek写射击手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端射击小游戏H5文件: 要求 可以重新开始游戏 可以暂停游戏 射击位置在底部中间&#xff…...

奇安信全流量(天眼)面试题

一、全流量设备(天眼)的部署架构 天眼系统采用旁路部署模式,通过流量镜像实现非侵入式监测,核心组件包括流量传感器、分析平台和文件威胁鉴定器,具体部署架构如下: 传感器部署 关键节点覆盖:在…...

计算机四级 - 数据库原理(操作系统部分)- 第2章「操作系统运行机制」

系统调用是应用程序请求操作系统核心完成某一特定功能的一种过程调用,与一般调用的最大区别就是调用程序运行在用户态,而被调用程序则运行在系统态寄存器类型: 用户不可见寄存器:程序计数器、指令寄存器、程序状态字(P…...

【css酷炫效果】纯CSS实现虫洞穿越效果

【css酷炫效果】纯CSS实现穿越效果 缘创作背景html结构css样式完整代码基础版进阶版(虫洞穿越) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90491973 缘 创作随缘,不定时…...

火山引擎(豆包大模型)(抖音平台)之火山方舟的Prompt的使用测试

前言 在大模型的使用过程当中,Prompt的使用非常的关键。原来,我对Prompt的理解不深,觉得Prompt的产生并不是很有必要。但是,自从使用了火山方舟中的“Prompt优解”之后,感受加深了,觉得Prompt是我们和大模型…...

多线程(四)----线程安全

线程安全问题的万恶之源就是多线程的抢占式执行所带来的随机性. 有了多线程, 此时抢占式执行下, 代码执行的顺序, 会出现更多的变数, 代码执行顺序的可能性就从一种情况变成了无数种情况. 只要有一种情况使得代码结果不正确, 都是视为bug, 线程不安全. 有线程安全的代码 以下…...

跨系统投屏:Realme手机(远程)投屏到Linux系统的简单方法

家里长辈年纪上来了,有点老花眼,平常看手机总是觉得字体不够大,还一个劲儿地将手机拿很远。其实那台手机的字体已经调到最大了。 为了让长辈刷手机的时候可以轻松快乐一点,我们帮他将手机投屏到电脑上。毕竟电脑屏幕比手机大多了&…...

【eNSP基础使用教程-1】

座右铭: 纵有疾风起,人生不言弃。 文章目录 前言一、更改设备名称指令1、双击路由器进入2、 进入系统视图3、更改设备名称为R14、使用同样的办法修改路由器R2、R3 二、配置路由物理接口的IP 地址1、查看R1路由器当前接口IP 地址配置与路由表2、查看路由器上的路由表…...

android开发:组件事件汇总

在 Android 开发中,Java 文件中有许多组件事件可以处理用户交互。以下是一些常见的组件事件及其用途和示例: 1. 点击事件 (Click) 用于处理用户点击控件的操作。 示例代码: Button button findViewById(R.id.button); button.setOnClickL…...

C++|向函数传递对象

在 C 里,对象作为函数的参数和返回值,有值传递、指针传递和引用传递这三种传递方式,下面为你详细介绍。 1.值传递 在值传递时,把实参对象的值复制给形参对象,函数会接收实参的一个副本,而非实参本身。函数…...

网络爬虫【爬虫库urllib】

我叫不三不四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库,无须安装,直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包,大致具备以下功能。 ● urlli…...

【一起来学kubernetes】17、Configmap使用详解

前言概述核心特性创建 ConfigMap使用 ConfigMap1. **环境变量**2. **Volume 挂载**3. **命令行参数** 更新与热重载Docker容器中Java服务使用Configmap**一、通过环境变量注入****步骤说明****示例配置** **二、通过 Volume 挂载配置文件****步骤说明****示例配置** **三、动态…...

QT程序双击可执行文件运行方法

1、qt编译选择release模式 在pro文件添加:QMAKE_LFLAGS -no-pie 2、cmake编译qt界面程序 在CMakeLists.txt文件中添加: set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-pie") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")注意 …...

【css酷炫效果】实现鱼群游动动态效果

【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…...

【GNN】GAT

消息传递 层数越多,聚合更多的消息...

Prims region.Views 为null

原因: 导航未完成或异步问题 解决方式:使用回调确认导航完成后再操作视图 _regionManager.RequestNavigate("MonitorRegion", "MonitorView", nps, navigationResult > {if (navigationResult.Result true){var region _regio…...

在windows10系统上安装docker,然后在容器中运行GPU版本的Pytorch,并使用vscode连接该容器

一 . 安装Docker Desktop 首先打开网址https://docs.docker.com/desktop/install/windows-install/ 下载完后,双击下面的exe文件进行安装,默认情况下,Docker Desktop 安装在C:\Program Files\Docker\Docker 出现提示时,请确保…...

WPS 搭配 Zotero 插件使用

安装Zotero后,Word自动引入了插件,但WPS却没有,做为WPS的重度用户,这是不行的。 解决方案: 1.找到 Zotero.dotm 一般在安装目录下, 2.然后复制到WPS的startup下 我的目录是:C:\Users\lianq…...

卷积神经网络 - 卷积层(具体例子)

为了更一步学习卷积神经网络之卷积层,本文我们来通过几个个例子来加深理解。 一、灰度图像和彩色图像的关于特征映射的例子 下面我们通过2个例子来形象说明卷积层中“特征映射”的概念,一个针对灰度图像,一个针对彩色图像。 例子 1&#x…...

新造车不再比拼排名,恰是曲终人散时,剩者为王

据称新能源汽车周销量不再发布,这可能也预示着新造车终于到了给出答案的时候了,新造车企业前三强已基本确立,其余那些落后的车企已很难有突围的机会,而特斯拉无疑是其中的最大赢家。 3月份第一周的数据显示,销量最高的…...

学有所得-Deepin linux操作系统在安装nvidia显卡驱动后的问题修复

目标: 装有deepin V20.9的移动硬盘在系统启动后无法进入图形化界面,修复系统。 背景: 为了方便随时随地开发研究,又不破坏笔记本电脑原装的正版操作系统,在一个朗科(容量50&…...

【QT:网络编程】

网络编程的本质就是在编写应用层代码。需要传输层支持。而传输层的协议有UDP、TCP等 使用QT网络编程的API,需要在.pro文件中添加network模块,而QT中的控件和其他内容都是包含在QtCore模块中的(默认添加) QT为什么要划分模块&…...

基于srpingboot高校智慧校园教学管理服务平台的设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

分布式事务3PC解决了2PC哪些问题?

三阶段提交(3PC,Three-Phase Commit) 是对 二阶段提交(2PC,Two-Phase Commit) 的改进,旨在解决 2PC 的一些固有缺陷,特别是在分布式系统中的容错性和性能问题。以下是 3PC 比 2PC 更好的原因及其优势的详细分析: 1. 二阶段提交(2PC)的问题 2PC 是一种经典的分布式事…...

Dify 使用 - 创建 翻译 工作流

文章目录 1、选择 模板2、设置 和 基本使用3、运行应用 1、选择 模板 2、设置 和 基本使用 翻译模板 自带了系统提示词,你也可以修改 3、运行应用 右上角 点击 发布 – 更新,运行应用,就可以在新的对话界面中使用此功能 2025-03-18&#x…...

集成学习(上):Bagging集成方法

一、什么是集成学习? 在机器学习的世界里,没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象",单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来,就能像拼图一样还原出完整的真相&a…...

c盘清理宝藏小工具

引言 在数字化时代,电脑的存储空间和系统性能直接影响着我们的工作效率和用户体验。C盘作为系统盘,常常因为文件堆积、缓存冗余等问题变得臃肿不堪,导致电脑运行缓慢。为了解决这一问题,我最近试用了一款名为“小番茄C盘清理”的…...

QT多媒体播放器类:QMediaPlayer

QMediaPlayer 是 Qt Multimedia 模块中的核心类,用于播放音频和视频媒体文件。它支持本地文件、网络流媒体以及实时数据源,具备播放控制、状态管理、元数据访问等功能。QMediaPlayer的基本用法可能包括设置媒体源、控制播放(播放、暂停、停止…...

Java动态代理模式深度解析

1. 动态代理基础 1.1 核心组件 Proxy 类:动态生成代理对象的工厂类,核心方法为 newProxyInstance()。 InvocationHandler 接口:代理逻辑的处理器,所有方法调用会转发到其 invoke() 方法。 1.2 实现步骤 定义接口:代…...

【WRF模拟】垂直层设置/与观测数据对比

【WRF模拟】垂直层设置/与观测数据对比 WRF 中 有关垂直层的namelist变量1. 主要垂直层设置参数2. 详细解释3. 典型设置示例WRF 输出的垂直剖面数据与观测数据进行比较WRF 采用 地形跟随坐标(terrain-following coordinate)WRF 输出的垂直剖面数据与观测数据进行比较参考WRF …...