单片机学习 14-DS18B20温度传感器实验

news2024/11/17 14:23:05

DS18B20 温度传感器实验

​ 本次实验我们来学习精度较高的外部 DS18B20 数字温度传感器,由于此传感器是单总线接口,所以需要使用 51 单片机的一个 IO 口模拟单总线时序与 DS18B20 通信,将检测的环境温度读取出来。开发板上集成了 1 个 DS18B20 温度传感器接口,需插上 DS18B20 温度传感器后才能测试温度。本章要实现的功能是:系统运行时,
插上 DS18B20 温度传感器,数码管显示检测的温度值。

DS18B20介绍

​ DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线(单总线)”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。

​ DS18B20 温度传感器具有如下特点:

​ 1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电。很少这样操作,一般直接用电源供电。
​ 2、独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。
​ 3、DS18B20 支持多点组网功能,多个 DS18B20 可以并联在唯一的三线上,实现组网多点测温。
​ 4、DS18B20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
​ 5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
​ 6、可编程的分辨率为 9~12 位,对应的可分辨温度分别为 0.5℃、0.25℃、0.125℃ 和 0.0625℃,可实现高精度测温。默认工作在12位。
​ 7、在 9 位分辨率时最多在 93.75ms 内把温度转换为数字,12 位分辨率时最多在 750ms 内把温度值转换为数字,时间越长越准确。
​ 8、测量结果直接输出数字温度信号,以"一根总线"串行传送给 CPU,同时可传送 CRC 校验码,具有极强的抗干扰纠错能力。
​ 9、负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

​ DS18B20 外观实物如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xl49ECS8-1688028305523)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201114900.png)]

​ 从 DS18B20 外观图可以看到,当我们正对传感器切面(传感器型号字符那一面)时,传感器的管脚顺序是从左到右排列。管脚 1 为 GND,管脚 2 为数据DQ,管脚 3 为 VDD。如果把传感器插反,那么电源将短路,传感器就会发烫,很容易损坏,所以一定要注意传感器方向,通常我们在开发板上都会标出传感器的凸起出,所以只需要把传感器凸起的方向对着开发板凸起方向插入即可。

​ DS18B20 内部结构如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xySk2fni-1688028305524)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201146084.png)]

​ ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该 DS18B20 的地址序列号。64 位光刻 ROM 的排列是:开始 8 位(28H)是产品类型标号,接着的 48 位是该 DS18B20 自身的序列号,最后 8 位是前面 56 位的循环冗余校验码。光刻 ROM 的作用是使每一个 DS18B20 都各不相同,这样就可以实现一根总线上挂接多个 DS18B20 的目的。

​ DS18B20 温度传感器的内部存储器包括一个高速的暂存器 RAM 和一个非易失性的可电擦除的 EEPROM,后者存放高温度和低温度触发器 TH、TL 和配置寄存器。

​ 配置寄存器是配置不同的位数来确定温度和数字的转化,配置寄存器结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kuih7gfd-1688028305524)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201237473.png)]

​ 低五位一直都是"1",TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。在 DS18B20 出厂时该位被设置为 0,用户不需要去改动。R1 和R0 用来设置 DS18B20 的精度(分辨率),可设置为 9,10,11 或 12 位,对应的分辨率温度是 0.5℃,0.25℃,0.125℃和 0.0625℃。R0 和 R1 配置如下图:

​ 在初始状态下默认的精度是 12 位,即 R0=1、R1=1。高速暂存存储器由 9 个字节组成,其分配如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VfiOKUCN-1688028305524)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201330268.png)]

​ 当温度转换命令(44H)发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第 0 和第 1 个字节。存储的两个字节,高字节的前 5 位是符号位 S,其余9位为数值位。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。数据格式如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XxQAbzju-1688028305525)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201405037.png)]

​ 如果测得的温度大于 0,这 5 位为‘ 0’,只要将测到的数值乘以 0.0625(默认精度是 12 位)即可得到实际温度;如果温度小于 0,这 5 位为‘ 1’,测到的数值需要取反加 1 再乘以 0.0625 即可得到实际温度。温度与数据对应关系如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y2PlWXwl-1688028305525)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201422781.png)]

