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

STM32传感器系列:GPS定位模块

简介

我们在做一些项目的时候,可能需要使用到GPS模块,我们可以通过这个模块获得当前的位置以及时间,我这里就教大家如何去使用GPS定位模块,并且把示例代码开源到评论区下面,有需要自取即可,我我这里用到的是GPS NEO-6M模块搭配吸盘天线或者陶瓷天线。

实验所需材料

一块 STM32F103C8T6 小系统板、一个下载器、一个 4针 I2C 通讯的 OLED 液晶、一个GPS 驱动板、一套吸盘天线套装(吸盘天线可以搁置在窗户外无遮挡的地方)或陶瓷天线(陶瓷天线必须户外空旷地实验)、一个面包板、若干杜邦线。

实验步骤

1、通过 STLINK 下载器给小系统板烧录我开源的GPS示例代码。

2、拔掉小系统板上连接的 STLINK 杜邦线,用 4根杜邦线连接系统板和 OLED 液晶屏,用 4 根杜邦线连接系统板和 GPS 模块。

最小系统板和 OLED 液晶屏的接线方式:

VCC5V/3.3V
GNDGND
SCLPB12
SDAPB13

 最小系统板和 GPS 模块的接线方式:

VCC5V
GNDGND
RXPA2
TXPA

3、连接好后,用 USB 数据线给开发板上电 

4、可以看到 OLED 液晶屏幕显示“爱学电子的刻刻帝”以及“模块同步中“。

5、等有信号后,GPS 模块上的 LED 灯会闪烁,获取到数据后,OLED 液晶屏幕上会显示 GPS 的经纬度以及时间会按北京时间走动。

模块介绍 

引脚介绍

其中,PPS引脚同时连接到了模块自带了的状态指示灯:PPS,该引脚连接在UBLOX NEO-6M模组的TIMEPULSE端口,该端口的输出特性可以通过程序设置。PPS指示灯(即PPS引脚),在默认条件下(没经过程序设置),有2个状态:

1, 常亮,表示模块已开始工作,但还未实现定位。

2, 闪烁(100ms灭,900ms亮),表示模块已经定位成功。

指令解析 

NMEA-0183 协议简介:

NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备
制定的标准格式。目前业已成了GPS导航设备统一的RTCM标准协议。NMEA-0183协议采用ASCII码来传递GPS定位信息,我们称之为帧。帧格式形如:$aaccc,ddd,ddd,…,ddd*hh(CR)(LF)
1、“$”:帧命令起始位
2、aaccc:地址域,前两位为识别符(aa),后三位为语句名(ccc)
3、ddd…ddd:数据
4、“*”:校验和前缀(也可以作为语句数据结束的标志)
5、hh:校验和(check sum),$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到
校验和后,再转换16进制格式的ASCII字符)
6、(CR)(LF):帧结束,回车和换行符

 

UTC 时间即协调世界时,相当于本初子午线(0 度经线)上的时间,北京时间比 UTC 8 个小时。  

指令讲解 

