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

单片机知识总结(完整)

在这里插入图片描述

1、单片机概述

1.1. 单片机的定义与分类

定义:
单片机(Microcontroller Unit,简称MCU)是一种将微处理器、存储器(包括程序存储器和数据存储器)、输入/输出接口和其他必要的功能模块集成在单个芯片上的微型计算机。它通常用于控制应用,可以在没有外部支持芯片的情况下独立运行。

分类:

  1. 按处理能力分类:

    • 低端单片机:处理能力较弱,适用于简单的控制应用。
    • 中端单片机:具有一定的处理能力,适用于中等复杂度的控制系统。
    • 高端单片机:处理能力强,适用于复杂的控制系统和计算密集型应用。
  2. 按指令集分类:

    • 复杂指令集单片机(CISC):指令丰富,操作复杂,适用于多种应用场景。
    • 精简指令集单片机(RISC):指令简单,执行速度快,功耗低。
  3. 按位数分类:

    • 4位单片机:处理能力有限,适用于简单的控制任务。
    • 8位单片机:应用最广泛,如8051系列。
    • 16位单片机:处理能力更强,适用于较为复杂的控制系统。
    • 32位单片机:具有更高的处理能力和更多的功能,适用于高端应用。
  4. 按用途分类:

    • 通用型单片机:适用于多种场合。
    • 专用型单片机:针对特定应用设计,如汽车电子、家电控制等。

1.2. 单片机的发展历程

早期阶段(1970年代):

  • 1971年,Intel推出了世界上第一款微处理器4004,随后推出了8008,为单片机的发展奠定了基础。

发展阶段(1980年代):

  • 1981年,Intel推出了8051单片机,成为历史上最成功的单片机之一。
  • 其他公司如Motorola、Zilog、Atmel等也相继推出了自己的单片机产品。

成熟阶段(1990年代):

  • 单片机的性能不断提升,应用领域不断扩展。
  • 出现了基于Flash存储技术的单片机,使得程序更新更加方便。

多元化发展阶段(2000年代至今):

  • 单片机开始集成更多的功能,如USB、网络、CAN总线等。
  • 32位单片机逐渐成为市场的主流。
  • 出现了基于ARM架构的嵌入式处理器,进一步推动了单片机技术的发展。

1.3. 单片机的应用领域

  1. 消费电子:

    • 家用电器(如洗衣机、空调、电视)
    • 音响设备
    • 游戏机
  2. 工业控制:

    • 自动化生产线
    • 机器人控制
    • 电力系统监控
  3. 汽车电子:

    • 发动机控制单元(ECU)
    • 车身电子控制
    • 车载娱乐系统
  4. 医疗设备:

    • 监护仪器
    • 医疗诊断设备
    • 智能假肢
  5. 通信设备:

    • 路由器
    • 交换机
    • 无线通信模块
  6. 物联网(IoT):

    • 智能家居
    • 智能城市
    • 工业互联网
  7. 其他:

    • 安全监控
    • 环境监测
    • 仪器仪表

2、单片机硬件基础

2.1. 单片机的内部结构

在这里插入图片描述
内部结构图

单片机的内部结构通常包括以下几个主要部分:

  1. 中央处理器(CPU): 执行程序指令,进行算术和逻辑运算。
  2. 程序存储器(ROM): 存储程序代码。
  3. 数据存储器(RAM): 存储运行时的数据和变量。
  4. 特殊功能寄存器(SFR): 控制和状态寄存器,用于特定功能的配置和状态反馈。
  5. 输入/输出端口(I/O): 与外部设备进行数据交换。
  6. 定时器/计数器: 用于定时或计数功能。
  7. 中断控制器: 处理中断请求,实现多任务处理。
  8. 串行通信接口: 实现与其他设备或单片机的串行通信。

2.2. 单片机的引脚功能

在这里插入图片描述

以8051单片机为例,它通常有40个引脚,以下是部分引脚的功能:

  • VCC: 电源正极。
  • GND: 电源负极。
  • P0.0 - P0.7: 端口0,可以作为通用I/O口,也可以作为地址/数据总线。
  • P1.0 - P1.7: 端口1,通用I/O口。
  • P2.0 - P2.7: 端口2,通用I/O口,也可用于外部存储器地址线。
  • P3.0 - P3.7: 端口3,通用I/O口,部分引脚具有第二功能,如P3.0和P3.1用于串行通信。
  • RST: 复位引脚,高电平有效。
  • ALE/PROG: 地址锁存使能/程序存储器编程。
  • PSEN: 程序存储器选通信号。
  • EA/VPP: 外部访问使能/编程电压。