​ 比如我们要计算+85 度,数据输出十六进制是 0X0550,因为高字节的高 5位为 0,表明检测的温度是正温度,0X0550 对应的十进制为 1360,将这个值乘以 12 位精度 0.0625,所以可以得到+85 度。如果是负温度,则将数据位取反+1,然后再进行计算。知道了怎么计算温度,接下来我们就来看看如何读取温度数据,由于 DS18B20是单总线器件,所有的单总线器件都要求采用严格的信号时序,以保证 数据的完整性。DS18B20 时序包括如下几种:初始化时序、写(0 和 1)时序、 读(0和 1)时序。 DS18B20 发送所有的命令和数据都是字节的低位在前。这里我们简单介绍这几个信号的时序:
(1) 初 始 化 时 序
​ 单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至少 480us(该时间的时间范围可以从 480 到 960 微妙),以产生复位脉冲。接着主机释放总线,外部的上拉电阻将单总线拉高,延时 15~60 us,并进入接收模式。接着 DS18B20 拉低总线 60~240 us,以产生低电平应答脉冲,若为低电平,还要做延时,其延时的时间从外部上拉电阻将单总线拉高算起最少要480 微妙。初始化时序图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VgUwopzZ-1688028305525)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201625243.png)]

(2) 写 时 序
写时序包括写 0 时序和写 1 时序。所有写时序至少需要 60us,且在 2 次独立的写时序之间至少需要 1us 的恢复时间,两种写时序均起始于主机拉低总线。写 1 时序:主机输出低电平,延时 2us,然后释放总线,延时 60us。写 0时序:主机输出低电平,延时 60us,然后释放总线,延时 2us。写时序图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cyDHLKs4-1688028305525)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201650163.png)]

(3) 读 时 序
单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要 60us,且在 2 次独立的读时序之间至少需要 1us 的恢复时间。每个读时序都由主机发起,至少拉低总线 1us。主机在读时序期间必须释放总线,并且在时序起始后的 15us 之内采样总线状态。读时序图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6CbQHFiY-1688028305526)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201716621.png)]

​ 典型的读时序过程为:主机输出低电平延时 2us,然后主机转入输入模式延时 12us,然后读取单总线当前的电平,然后延时 50us。

​ 在了解了单总线时序之后,我们来看看 DS18B20 的典型温度读取过程,DS18B20 的典型温度读取过程为:复位→发 SKIP ROM 命令(0XCC)→发开始转换命令(0X44)→延时→复位→发送 SKIP ROM 命令(0XCC)→发读存储器命令(0XBE)→连续读出两个字节数据(即温度)→结束。

硬件设计

本实验使用到硬件资源如下:
(1)动态数码管
(2)DS18B20
开发板上DS18B20 模块电路,如下图所示:

​ 左边为A2-A4,右边为A5-A7开发板电路图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6LR0aOG-1688028305526)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710201848063.png)]

​ A5-A7开发板电路图从上图中可以看出,该电路是独立的,并且该接口可以支持 DS18B20 温度传感器和 DHT11 温湿度传感器。传感器接口的单总线管脚接至 J14 端子上,在介绍单总线的时候我们说过,为了让单总线默认为高电平,通常会在单总线上接上拉电阻。

​ 由于该模块电路是独立的,所以传感器接口的 DQ 管脚可以使用任意单片机管脚连接,为了与我们例程程序配套,这里使用单片机的 P3.7 管脚连接传感器的单总线接口 J14 端子。

软件设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7yhKlUoi-1688028305526)(C:\Users\10789\AppData\Roaming\Typora\typora-user-images\image-20220710162451328.png)]

程序框架如下:
(1)编写数码管显示功能
(2)编写 DS18B20 读取温度功能。通过时序图,编写温度传感器的函数。
(3)编写主函数

public.h:

#ifndef _public_H
#define _public_H//名称与头文件名字相同
#include"reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

void delay_1ms(u16 ms);
void delay_10us(u16 ten_us);


#endif

public.c:

#include"public.h"

void delay_1ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i++)
		for(j=110;j>0;j--);
}
void delay_10us(u16 ten_us)
{
	while(ten_us--);
}

smg.h:

#ifndef _smg_H
#define _smg_H

#include"public.h"

#define SMG_A_DP_PORT	 P0

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

extern u8 gsmg_code[16];//必须加extern
void smg_display(u8 dat[],u8 pos);

#endif

smg.c

#include "smg.h"