1,$GPGGA(GPS定位信息,Global Positioning System Fix Data)
$GPGGA语句的基本格式如下(其中M指单位M,hh指校验和,CR和LF代表回车换行,下同):
$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
(1)UTC时间,格式为hhmmss.ss;
(2)纬度,格式为ddmm.mmmmm(度分格式);
(3)纬度半球,N或S(北纬或南纬);
(4)经度,格式为dddmm.mmmmm(度分格式);
(5)经度半球,E或W(东经或西经);
(6)GPS状态,0=未定位,1=非差分定位,2=差分定位;
(7)正在使用的用于定位的卫星数量(00~12)
(8)HDOP水平精确度因子(0.5~99.9)
(9)海拔高度(-9999.9到9999.9米)
(10)大地水准面高度(-9999.9到9999.9米)
(11)差分时间(从最近一次接收到差分信号开始的秒数,非差分定位,此项为空)
(12)差分参考基站标号(0000到1023,首位0也将传送,非差分定位,此项为空)
举例如下:
$GPGGA,023543.00,2308.28715,N,11322.09875,E,1,06,1.49,41.6,M,-5.3,M,,*7D
2,$GPGSA(当前卫星信息)
$GPGSA语句的基本格式如下:
$GPGSA,(1),(2),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(4),(5),(6)*hh(CR)(LF)
(1) 模式,M = 手动,A = 自动。
(2) 定位类型,1=未定位,2=2D定位,3=3D定位。
(3) 正在用于定位的卫星号(01~32)
(4) PDOP综合位置精度因子(0.5-99.9)
(5) HDOP水平精度因子1(0.5-99.9)
(6) VDOP垂直精度因子(0.5-99.9)
举例如下:
$GPGSA,A,3,26,02,05,29,15,21,,,,,,,2.45,1.49,1.94*0E
注1:精度因子值越小,则准确度越高。
3,$GPGSV(可见卫星数,GPS Satellites in View)
$GPGSV语句的基本格式如下:
$GPGSV, (1),(2),(3),(4),(5),(6),(7),...,(4),(5),(6),(7)*hh(CR)(LF)
(1) GSV语句总数。
(2) 本句GSV的编号。
(3) 可见卫星的总数(00~12,前面的0也将被传输)。
(4) 卫星编号(01~32,前面的0也将被传输)。
(5) 卫星仰角(00~90度,前面的0也将被传输)。
(6) 卫星方位角(000~359度,前面的0也将被传输)
(7) 信噪比(00~99dB,没有跟踪到卫星时为空)。
注:每条GSV语句最多包括四颗卫星的信息,其他卫星的信息将在下一条$GPGSV语句中输出。
举例如下:
$GPGSV,3,1,12,02,39,117,25,04,02,127,,05,40,036,24,08,10,052,*7E
$GPGSV,3,2,12,09,35,133,,10,01,073,,15,72,240,22,18,05,274,*7B
$GPGSV,3,3,12,21,10,316,31,24,16,176,,26,65,035,42,29,46,277,18*7A
4,$GPRMC(推荐定位信息,Recommended Minimum Specific GPS/Transit Data)
$GPRMC语句的基本格式如下:
$GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF)
(1) UTC时间,hhmmss(时分秒)
(2) 定位状态,A=有效定位,V=无效定位
(3) 纬度ddmm.mmmmm(度分)
(4) 纬度半球N(北半球)或S(南半球)
(5) 经度dddmm.mmmmm(度分)
(6) 经度半球E(东经)或W(西经)
(7) 地面速率(000.0~999.9节)
(8) 地面航向(000.0~359.9度,以真北方为参考基准)
(9) UTC日期,ddmmyy(日月年)
(10)磁偏角(000.0~180.0度,前导位数不足则补0)
(11) 磁偏角方向,E(东)或W(西)
(12) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)
举例如下:
$GPRMC,023543.00,A,2308.28715,N,11322.09875,E,0.195,,240213,,,A*78
5,$GPVTG(地面速度信息,Track Made Good and Ground Speed)
$GPVTG语句的基本格式如下:
$GPVTG,(1),T,(2),M,(3),N,(4),K,(5)*hh(CR)(LF)
(1) 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)
(2) 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)
(3) 地面速率(000.0~999.9节,前面的0也将被传输)
(4) 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)
(5) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)
举例如下:
$GPVTG,,T,,M,0.195,N,0.361,K,A*2A
6,$GPGLL(定位地理信息,Geographic Position)
$GPGLL语句的基本格式如下:
$GPGLL,(1),(2),(3),(4),(5),(6),(7)*hh(CR)(LF)
(1) 纬度ddmm.mmmmm(度分)
(2) 纬度半球N(北半球)或S(南半球)
(3) 经度dddmm.mmmmm(度分)
(4) 经度半球E(东经)或W(西经)
(5) UTC时间:hhmmss(时分秒)
(6) 定位状态,A=有效定位,V=无效定位
(7) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)
举例如下:
$GPGLL,2308.28715,N,11322.09875,E,023543.00,A,A*6A
7,$GPZDA(当前时间信息)
$GPZDA语句的基本格式如下:
$GPZDA,(1),(2),(3),(4),(5),(6)*hh(CR)(LF)
(1) UTC时间:hhmmss(时分秒)
(2) 日
(3) 月
(4) 年
(5) 本地区域小时(NEO-6M未用到,为00)
(6) 本地区域分钟(NEO-6M未用到,为00)
举例如下:
$GPZDA,082710.00,16,09,2002,00,00*64
NMEA-0183协议命令帧部分就介绍到这里,接下来我们看看NMEA-0183协议的校验,通过前面
的介绍,我们知道每一帧最后都有一个hh的校验和,该校验和是通过计算$与*之间所有字符
ASCII码的异或运算得到,将得到的结果以ASCII字符表示就是该校验(hh)。
例如语句:$GPZDA,082710.00,16,09,2002,00,00*64,校验和(红色部分参与计算)计算方法为:
0X47xor 0X50xor 0X5Axor 0X44xor 0X41xor 0X2Cxor 0X30xor 0X38xor 0X32xor 0X37xor 
0X31xor 0X30xor 0X2Exor 0X30xor 0X30xor 0X2Cxor 0X31xor 0X36xor 0X2Cxor 0X30xor 
0X39xor 0X2Cxor 0X32xor 0X30xor 0X30xor 0X32xor 0X2Cxor 0X30xor 0X30xor 0X2Cxor 
0X30xor 0X30
得到的结果就是0X64,用ASCII表示就是64。
NMEA-0183协议我们就介绍到这里,了解了该协议,我们就可以编写单片机代码,解析
NMEA-0183数据,从而得到GPS定位的各种信息了。