2.3. 单片机的时钟与复位

  • 时钟: 单片机的时钟用于提供CPU操作的基本时间节拍。8051单片机通常需要一个外部晶振或陶瓷振荡器来提供时钟信号。
  • 复位: 当RST引脚接收到高电平时,单片机会执行复位操作,将CPU和寄存器恢复到初始状态。

2.4. 单片机的存储器结构

在这里插入图片描述

2.4.1 程序存储器(ROM)

程序存储器用于存储单片机的程序代码。在8051单片机中,程序存储器通常是只读存储器(ROM)或闪存(Flash)。汇编代码将被存储在程序存储器的特定地址中。

assembly ORG 0000H ;	//程序起始地址 MOV A, 
55H ;	 //将55H加载到累加器A 

2.4.2 数据存储器(RAM)

数据存储器用于存储程序运行时的数据和变量。在8051单片机中,数据存储器是随机存取存储器(RAM)。

char data_var = 0xAA; // 定义一个字符变量并初始化为0xAA

data_var变量将被存储在数据存储器中的一个地址。

2.4.3 特殊功能寄存器(SFR)

特殊功能寄存器是CPU内部的一些寄存器,它们具有特定的功能,如控制I/O端口、定时器、串行通信等。P1是一个特殊功能寄存器,用于控制端口1的状态。

SFR P1 = 0x90; // 定义P1端口的地址
P1 = 0xFF; // 将P1端口的所有引脚设置为高电平

3. 汇编语言

(1)指令系统

汇编语言的指令系统是指单片机可以理解和执行的指令集合。每个指令对应一个特定的操作,如数据传送、算术运算、逻辑运算、跳转等。以下是一些常见的8051单片机汇编指令:

  • 数据传送指令: MOV A, #data(将立即数data传送到累加器A)
  • 算术运算指令: ADD A, Rn(将寄存器Rn的内容加到累加器A,结果存储在A中)
  • 逻辑运算指令: ANL A, #data(将累加器A的内容与立即数data进行逻辑与运算)
  • 跳转指令: JMP label(无条件跳转到label标签处执行)

(2)汇编程序结构

  • 起始地址: 指定程序开始执行的地址。
  • 数据定义: 定义程序中使用的变量和数据。
  • 代码段: 包含实际的指令代码。
  • 子程序: 可被主程序调用的代码块。
  • 中断服务程序: 处理中断事件的代码。
  assembly
ORG 0000H ; 程序起始地址
START: MOV A, #55H ; 将立即数55H传送到累加器AADD A, R0 ; 将寄存器R0的内容加到累加器AMOV P1, A ; 将累加器A的内容输出到端口P1SJMP START ; 无条件跳转到START标签处继续执行

(3) 汇编语言编程实例

例子1: 将P1端口的值翻转到P2端口

assembly
ORG 0000H
START: MOV A, P1 ; 将P1端口的值读取到累加器ACPL A ; 将累加器A的内容取反MOV P2, A ; 将取反后的值输出到P2端口SJMP START ; 无限循环

3.1C语言基础

C语言的基础概念:

  • 变量: 用于存储数据的标识符。
  • 数据类型: 定义变量可以存储的数据种类,如int、char、float等。
  • 控制结构: 如if、for、while等,用于控制程序流程。

3.2 C语言编程实例

例子1: 将P1端口的值翻转到P2端口

#include <reg51.h> // 包含8051寄存器定义的头文件void main() {while (1) { // 无限循环P2 = ~P1; // 将P1端口的值取反后输出到P2端口}
}

reg51.h头文件包含了8051单片机的特殊功能寄存器定义,P1P2是特殊功能寄存器,分别代表端口1和端口2。程序中的while循环会不断执行,将P1端口的值取反后输出到P2端口。

4、单片机I/O接口

在这里插入图片描述

4.1、I/O口的结构与功能

I/O口(输入/输出端口)是单片机与外部设备进行数据交换的接口。在8051单片机中,通常有P0、P1、P2、P3四个8位并行I/O端口。

  1. 结构:

    • 锁存器: 用于存储数据输出。
    • 缓冲器: 用于数据输入。
    • 驱动器: 提供足够的电流来驱动外部设备。
  2. 功能:

    • 输入模式: 可以读取外部设备的状态(如按键、传感器等)。
    • 输出模式: 可以控制外部设备(如LED、继电器等)。