u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
								0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void smg_display(u8 dat[],u8 pos)
{
	u8 i=0;
	u8 pos_temp=pos-1;
	for(i=pos_temp;i<8;i++)
	{
	switch(7-i)//位选
		{
		case 0: LSC=1;LSB=1;LSA=1;break;
		case 1: LSC=1;LSB=1;LSA=0;break;
		case 2: LSC=1;LSB=0;LSA=1;break;
		case 3: LSC=1;LSB=0;LSA=0;break;
		case 4: LSC=0;LSB=1;LSA=1;break;
		case 5: LSC=0;LSB=1;LSA=0;break;
		case 6: LSC=0;LSB=0;LSA=1;break;
		case 7: LSC=0;LSB=0;LSA=0;break;
			}
	SMG_A_DP_PORT=dat[i-pos_temp];//传送段选数据
	delay_10us(100);//延时一段时间,等待显示稳定
	SMG_A_DP_PORT=0x00;//消音
	}
}

ds18b20.h:

#ifndef _ds18b20_H
#define _ds18b20_H
#include"public.h"

sbit DS18B20_PORT=P3^7;
void ds18b20_reset(void);
u8 ds18b20_check(void);
u8 ds18b20_init(void);

void ds18b20_write_byte(u8 dat);
u8 ds18b20_read_bit(void);
u8 ds18b20_read_byte(void);
void ds18b20_start(void);
float ds18b20_read_temperture(void);

#endif

ds18b20.c:

#include"ds18b20.h"
#include"intrins.h"
void ds18b20_reset(void)//复位 DS18B20(初始化)
{
	DS18B20_PORT=0;
	delay_10us(75);//延时大于480ms
	
	DS18B20_PORT=1;
	delay_10us(2);
}

u8 ds18b20_check(void)//检测 DS18B20 是否存在
{
	u8 time_temp=0;
	while(DS18B20_PORT&&time_temp<20)//等待 DQ 为低电平
	{
		time_temp++;
		delay_10us(1);
	}
	if(time_temp>=20)return 1;//如果超时则强制返回 1//成功为0.不成功的情况下一般返回1
	else time_temp=0;
	while((!DS18B20_PORT)&&(time_temp<20))
	{
		time_temp++;
		delay_10us(1);
	}
	if(time_temp>=20)return 1;//如果超时则强制返回1
	return 0;//成功则返回0
}

u8 ds18b20_init(void)//初始化 DS18B20 的 IO 口 DQ 同时检测 DS 的存在
{
	ds18b20_reset();
	return ds18b20_check();
}
//=============================================//

void ds18b20_write_byte(u8 dat)//写字节函数
{
	u8 i=0;
	u8 temp=0;
	
	for(i=0;i<8;i++)//大于60us
	{
		temp=dat&0x01;
		dat>>=1;
		if(temp)
		{
			DS18B20_PORT=0;
			_nop_();_nop_();//当晶振为12HZ时,_nop_()刚好为1us
			DS18B20_PORT=1;
			delay_10us(6);	
		}
		else
		{
			DS18B20_PORT=0;
			delay_10us(6);
			DS18B20_PORT=1;
			_nop_();_nop_();
		}
	}
}

u8 ds18b20_read_bit(void)
{
	u8 dat=0;
	
	DS18B20_PORT=0;
	_nop_();_nop_();
	if(DS18B20_PORT)dat=1;//数据采样
	else dat=0;
	delay_10us(5);
	return dat;
}

u8 ds18b20_read_byte(void)//读字节函数
{
	u8 i=0;
	u8 temp=0;
	u8 dat=0;
	
	for(i=0;i<8;i++)
	{
		temp=ds18b20_read_bit();
		dat>>=1;
		dat|=(temp<<7);
		//dat=(temp<<7)|(dat>>=1);//精简写法		
	}
	return dat;
}

void ds18b20_start(void)
{
	ds18b20_reset();//复位
	ds18b20_check();//检查 DS18B20
	ds18b20_write_byte(0xcc);//SKIP ROM
	ds18b20_write_byte(0x44);//转换命令
}

float ds18b20_read_temperture(void)//从 ds18b20 得到温度值
{
	u8 dath=0;//保存高字节
	u8 datl=0;//保存低字节
	u8 value=0;//保存温度
	float temp=0;
	
	ds18b20_start();
	ds18b20_reset();
	ds18b20_check();
	ds18b20_write_byte(0xcc);//SKIP ROM
	ds18b20_write_byte(0x44);//转换命令
	datl=ds18b20_read_byte();
	dath=ds18b20_read_byte();
	value=(dath<<8)+datl;
	
	if((value&0xf800)==0xf800)
	{
		value=~value+1;
		temp=value*(-0.0625);
	}else
	{
		temp=value*0.0625;
	}
	return temp;
}