程序设计 

串口初始化程序

这里我们用到了串口2,我们初始化串口2。

void USART_Config_Init(void)
{USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = 38400;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART2, &USART_InitStructure);/* Enable USARTy Receive  interrupts */USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);USART_ITConfig(USART2,USART_IT_IDLE,ENABLE);//使能空闲中断/* Enable the USART2 */USART_Cmd(USART2, ENABLE);delay_ms(10);//等待10ms
}

串口2接收中断回调函数

void USART2_IRQHandler(void)
{uint8_t temp;if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET){	   //防止溢出中断USART_ReceiveData(USART2); }   if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){		//USART接收中断temp = USART_ReceiveData(USART2);if(rx_index > RXBUFF_SIZE){		   //溢出不再接收数据return;}aRxBuffer[rx_index++] = temp;}if(USART_GetFlagStatus(USART2, USART_FLAG_IDLE) != RESET){		//USART空闲中断USART_ReceiveData(USART2);RX_len=rx_index;memcpy(USART2_RX_BUF,aRxBuffer,RX_len);//把缓冲区的数据,放入需要解析的数组rx_index=0;}}

 GPS模块初始化

//配置UBLOX NEO-6的更新速率	    
//measrate:测量时间间隔,单位为ms,最少不能小于200ms(5Hz)
//reftime:参考时间,0=UTC Time;1=GPS Time(一般设置为1)
//返回值:0,发送成功;其他,发送失败.
uint8_t Ublox_Cfg_Rate(uint16_t measrate,uint8_t reftime)
{_ublox_cfg_rate *cfg_rate=(_ublox_cfg_rate *)USART2_TX_BUF;if(measrate<200)return 1;	//小于200ms,直接退出cfg_rate->header=0X62B5;	//cfg headercfg_rate->id=0X0806;	 	//cfg rate idcfg_rate->dlength=6;	 	//数据区长度为6个字节.cfg_rate->measrate=measrate;//脉冲间隔,uscfg_rate->navrate=1;		//导航速率(周期),固定为1cfg_rate->timeref=reftime; 	//参考时间为GPS时间Ublox_CheckSum((uint8_t*)(&cfg_rate->id),sizeof(_ublox_cfg_rate)-4,&cfg_rate->cka,&cfg_rate->ckb);HAL_UART_Transmit(USART2, (uint8_t *)&USART2_TX_BUF, sizeof(_ublox_cfg_rate));return Ublox_Cfg_Ack_Check();
}

解析GPS接收到的信息 

//NMEA 0183 协议解析后数据存放结构体
__packed typedef struct  
{										    uint8_t svnum;					//可见卫星数nmea_slmsg slmsg[12];		//最多12颗卫星nmea_utc_time utc;			//UTC时间uint32_t latitude;				//纬度 分扩大100000倍,实际要除以100000uint8_t nshemi;					//北纬/南纬,N:北纬;S:南纬				  uint32_t longitude;			    //经度 分扩大100000倍,实际要除以100000uint8_t ewhemi;					//东经/西经,E:东经;W:西经uint8_t gpssta;					//GPS状态:0,未定位;1,非差分定位;2,差分定位;6,正在估算.				  uint8_t posslnum;				//用于定位的卫星数,0~12.uint8_t possl[12];				//用于定位的卫星编号uint8_t fixmode;					//定位类型:1,没有定位;2,2D定位;3,3D定位uint16_t pdop;					//位置精度因子 0~500,对应实际值0~50.0uint16_t hdop;					//水平精度因子 0~500,对应实际值0~50.0uint16_t vdop;					//垂直精度因子 0~500,对应实际值0~50.0 int altitude;			 	//海拔高度,放大了10倍,实际除以10.单位:0.1m	 uint16_t speed;					//地面速率,放大了1000倍,实际除以10.单位:0.001公里/小时	 
}nmea_msg; //提取NMEA-0183信息
//gpsx:nmea信息结构体
//buf:接收到的GPS数据缓冲区首地址
void GPS_Analysis(nmea_msg *gpsx,uint8_t *buf)
{NMEA_GPGSV_Analysis(gpsx,buf);	//GPGSV解析NMEA_GPGGA_Analysis(gpsx,buf);	//GPGGA解析 	NMEA_GPGSA_Analysis(gpsx,buf);	//GPGSA解析NMEA_GPRMC_Analysis(gpsx,buf);	//GPRMC解析NMEA_GPVTG_Analysis(gpsx,buf);	//GPVTG解析
}

 显示GPS解析到的数据

//显示GPS定位信息 
void Gps_Msg_Show(void)
{float tp;		   tp=gpsx.longitude;	   sprintf((char *)dtbuf,":%.5f %1c",tp/=100000,gpsx.ewhemi);	//得到经度字符串OLED_ShowF16x16(2,1,13);//经OLED_ShowF16x16(2,3,14);//度OLED_ShowString(2,5,(char *)dtbuf);tp=gpsx.latitude;	   sprintf((char *)dtbuf,":%.5f %1c",tp/=100000,gpsx.nshemi);	//得到纬度字符串OLED_ShowF16x16(3,1,15);//纬OLED_ShowF16x16(3,3,16);//度OLED_ShowString(3,5,(char *)dtbuf); 	 if(gpsx.fixmode<=3)														//定位状态{  gpsx.utc.hour = gpsx.utc.hour + 8; //已知的UTC时间,转换成北京时间,差8小时if(gpsx.utc.hour>=24){gpsx.utc.hour-=24;}sprintf((char *)dtbuf,":%02d:%02d:%02d",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec);	//显示北京时间OLED_ShowF16x16(4,1,17);//时OLED_ShowF16x16(4,3,18);//间OLED_ShowString(4,5,(char *)dtbuf); 	}}	 

完整的工程代码 

通过网盘分享的文件:实时显示当前位置GPS信息.zip
链接: https://pan.baidu.com/s/1rIcEV_G6ukU4uVn44VBgMA?pwd=grtu 提取码: grtu

相关文章:

STM32传感器系列:GPS定位模块

简介 我们在做一些项目的时候&#xff0c;可能需要使用到GPS模块&#xff0c;我们可以通过这个模块获得当前的位置以及时间&#xff0c;我这里就教大家如何去使用GPS定位模块&#xff0c;并且把示例代码开源到评论区下面&#xff0c;有需要自取即可&#xff0c;我我这里用到的…...

技术成长战略是什么?

文章目录 技术成长战略是什么&#xff1f;1. 前言2. 跟技术大牛学成长战略2.1 系统性能专家案例2.2 从开源到企业案例2.3 技术媒体大V案例2.4 案例小结 3. 学习金字塔和刻意训练4. 战略思维的诞生5. 建议 技术成长战略是什么&#xff1f; 1. 前言 在波波的微信技术交流群里头…...

【前端】Vue3与Element Plus结合使用的超详细教程:从入门到精通

文章目录 Moss前沿AI一、教程概述1.1 目标读者1.2 学习目标 二、为什么选择Vue3与Element Plus2.1 Vue3的优势2.2 Element Plus的优势2.3 二者结合的优势 三、环境搭建3.1 创建Vue3项目3.2 安装Element Plus3.3 引入Element Plus 四、Element Plus常用组件使用详解4.1 按钮&…...

Linux 35.6 + JetPack v5.1.4之 pytorch升级

Linux 35.6 JetPack v5.1.4之 pytorch升级 1. 源由2. 升级步骤1&#xff1a;获取二进制版本步骤2&#xff1a;安装二进制版本步骤3&#xff1a;获取torchvision步骤4&#xff1a;安装torchvision步骤5&#xff1a;检查安装版本 3. 使用4. 补充4.1 torchvision版本问题4.2 支持…...

旷视科技C++面试题及参考答案

在 Linux 系统下常用的命令有哪些? 在 Linux 系统中有许多常用命令。首先是文件和目录操作相关的命令。“ls” 命令用于列出目录的内容,它有很多选项,比如 “ls -l” 可以以长格式显示文件和目录的详细信息,包括文件权限、所有者、大小、修改时间等;“ls -a” 则会显示所有…...

C 语言函数指针 (Pointers to Functions, Function Pointers)

C 语言函数指针 {Pointers to Functions, Function Pointers} 1. Pointers to Functions (函数指针)2. Function Pointers (函数指针)2.1. Declaring Function Pointers2.2. Assigning Function Pointers2.3. Calling Function Pointers 3. Jump Tables (转移表)References 1. …...

66.基于SpringBoot + Vue实现的前后端分离-律师事务所案件管理系统(项目 + 论文)

项目介绍 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装律师事务所案件管理系统软件来发挥其高效地信息处理的作用…...

Docker容器中Elasticsearch内存不足问题排查与解决方案

在使用Docker运行Elasticsearch&#xff08;ES&#xff09;时&#xff0c;可能会遇到内存不足的问题&#xff0c;导致ES无法启动。以下是一次完整的排查和解决过程。 问题描述 在启动ES时&#xff0c;日志提示如下错误&#xff1a; # Native memory allocation (mmap) failed…...

Ubuntu 下测试 NVME SSD 的读写速度

在 Ubuntu 系统下&#xff0c;测试 NVME SSD 的读写速度&#xff0c;有好多种方法&#xff0c;常用的有如下几种&#xff1a; 1. Gnome-disks Gnome-disks&#xff08;也称为“Disks”&#xff09;是 GNOME 桌面环境中的磁盘管理工具&#xff0c;有图形界面&#xff0c;是测试…...

Neo4j的部署和操作

注&#xff1a;本博文展示部署哥操作步骤和命令&#xff0c;具体报告及运行截图可通过上方免费资源绑定下载 一&#xff0e;数据库的部署与配置 在单个节点上对进行数据库的单机部署 &#xff08;1&#xff09;上传neo4j-community-3.5.30-unix.tar.gz到hadoop1的/export/so…...

react axios 优化示例

使用 axios 是 React 项目中非常常见的 HTTP 请求库。为了提升 axios 在 React 中的性能、可维护性和用户体验,我们可以从 代码组织、请求优化 和 用户体验优化 多个角度进行详细的优化。 一、安装与基础配置 安装 axios npm install axios创建 Axios 实例 为了更好地管理…...

探索数字化展馆:开启科技与文化的奇幻之旅

在科技飞速发展的当下&#xff0c;数字展馆作为一种新兴的展示形式&#xff0c;正逐渐走进大众的视野。数字展馆不仅仅是传统展馆的简单“数字化升级”&#xff0c;更是融合了多媒体、数字化技术以及人机交互等前沿科技的创新产物。 数字展馆借助VR、AR、全息投影等高科技手段&…...

基于深度学习的视觉检测小项目(七) 开始组态界面

开始设计和组态画面。 • 关于背景和配色 在组态画面之前&#xff0c;先要确定好画面的风格和色系。如果有前端经验和美术功底&#xff0c;可以建立自己的配色体系。像我这种工科男&#xff0c;就只能从网络上下载一些别人做好的优秀界面&#xff0c;然后在photo shop中抠取色…...

AI赋能跨境电商:魔珐科技3D数字人破解出海痛点

跨境出海进入狂飙时代&#xff0c;AI应用正在深度渗透并重塑着跨境电商产业链的每一个环节&#xff0c;迎来了发展的高光时刻。生成式AI时代的大幕拉开&#xff0c;AI工具快速迭代&#xff0c;为跨境电商行业的突破与飞跃带来了无限可能性。 由于跨境电商业务自身特性鲜明&…...

【C/C++】nlohmann::json从文件读取json,并进行解析打印,实例DEMO

使用 json::parse 函数将JSON格式的字符串解析为 nlohmann::json 对象。这个函数支持多种输入源&#xff0c;包括字符串、文件流等。 #include <iostream> #include <nlohmann/json.hpp> #include <fstream>using json nlohmann::json;int main() {// 解析…...

安装Anaconda搭建Python环境,并使用VSCode作为IDE运行Python脚本

下面详细说明如何安装Anaconda搭建Python环境&#xff0c;并使用VSCode作为编辑器运行Python脚本的过程&#xff1a; 1. 下载Anaconda 访问Anaconda的官方网站&#xff1a;https://www.anaconda.com/products/distribution 3. 根据您的操作系统选择适合的版本下载。Anaconda支…...

我用AI学Android Jetpack Compose之入门篇(1)

这篇我们先来跑通第一个Android Jetpack Compose工程&#xff0c;现在新版本的Android Studio&#xff0c;新建工程选择Empty Activity默认就会开启Jetpack Compose的支持&#xff0c;再次声明&#xff0c;答案来自 通义千问Ai 文章目录 1.用Android Jetpack Compose需要安装什…...

使用 Docker 查看 Elasticsearch 错误日志

在使用 Elasticsearch&#xff08;简称 ES&#xff09;的过程中&#xff0c;我们可能会遇到各种问题。为了快速定位和解决这些问题&#xff0c;查看错误日志是关键。本文将介绍如何使用 Docker 查看 Elasticsearch 的错误日志&#xff0c;并提供一些实用技巧。 1. 安装 Docker…...

使用Apache Mahout制作 推荐引擎

目录 创建工程 基本概念 关键概念 基于用户与基于项目的分析 计算相似度的方法 协同过滤 基于内容的过滤 混合方法 创建一个推荐引擎 图书评分数据集 加载数据 从文件加载数据 从数据库加载数据 内存数据库 协同过滤 基于用户的过滤 基于项目的过滤 添加自定…...

Elasticsearch:利用 AutoOps 检测长时间运行的搜索查询

作者&#xff1a;来自 Elastic Valentin Crettaz 了解 AutoOps 如何帮助你调查困扰集群的长期搜索查询以提高搜索性能。 AutoOps 于 11 月初在 Elastic Cloud Hosted 上发布&#xff0c;它通过性能建议、资源利用率和成本洞察、实时问题检测和解决路径显著简化了集群管理。 Au…...

C语言内存管理和编译优化实战

参考&#xff1a; C语言内存管理“玄学”&#xff1a;从崩溃到精通的避坑指南C语言编译优化实战&#xff1a;从入门到进阶的高效代码优化技巧...

WEB3技术重要吗,还是可有可无?

我从几个角度给你一个全面、理性、技术导向的回答&#xff1a; ✅ 一、Web3 技术的重要性&#xff1a;“有意义&#xff0c;但不是万能” Web3 技术并不是可有可无的噱头&#xff0c;而是一种在特定场景下提供独特价值的技术体系。 它重要的原因包括&#xff1a; 1. 重构数字…...

PCB设计教程【大师篇】——STM32开发板原理图设计(电源部分)

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理 目录 前言 1. 工程创建与前期…...

设计模式(代理设计模式)

代理模式解释清楚&#xff0c;所以如果想对一个类进行功能上增强而又不改变原来的代码情况下&#xff0c;那么只需要让这个类代理类就是我们的顺丰&#xff0c;对吧?并行增强就可以了。具体增强什么?在哪方面增强由代理类进行决定。 代码实现就是使用代理对象代理相关的逻辑…...

并行硬件环境及并行编程

文章目录 A1. (并行编程 基于的)硬件环境 的 基本模型A2. 特定的硬件实现B1. 并行编程基本模型与编程技术✅ 并行编程的一般流程**第一阶段&#xff1a;基于“编程直觉模型”设计程序****第二阶段&#xff1a;程序编译并部署到实际硬件** B2.特定的 硬件环境下的 并行编程 A1. …...

变幻莫测:CoreData 中 Transformable 类型面面俱到(一)

概述 各位似秃似不秃小码农们都知道&#xff0c;在苹果众多开发平台中 CoreData 无疑是那个最简洁、拥有“官方认证”且最具兼容性的数据库框架。使用它可以让我们非常方便的搭建出 App 所需要的持久存储体系。 不过&#xff0c;大家是否知道在 CoreData 中还存在一个 Transfo…...

零基础玩转物联网-串口转以太网模块如何快速实现与TCP服务器通信

目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件准备 2.3 驱动检查 3 TCP服务器通信配置与交互 3.1 硬件连接 3.2 开启TCP服务器 3.3 打开配置工具读取基本信息 3.4 填写连接参数进行连接 3.5 通信测试 4 总结 1 前言 TCP是TCP/IP体系中的传输层协议&#xff0c;全称为Transmiss…...

计算机网络第2章(下):物理层传输介质与核心设备全面解析

目录 一、传输介质1.1 传输介质的分类1.2 导向型传输介质1.2.1 双绞线&#xff08;Twisted Pair&#xff09;1.2.2 同轴电缆&#xff08;Coaxial Cable&#xff09;1.2.3 光纤&#xff08;Optical Fiber&#xff09;1.2.4 以太网对有线传输介质的命名规则 1.3 非导向型传输介质…...

Java Fork/Join框架:三大核心组件深度解析

ForkJoinTask、ForkJoinWorkerThread 和 ForkJoinPool 构成了 Java 中 Fork/Join 框架的三个核心组件&#xff0c;它们之间形成了紧密的协作关系&#xff0c;共同提供了高效的并行计算能力。 三者关系概述 ForkJoinPool&#xff1a;执行环境&#xff0c;管理工作线程和任务调…...

大数据(2) 大数据处理架构Hadoop

一、Hadoop简介 1.定义 Hadoop 是一个开源的分布式计算框架&#xff0c;由 Apache 基金会开发&#xff0c;用于处理海量数据&#xff0c;具备高可靠性、高扩展性和高容错性。它主要由两个核心模块组成&#xff1a; HDFS&#xff08;Hadoop Distributed File System&#xff09…...