4.2、I/O口的编程方法

  1. 设置I/O口为输入模式:

    • 对于P0、P1、P2、P3端口,可以通过设置相应的数据(定义)方向寄存器(如P1DIR)来控制每个位是输入还是输出。
  2. 设置I/O口为输出模式:

    • 同样,通过设置数据方向寄存器来控制端口的方向。
  3. 读取输入:

    • 直接读取I/O口寄存器即可。
  4. 写入输出:

    • 直接向I/O口寄存器入数据即可。

4.3、I/O口的应用实例

例子1: 控制一个连接在P1.0的LED亮灭( LED控制)

#include <reg51.h>void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++); // 简单的延时函数
}void main() {P1 = 0xFF; // 初始化P1口,所有LED熄灭while (1) {P1_0 = 0; // 点亮LEDdelay(1000); // 延时P1_0 = 1; // 熄灭LEDdelay(1000); // 延时}
}

例子2: 检测连接在P1.0的按键是否被按下(按键检测)

#include <reg51.h>void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);
}void main() {P1 = 0xFF; // 将P1口设置为输入模式,并启用内部上拉电阻while (1) {if (P1_0 == 0) { // 如果P1.0为低电平,表示按键被按下delay(20); // 延时消抖if (P1_0 == 0) { // 再次检测,确保按键确实被按下while (P1_0 == 0); // 等待按键释放P1_1 = ~P1_1; // 切换P1.1连接的LED状态}}}
}

例子3: 控制一个连接在P1.0的继电器开关(继电器控制)

#include <reg51.h>void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);
}void main() {P1 = 0xFF; // 初始化P1口,所有继电器断开while (1) {P1_0 = 0; // 继电器闭合delay(5000); // 延时P1_0 = 1; // 继电器断开delay(5000); // 延时}
}``