main.c:

#include"public.h"
#include"smg.h"
#include"ds18b20.h"
void main()
{
	int temp_value=0;
	u8 temp_buf[5];
	u8 i=0;
	ds18b20_init();//初始化 DS18B2
	
	while(1)
	{
			i++;
			if(i%50==0)//间隔一段时间读取温度值,间隔时间要大于温度传感器转换温度时间
			temp_value=ds18b20_read_temperture()*10;//保留温度值小数后一位
			if(temp_value<0)//负温度
			{
				temp_value=-temp_value;
				temp_buf[0]=0x40;//点亮段选g,数码管段选"a"为最低位,"."为最高位
			}
			else
				temp_buf[0]=0x00;//不显示
			temp_buf[1]=gsmg_code[temp_value/1000];//百位
			temp_buf[2]=gsmg_code[temp_value%1000/100];//十位
			temp_buf[3]=gsmg_code[temp_value%1000%100/10]|0x80;//个位+小数
			temp_buf[4]=gsmg_code[temp_value%1000%100%10];//小数点后一位
			smg_display(temp_buf,4);
	}
}

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

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

相关文章

createdTime(new Date()) 数据库时间比实际多八小时

本来是createdTime&#xff08;new Date&#xff08;&#xff09;&#xff09;&#xff0c;一次生成两条数据 一直正常&#xff0c;今天却多八小时 一开始往new Date&#xff08;&#xff09;差八个小时的问题上找&#xff0c; 网上说要 在apprication.yml文件中配置一下数据…

大佬详细讲解:银行核心项目之测试阶段

最近有小伙伴留言说「想了解核心系统建设中&#xff0c;冒烟、SIT、UAT、回归测试的重点&#xff0c;如何设计测试案例&#xff0c;或相关的资料推荐等」。 这个话题很笼统&#xff0c;测试这一块儿除了业务测试&#xff0c;还有性能测试、安全测试等&#xff1b;以及不同的角…

解决pyecharts图表在jupyter notebook无法显示的问题

在jupyter notebook尝试制作pyecharts图表&#xff0c;遇到无法显示的问题&#xff0c;网上查到的结果有各种不同原因&#xff0c;此处一一罗列&#xff0c;便于大家排查并彻底解决问题。 情况1&#xff1a;图表完全无法显示 解决方案&#xff1a;参考此文档 注&#xff1a;…

web自动化测试——xpath和css语法详解(五)

目录 1.css选择器 1.1什么是css选择器&#xff1f; 1.2css选择器语法 2.xpath 1.什么是xpath&#xff1f; 2.什么是XML? 3.XML与HTML 4.节点的概念 5.XPath &#x1f381;更多干货 完整版文档下载方式&#xff1a; 1.css选择器 1.1什么是css选择器&#xff1…

SmaAt-UNet github

来源 SmaAt-UNet github SmaAt-UNet&#xff1a; 使用小型关注网结构的降水预报 论文链接 安装依赖 这个项目使用poetry作为依赖性管理。因此&#xff0c;安装所需的依赖项就像这样简单&#xff1a; conda create --name smaat-unet python3.9 conda activate smaat-unet p…

基于Java学生宿舍管理设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

正负压自动控制技术在离体肺通气系统中的应用

摘要&#xff1a;模拟肺呼吸过程的离体肺通气控制新方法——真空压力&#xff08;正负压&#xff09;法&#xff0c;目前还停留在理论层面的文献报道&#xff0c;还未见到这种方法的仪器化内容和细节。本文基于这种新方法提出了仪器化实现的具体解决方案&#xff0c;解决方案的…

闲置iPad Pro打造真正的生产力工具!使用vscode编程写代码

文章目录 前言视频教程1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7…

Windows电脑玩游戏出现白屏的解决方法

逢年过节玩游戏&#xff0c;周末放假玩游戏&#xff0c;休闲娱乐玩游戏…玩游戏成了不少电脑用户的小乐趣。但是有时候在玩游戏的过程中&#xff0c;会遇到一些令人头疼的问题&#xff0c;比如游戏突然白屏&#xff0c;无法正常进行。这种情况可能会影响游戏体验&#xff0c;甚…

Recurdyn导入x_t格式装配体

装配层次结构&#xff1a;选上表示导入的装配体包括子装配体&#xff0c;再勾选body或者subsystem表示子装配体以零件或者子系统显示在recurdyn中&#xff1b;不选&#xff0c;表示导入的装配体全部以零件显示。

如何修改 Linux 的时区

文章结构 一、查看 Linux 当前时区二、获取时区 TZ 值&#xff08;可选做&#xff09;三、配置 TZ 值四、加载配置并检验是否生效 TZ 是 time zone 的缩写&#xff01; 一、查看 Linux 当前时区 你可以使用如下命令非常容易地就查看到 Linux 系统的当前时区&#xff1a; # 查…

AE插件:能量激光描边光效特效Saber Mac

Saber Mac插件主要用于AE软件中创造制作&#xff1a;能量光束&#xff0c;光剑&#xff0c;激光&#xff0c;传送门&#xff0c;霓虹灯&#xff0c;闪电&#xff0c;电流&#xff0c;朦胧等特效&#xff0c;插件操作直观简单&#xff0c;含有25种不同类型的特效预设&#xff08…

【sql注入-WAF绕过】编写sqlmap的tamper进行sql注入

目录 编写sqlmap的绕过脚本 二、理论知识2 sqlmap的tamper脚本 三、实战部分 一、理论知识1 编写sqlmap的绕过脚本 编写sqlmap的一个简单WAF绕过脚本 #!/usr/bin/env python""" Copyright (c) 2006-2023 sqlmap developers (https://sqlmap.org/) See th…

网络安全合规-银行业数据治理架构体系搭建(二)

本次《指引》使用了许多新兴词汇&#xff0c;这些词汇均是首次被监管部门正式引用&#xff0c;并出现在银行业金融机构的监督管理文件中。我们将通过这些词汇更好地理解《指引》。 首席数据官&#xff1a;“首席数据官”首次作为需要监管机构任职资格许可的管理岗位被提出。通过…

Cortex-M内核知识点总结

总览 Cortex内核 基础 寄存器组 程序在经过编译后&#xff0c;生成可执行二进制文件&#xff0c;如上图&#xff0c;是截取某个函数在flash中存储的内容 (反汇编文件)可以看到以下信息&#xff1a; 指令的存储地址 &#xff0c;指令的二进制内容 &#xff0c; 指令代表的汇编类…

MyBatis—环境配置

MyBatis &#x1f50e;MyBatis 的定义&#x1f50e;MyBatis 的环境配置添加依赖链接数据库配置 MyBatis 中的 XML 路径 一些人习惯将 MyBatis 称为 iBatis MyBatis → iBatis(Plus 版) &#x1f50e;MyBatis 的定义 MyBatis 是⼀款优秀的持久层框架, 它⽀持⾃定义 SQL、存储过…

基于 FFmpeg 的跨平台视频播放器简明教程(四):像素格式与格式转换

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;一&#xff09;&#xff1a;FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;二&#xff09;&#xff1a;基础知识和解封装&#xff08;demux&#xff09;基于 FFmpeg 的跨平台视频…

5G NR:RACH随机接入过程

1. 简述 无论是3G,4G还是现在的5G都需要随机接入过程&#xff0c;随机接入过程主要是为了让基站和UE之间做好上行同步以及初始接入。此文章仅仅帮助大家了解此过程&#xff0c;更加具体的用途及其场景需要参考具体的3GPP协议&#xff08;38.211,38.212,38.213).主要帮助理解如下…

Redis设计与实现笔记之链表

以下为Redis链表中一个节点的结构 typedef struct listNode {// 前置节点struct listNode *prev;// 后置节点struct listNode *next;// 节点的值void *value;} listNode; 可以看见此结构与我们常见的双向链表结构类似。由前去后继节点的地址以及当前节点的值组成。 redis中链…

使用percona xtraBackup8.x进行MySql8.0备份与还原(完全备份,增量备份,差异备份)

MySQL备份与还原 备份目标&#xff1a;数据的一致性&#xff0c;服务的可用性备份技术&#xff1a;物理备份(冷备份)【直接复制数据库文件&#xff0c;适用大型数据库&#xff0c;缺点是操作时服务需要停止】和 逻辑备份(热备份)【备份的是建表建库插入的SQL语句】备份方式&am…