`

5、单片机定时器/计数器

5.1、定时器/计数器的工作原理

定时器/计数器是单片机内部的一个重要模块,它可以用于计时或者计数。在8051单片机中,通常有两个定时器/计数器:定时器/计数器0和定时器/计数器1。

5.1.1 工作原理:

  • 定时器模式: 当定时器/计数器被配置为定时器模式时,它会对单片机的内部时钟信号进行计数。当计数达到设定值时,定时器溢出,可以触发中断或改变I/O端口的状态。
  • 计数器模式: 当定时器/计数器被配置为计数器模式时,它会对外部信号(通常是T0或T1引脚上的脉冲)进行计数。

5.2、定时器/计数器的编程方法

初始化定时器/计数器:

  • 设置定时器/计数器模式。
  • 设置定时器/计数器的初值。
  • 启用或禁用定时器/计数器。
  • 配置中断(如果需要)。

5.3、定时器/计数器的应用实例

例子1: 使用定时器0实现1秒的延时(延时)

#include <reg51.h>void Timer0_Init() {TMOD &= 0xF0; // 清除定时器0模式位TMOD |= 0x01; // 设置定时器0为模式1(16位定时器模式)TH0 = 0xFC;   // 设置定时器初值(1秒延时,具体值取决于晶振频率)TL0 = 0x18;ET0 = 1;      // 启用定时器0中断EA = 1;       // 启用全局中断TR0 = 1;      // 启动定时器0
}void Timer0_ISR() interrupt 1 {TH0 = 0xFC;   // 重新加载定时器初值TL0 = 0x18;// 这里可以执行需要延时的代码
}void main() {Timer0_Init();while (1) {// 主循环代码}
}

例子2: 使用定时器1对外部脉冲进行计数(脉冲计数)

#include <reg51.h>void Timer1_Init() {TMOD &= 0x0F; // 清除定时器1模式位TMOD |= 0x10; // 设置定时器1为模式1(16位计数器模式)ET1 = 1;      // 启用定时器1中断EA = 1;       // 启用全局中断TR1 = 1;      // 启动定时器1
}void Timer1_ISR() interrupt 3 {// 这里可以读取TL1和TH1的值,以获取脉冲计数// 注意:在中断服务程序中,通常不进行复杂操作
}void main() {Timer1_Init();while (1) {// 主循环代码}
}

例子3: 使用定时器0产生PWM信号(PWM输出)

#include <reg51.h>void Timer0_Init() {TMOD &= 0xF0; // 清除定时器0模式位TMOD |= 0x02; // 设置定时器0为模式2(8位自动重装载模式)TH0 = 0xFF;   // 设置PWM周期(具体值取决于PWM频率)TL0 = TH0;    // 初始化TL0ET0 = 1;      // 启用定时器0中断EA = 1;       // 启用全局中断TR0 = 1;      // 启动定时器0
}void Timer0_ISR() interrupt 1 {static unsigned char pwm_width = 0; // PWM占空比变量if (TF0) { // 检查定时器是否溢出TR0 = 0; // 停止定时器TH0 = 0xFF; // 重新加载PWM周期TL0 = TH0;P1_1 = 1; // 开始PWM周期TR0 = 1; // 重新启动定时器} else if (TL0 == pwm_width) {P1_1 = 0; // 设置PWM占空比}
}void main() {Timer0_Init();

6、单片机中断系统

6.1中断系统的组成

  1. 中断源:中断源是指能够触发中断的事件或信号。中断源可以是硬件事件(如定时器溢出、外部引脚变化)或软件事件(如软件中断指令)。

  2. 中断控制器:中断控制器负责管理中断请求,确定中断的优先级,以及选择哪个中断服务程序(ISR)来响应。

  3. 中断向量表:中断向量表是一个存储中断服务程序入口地址的表格。当中断发生时,CPU通过中断向量表找到对应的中断服务程序。

  4. 中断服务程序(ISR):中断服务程序是一段用于处理特定中断事件的代码。当中断被触发时,CPU会暂停当前任务,跳转到ISR执行。

6.2中断处理流程

  1. 中断请求:中断源发出中断请求信号。

  2. 中断识别:中断控制器识别中断请求,并判断其优先级。

  3. 中断响应:如果中断被允许,CPU会暂停当前任务,保存当前程序状态(如程序计数器、寄存器等),然后跳转到对应的中断服务程序。

  4. 执行中断服务程序:CPU执行中断服务程序来处理中断事件。

  5. 恢复执行:中断服务程序执行完毕后,CPU恢复之前保存的程序状态,并返回到中断发生前的位置继续执行。

6.3中断优先级和嵌套

中断系统通常支持中断优先级,以决定多个中断同时发生时哪个中断将被首先处理。中断嵌套是指一个中断服务程序在执行时可以被另一个更高优先级的中断打断。

6.4程实践

#include <reg51.h>// 外部中断0服务程序
void External0_ISR(void) interrupt 0 {// 执行外部中断0的处理代码
}// 定时器0中断服务程序
void Timer0_ISR(void) interrupt 1 {// 执行定时器0的处理代码
}void main() {EA = 1;   // 全局中断使能EX0 = 1;  // 外部中断0使能ET0 = 1;  // 定时器0中断使能// 其他初始化代码...while(1) {// 主循环代码}
}

7、单片机串行通信

单片机的串口通信是一种常用的数据传输方式,它允许单片机与其他设备(如计算机、传感器、其他单片机等)进行数据交换。

串口通信的基本概念

串口通信(Serial Communication)是一种按照位序列进行数据传输的方式,通常使用串行通信接口

串口通信的主要参数

  1. 波特率(Baud Rate):表示每秒钟传送的位数,单位是bps(bits per second)。

  2. 数据位(Data Bits):表示每个数据帧中数据位的数量,通常为7或8位。

  3. 停止位(Stop Bits):表示每个数据帧结束时的停止位的数量,通常为1、1.5或2位。

  4. 校验位(Parity Bit):用于错误检测的位,可以是奇校验、偶校验或无校验。

  5. 流控制(Flow Control):用于防止数据丢失的技术,如硬件流控制(RTS/CTS)或软件流控制(XON/XOFF)。

串口通信的硬件接口

  • RX(接收):用于接收数据。
  • TX(发送):用于发送数据。
  • GND(地):用于信号参考点。

单片机串口通信的步骤

  1. 初始化串口:设置波特率、数据位、停止位、校验位等参数。

  2. 配置中断(可选):如果使用中断方式进行数据接收和发送,需要配置相关的中断服务程序。

  3. 数据发送:编写代码将数据写入串口发送缓冲区。

  4. 数据接收:编写代码从串口接收缓冲区读取数据。

示例1:8051单片机串口通信

#include <reg51.h>


```c```c```bash```bash
// 假设使用11.0592MHz的晶振void Serial_Init() {SCON = 0x50;  // 设置为模式1,8位数据,可变波特率TMOD |= 0x20; // 定时器1使用模式2(自动重装载)TH1 = 0xFD;   // 设置波特率为9600TL1 = 0xFD;   // 与TH1相同TR1 = 1;      // 启动定时器1TI = 1;       // 设置TI位,准备发送
}void Serial_SendByte(unsigned char dat) {SBUF = dat;   // 将数据放入发送缓冲区while (!TI);  // 等待发送完成TI = 0;       // 清除发送完成标志
}void main() {Serial_Init(); // 初始化串口while (1) {Serial_SendByte('A'); // 发送字符'A'// 可以添加延时,控制发送速度}
}

首先初始化串口,然后在一个无限循环中发送字符’A’。Serial_Init函数设置了串口的工作模式和波特率,而Serial_SendByte函数负责发送一个字节的数据。

8、单片机外围设备扩展

单片机连接到各种外围设备的详细插图
在这里插入图片描述

相关文章:

单片机知识总结(完整)

1、单片机概述 1.1. 单片机的定义与分类 定义&#xff1a; 单片机&#xff08;Microcontroller Unit&#xff0c;简称MCU&#xff09;是一种将微处理器、存储器&#xff08;包括程序存储器和数据存储器&#xff09;、输入/输出接口和其他必要的功能模块集成在单个芯片上的微型…...

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录&#xff0c;有别于基础语法&#xff0c;很多内容只要求会用就行&#xff0c;无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout&#xff1a; 1.3 string以下是字符串的一些简介&#xff1a;字符串…...

Spring Boot【四】

单例bean中使用多例bean 1.lookup-method方式实现 当serviceB中调用getServiceA的时候&#xff0c;系统自动将这个方法拦截&#xff0c;然后去spring容器中查找对应的serviceA对象然后返回 2.replaced-method&#xff1a;方法替换 我们可以对serviceB这个bean中的getServiceA…...

linux基础1

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…...

DAMODEL丹摩|部署FLUX.1+ComfyUI实战教程

本文仅做测评体验&#xff0c;非广告。 文章目录 1. FLUX.1简介2. 实战2. 1 创建资源2. 1 ComfyUI的部署操作2. 3 部署FLUX.1 3. 测试5. 释放资源4. 结语 1. FLUX.1简介 FLUX.1是由黑森林实验室&#xff08;Black Forest Labs&#xff09;开发的开源AI图像生成模型。它拥有12…...

Python语法基础(三)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们这篇文章来说一下函数的返回值和匿名函数 函数的返回值 我们先来看下面的这一段函数的定义代码 # 1、返回值的意义 def func1():print(111111111------start)num166print…...

计算分数的浮点数值

计算分数的浮点数值 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 两个整数a和b分别作为分子和分母&#xff0c;既分数 a/b &#xff0c;求它的浮点数值&#xff08;双精度浮点数&#xff0c;保留小数点…...

Staircase mesh” 和 Conformal mesh区别

一、Staircase Mesh&#xff08;阶梯状网格&#xff09; 1.1 含义 阶梯状网格就像是用一个个小方块或者矩形拼接起来的网格。在对几何形状进行划分网格时&#xff0c;它会以一种比较简单直接的方式&#xff0c;使得网格边界呈现出像楼梯台阶一样的形状。比如在模拟一个圆形物体…...

探索未来工业的核心:数字孪生技术深度解析

经过数十年的发展&#xff0c;建模和模拟已成为工程和科学的基石。人们针对改进建模的计算方法进行了大量的研究和开发工作。这些计算机模型对系统设计非常有用&#xff0c;可以削减实验和测试的高昂成本。然而在实操中&#xff0c;还需要跟踪系统随时间的演变情况&#xff0c;…...

dns 服务器简单介绍

dns 服务器分类&#xff1a; 根域名服务器顶级域名服务器权威域名服务器本地域名服务器 dns 的查询过程 国内优秀公共域名 腾讯&#xff1a;DNSPod-免费智能DNS解析服务商-电信_网通_教育网,智能DNS-烟台帝思普网络科技有限公司 119.29.29.29 和 182.254.118.118 阿里&#xf…...

SQL基础入门——C++与SQL连接实践

在开发中&#xff0c;C与SQL数据库的连接和交互是非常常见的需求。通过将C与SQL数据库连接起来&#xff0c;我们可以轻松地执行数据存取、查询、更新等操作。C与数据库的集成通常依赖于数据库的连接器或驱动程序&#xff0c;本章节将详细讲解如何在C中使用MySQL Connector与SQL…...

对max_seq_length参数的理解,基于open-instruct框架:中英文解释

使用open-instruct (https://github.com/allenai/open-instruct )框架&#xff0c;对其中的max_seq_length参数的理解记录下来。 bash脚本内容如下&#xff1a; # 设置模型和训练参数 MODEL_NAMEgoogle/gemma-2-2b MACHINE_RANK0 MAIN_PROCESS_IP127.0.0.1 MAIN_PROCESS_PORT2…...

似然分布(Likelihood Distribution)和似然函数(Likelihood Function)有什么区别?中英双语

中文版 在统计学中&#xff0c;似然分布&#xff08;Likelihood Distribution&#xff09;和似然函数&#xff08;Likelihood Function&#xff09;是两个相关但有所不同的概念。它们都涉及给定参数的情况下&#xff0c;数据出现的概率&#xff0c;但是它们的使用方式和含义有…...

LINUX2.4.x网络安全框架

在分析LINUX2.4.x网络安全的实现之前先简介一下它里面包括的几个重要概念&#xff1a;netfilter、iptables、match、target、nf_sockopt_ops、网络安全功能点的实现。详解会在后面的分析中讲到。 首先是netfilter&#xff0c;它定义了协议栈中的检查点和在检查点上引用的数据结…...

Python毕业设计选题:基于django+vue的智能停车系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 车主管理 车辆信息管理 车位信息管理 车位类型管理 系统…...

AI界的信仰危机:单靠“规模化”智能增长的假设,正在面临挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

JMeter 并发策略-针对准点秒杀场景的压测实现

一、场景的压测实现 1&#xff0c;创建线程组&#xff0c;10并发用户执行5次&#xff1b; 2&#xff0c;创建 Synchronizing Timer 元件,用于同步线程&#xff0c;设置同步元件 Synchronizing Timer 3&#xff0c;创建 http 请求4&#xff0c;创建 view results in table 元件…...

【如何提升代码工程质量】code review篇

应该对于基本上所有软件相关的公司来说&#xff0c;都有committer机制&#xff0c;即代码写好之后会提交合并请求&#xff0c;待相关人员code review通过后再进行合入&#xff0c;所以code review就是代码合入代码仓库的最后一道关卡&#xff0c;对于代码质量的影响也是不容忽视…...

1041.困于环中的机器人

题目&#xff1a; 解题思路; 由于机器人会一直重复指令&#xff0c;存在重复多次指令才回到原点的情况&#xff0c;需要对不同情况经行分析。 当执行一次指令后回到原点&#xff0c;则机器人永远无法回到原点。当执行一次指令后不回到原点&#xff0c;只有方向向北的无法在多次…...

Python实现IP代理池

文章目录 Python实现IP代理池一、引言二、步骤一&#xff1a;获取代理IP1、第一步&#xff1a;爬取代理IP2、第二步&#xff1a;验证代理IP的有效性 三、步骤二&#xff1a;构建IP代理池四、使用示例1、完整的使用示例2、注意事项3、处理网络问题 五、总结 Python实现IP代理池 …...

【Linux网络编程】第二弹---Socket编程入门指南:从IP、端口号到传输层协议及编程接口全解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Socket 编程预备 1.1、理解源 IP 和目的 IP 1.2、认识端口号 1.2.1、端口号范围划分 1.2.2、理解 &q…...

【机器学习】机器学习学习笔记 - 监督学习 - 多项式回归决策树回归 - 03

多项式回归 解决线性回归的准备性不足问题(线性回归只能是直线&#xff0c;多项式回归引入多项式可以是曲线)通过对预测值进行多项式转换, 使得回归模型可以是非线性的多项式回归的优点是可以处理非线性的数据多项式回归的缺点是它对数据进行了多项式转换 加菲工具&#xff0…...

篡改猴(Tampermonkey)使用指南:为您的浏览器增添超级能力

篡改猴&#xff08;Tampermonkey&#xff09;使用指南&#xff1a;为您的浏览器增添超级能力 篡改猴&#xff08;Tampermonkey&#xff09; 是一款流行的用户脚本管理工具&#xff0c;可以在浏览器中安装和运行用户脚本&#xff0c;从而增强或自定义网页的功能。无论是去广告、…...

23省赛区块链应用与维护(房屋租凭【下】)

23省赛区块链应用与维护(房屋租凭) 背景描述 随着异地务工人员的增多,房屋租赁成为一个广阔市场。目前,现有技术中的房屋租赁是由房主发布租赁信息,租赁信息发布在房屋中介或租赁软件,租客获取租赁信息后,现场看房,并签订纸质的房屋租赁合同,房屋租赁费用通过中介或…...

Java中三种常用布局方式

引言 在Java Swing和JavaFX中&#xff0c;布局管理器&#xff08;Layout Managers&#xff09;用于控制组件&#xff08;如按钮、文本框等&#xff09;在容器&#xff08;如窗口、面板等&#xff09;内的位置和大小。下面介绍Java Swing中常用的三种布局方式&#xff1a; 1. Fl…...

06_数据类型

数据类型 数据类型分类 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值和第八种 BigInt类型,当前课程暂不涉及) 据类型分类 原始类型(基础类型) var age = 20, var name = 尚学堂"; var le…...

及时+准确|主动元数据平台在监管报送场景中的应用实践

面对海量的数据报送需求和日益严格的监管要求&#xff0c;如何实现监管报送的全链路自动化数据质量保障&#xff0c;是金融机构亟待解决的重要课题。本文旨在介绍一种全新的监管报送场景方案&#xff0c;帮助金融机构通过“一键溯源与口径自动盘点、指标同源自动化分析、全链路…...

[python脚本处理文件入门]-18.使用Python进行PDF文件的合并与拆分

哈喽,大家好,我是木头左! Python PDF处理库概览 1. PyPDF2 PyPDF2是一个纯Python编写的库,用于PDF文件的读写和操作。它提供了丰富的功能,包括PDF文件的合并、拆分、加密、解密等。PyPDF2的安装非常简单,只需通过pip即可安装: pip install PyPDF2安装完成后,你就可以…...

4、常量和进制转换

1、常量 1.1、常量 常量是在程序运行中值不能内改变&#xff08;常数&#xff09;。 整型:12 55 实型:21.5 字符型常量: ‘A’ 1.2、常量不同进制表示 常量数据在计算机中除了用 十进制 表示&#xff0c;还可以用 二进制、八进制、十六进制表示。 十进制数据&…...

C++:探索哈希表秘密之哈希桶实现哈希

文章目录 前言一、链地址法概念二、哈希表扩容三、哈希桶插入逻辑四、析构函数五、删除逻辑六、查找七、链地址法代码实现总结 前言 前面我们用开放定址法代码实现了哈希表&#xff1a; C&#xff1a;揭秘哈希&#xff1a;提升查找效率的终极技巧_1 对于开放定址法来说&#…...

java函数式编程和Lambda表达式

https://www.bilibili.com/video/BV1fz421C7tj?spm_id_from333.788.videopod.episodes&vd_source12d5954938d20d50645e227a6a728c76 如果一个接口中只有一个方法&#xff0c;那么就可以函数对象化&#xff1a; interface Add {int add(int a, int b);}Add add (a, b) -&…...

【线程】Java多线程代码案例(2)

【线程】Java多线程代码案例&#xff08;2&#xff09; 一、定时器的实现1.1Java标准库定时器1.2 定时器的实现 二、线程池的实现2.1 线程池2.2 Java标准库中的线程池2.3 线程池的实现 一、定时器的实现 1.1Java标准库定时器 import java.util.Timer; import java.util.Timer…...

IOU Loss详解

IoU&#xff08;Intersection over Union是目标检测中常用的指标&#xff0c;用于评估预测框和真实框的重叠程度。基于 IoU 的损失函数&#xff08;IoU Loss&#xff09;是通过优化 IoU 值来提升模型预测框的精度。 IoU 的计算公式 给定预测框 ( B_p ) 和真实框 ( B_g )&#…...

nfs服务器

1、简介 NFS &#xff08;Network File System&#xff0c;网络文件系统&#xff09;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计 算机&#xff08;不同的计算机、不同的操作系统&#xff09;之间通过TCP/IP网络共享资源&#xff0c;主要在unix系列操作系统上…...

Diving into the STM32 HAL----- IWDG and WWDG Timers笔记

墨菲定律指出&#xff0c;任何可能出错的事情都会出错。尤其是对于嵌入式系统来说&#xff0c;情况尤其如此。除了硬件故障也会对软件产生影响外&#xff0c;即使是最仔细的设计也可能会出现一些意外情况&#xff0c;导致我们设备的异常行为。这可能会产生重大成本&#xff0c;…...

使用statefulset管理pod

deployment主要管理无状态的pod&#xff0c;就算需要磁盘也是期望做动态扩容的。而对于那种有状态需要存储数据的&#xff0c;如log、数据库、消息中间件需要持久化数据的&#xff0c;则建议使用StatefulSet&#xff0c;我们的pod现在扩充了pv和pvc&#xff0c;那就使用Statefu…...

6个AI生成PPT的网站,pptai一键生成

演讲和展示PPT是当今办公和学习中的重要组成部分&#xff0c;无论是工作汇报、发表研究成果&#xff0c;还是课件培训&#xff0c;一款精心制作的PPT能够有效吸引观众的参与&#xff0c;并将你的信息深入人心。借助不断进步的人工智能技术&#xff0c;众多免费的AI PPT生成器可…...

【力扣】541.反转字符串2

问题描述 思路解析 每当字符达到2*k的时候&#xff0c;判断&#xff0c;同时若剩余字符>k,只对前k个进行判断&#xff08;这是重点&#xff09;因为字符串是不可变变量&#xff0c;所以将其转化为字符串数组&#xff0c;最后才将结果重新转变为字符串 字符串->字符数组 …...

如何优雅的用PyQt访问http(仅供参考)

使用pydantic或dataclaass创建一个数据存储对象 第一种 # coding: utf-8 from typing import Anyimport requests from pydantic import Field, BaseModelclass ResponseModel(BaseModel):status: bool Field(True, description"响应状态")message: str Field(请求…...

小程序租赁系统开发的优势与应用解析

内容概要 随着科技的迅猛发展&#xff0c;小程序租赁系统应运而生&#xff0c;成为许多企业优化业务的重要工具。首先&#xff0c;它提升了用户体验。想象一下&#xff0c;用户只需轻轻一点&#xff0c;就能够浏览和租赁心仪的商品&#xff0c;这种便捷的过程使繁琐的操作大大…...

Group Convolution(分组卷积)

分组卷积的优点&#xff1a; 减少参数数量&#xff1a; 在分组卷积中&#xff0c;每个分组只与一部分输入通道进行卷积运算&#xff0c;这意味着模型的参数数量会减少。例如&#xff0c;如果一个卷积层有8个输入通道和8个输出通道&#xff0c;且不使用分组&#xff0c;那么将有…...

uniapp在H5使用vue-router路由返回上一页不会触发销毁函数解决方法

问题&#xff1a;uniapp在H5使用vue-router路由&#xff0c;如果在H5平台上进行页面刷新操作&#xff0c;再返回上一页&#xff0c;可能会遇到beforeDestroy、destroyed、onUnload生命周期钩子不被触发的问题。这是因为在H5中&#xff0c;页面的刷新实际上是整个应用的重新加载…...

YOLOv8配置文件应该如何命名?

文末有重点 1.配置文件解析代码yolov8/ultralytics/nn/tasks.py 如下&#xff1a; def yaml_model_load(path):"""Load a YOLOv8 model from a YAML file."""import repath Path(path)if path.stem in (fyolov{d}{x}6 for x in nsmlx for d i…...

扫雷-完整源码(C语言实现)

云边有个稻草人-CSDN博客 在学完C语言函数之后&#xff0c;我们就有能力去实现简易版扫雷游戏了&#xff08;成就感满满&#xff09;&#xff0c;下面是扫雷游戏的源码&#xff0c;快试一试效果如何吧&#xff01; 在test.c里面进行扫雷游戏的测试&#xff0c;game.h和game.c…...

数据库(MySQL黑马)

基础篇 MySQL概述 数据库概述 数据库相关概念 主流的关系型数据库管理系统 MySQL数据库的安装与启动 下载&#xff1a;MySQL :: MySQL Community Downloads 安装步骤 MySQL―8.0.40超详细保姆级安装教程_mysql8.0.40安装教程-CSDN博客文章浏览阅读1k次。_mysql8.0.40安装教…...

UE5 Line Trace By Channel(通道线条追踪)节点

在 Unreal Engine 5 (UE5) 中&#xff0c;Line Trace By Channel 是一个常用于进行物理射线检测&#xff08;raycasting&#xff09;的节点。它会沿着一条从起点到终点的直线发射一条射线&#xff0c;并检测射线与世界中任何物体的碰撞。这个节点广泛应用于枪械射击、检测物体、…...

How to use the ‘git log‘ command to get change log for each file?

1. Using git log command #!/bin/bash# 目标文件名 output_file"git_log.csv"# 打印 CSV 文件的标题行 echo "CommitID,Author,Author Email,Date,Added-Lines Removed-Lines File" > $output_file echo "CommitID,Author,Author Email,Date,Add…...

node.js中实现router模块化管理

index.js const express require(express); const app express()// 导入路由模块 const router require(./router/index)// 注册路由模块 app.use(router)app.listen(3000, ()>{console.log(http://127.0.0.1:3000) })router/index.js const express require(express…...

突破性算法:让无人机集群在狭窄空间内穿针引线

导读 在建筑救援、森林搜索等任务中&#xff0c;无人机集群经常会遇到狭窄空间限制和动态障碍物变化等挑战。这些挑战会导致集群内部冲突&#xff0c;或在执行任务时因避让动态障碍物而导致系统混乱。实际应用场景和任务的严格特征往往使得全局搜索难以优化&#xff0c;而局部避…...

人工智能如何改变你的生活?

在我们所处的这个快节奏的世界里&#xff0c;科技融入日常生活已然成为司空见惯的事&#xff0c;并且切实成为了我们生活的一部分。在这场科技变革中&#xff0c;最具变革性的角色之一便是人工智能&#xff08;AI&#xff09;。从我们清晨醒来直至夜晚入睡&#xff0c;人工智能…...