嵌入式基础(三)基础外设
嵌入式基础(三)基础外设
1.什么是UART?与USART有什么区别⭐⭐⭐
(1)什么是UART
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。是一种异步全双工串行通信协议,它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上,它不是像SPI和I2C这样的通信协议,而是微控制器中独立的物理电路或独立的IC。UART工作原理是将数据的二进制位一位一位的进行传输。
硬件连接
硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,如下图所示:
- TX:发送数据端,要接对面设备的RX。
- RX:接收数据端,要接对面设备的TX。
- GND:保证两设备共地,有统一的参考平面。
通信协议
UART作为异步串口通信协议的一种,工作原理是将数据的字节一位接一位地传输。协议如下:
空闲位:
UART协议规定,当总线处于空闲状态时信号线的状态为1即高电平。
起始位:
开始进行数据传输时发送方要先发出一个低电平0来表示传输字符的开始。因为空闲位一直是高电平所以开始第一次通讯时先发送一个明显区别于空闲状态的信号即为低电平。
数据位:
起始位之后就是要传输的数据,数据可以是5,6,7,8位,构成一个字符,一般都是8位。先发送最低位LSB,再发送最高位MSB(小端模式)。
奇偶校验位:
数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式
- 无校验(No Parity)
- 奇校验(Odd Parity):如果数据位中1的数目是偶数,则校验位为1才能满足1的个数为奇数,如果1的数目是奇数,校验位为0。
- 偶校验(Even Parity):如果数据为中1的数目是偶数,则校验位为0才能满足1的个数为偶数,如果1的数目是奇数,校验位为1。
- Mark Parity:校验位始终为1。
- Space Parity:校验位始终为0。
停止位:
数据结束标志,可以是1位,1.5位,2位的高电平。
波特率:
异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。数据传输速率使用波特率来表示,单位bps(bits per second)。常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是:1 / 9600 ≈ 104.2us。
二、UART和USART的区别
特点 | UART | USART |
通信方式 | 只支持异步通信 | 可支持异步和同步通信 |
全双工通信 | 可以进行全双工数据传输 | 可以进行全双工数据传输 |
功能 | 通常只包括发送和接收功能 | 包括发送、接收、同步和异步等多种功能 |
数据线 | 一般只有两个数据线 | 在同步通信模式下需要多个数据线和时钟线 |
适用场景 | 适用于简单的低速异步通信应用 | 适用于更复杂的通信需求,包括同步和异步通信等 |
2.什么是I2C, I2C时序图?`⭐⭐
一、I2C协议简介
I2C(Inter-Integrated Circuit)是一种串行通信总线协议,用于在集成电路(IC)之间进行通信。它由两根线组成:串行数据线(SDA)和串行时钟线(SCL)。I2C总线采用主从结构,可以支持多个设备在同一条总线上进行通信。
I2C通信的特点包括简单、灵活和可靠,适用于连接多个低速设备。每个设备都有一个唯一的地址,主设备通过发送地址将数据传输给从设备,从设备接收并响应这些数据。
二、I2C总线结构
I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。
三、I2C时序图
开始条件:在时钟线保持高电平时,数据线从高电平转为低电平,即检测到一个下降沿,会形成一个开始条件;
停止条件:时钟保持高电平时,数据线从低电平转为高电平形成一个停止条件。
进行数据传输前也就是紧跟开始条件后,我们要传送地址字节,前7位是从设备地址(这也是为什么一个主机理论上最多能接127个从机,2^7-1),第八位是读/写标志位。每8bit传输完成,第九位是应答位。如果是主设备发送数据,就是从设备应答,如果是主设备读取数据,就是主设备应答。
3.请说明总线接口USRT、I2C、USB的异同点(串/并、速度、全/半双工、总线拓扑等)⭐⭐⭐⭐
下面是USRT、I2C和USB总线接口的异同点比较表:
特性 | USRT | I2C | USB |
类型 | 串行 | 串行 | 串行 |
速度 | 快 - 高达几GHz | 中等 - 最高可达400kHz | 可变 - 低速、全速、高速、超速 |
传输协议 | 可使用多种协议,如UART、SPI等 | 特定I2C协议 | 特定USB协议 |
通信线数 | 3根或更多 | 2根 | 4根至更多 |
拓扑 | 点对点或多点 | 主从结构 | 主从结构 |
协议复杂性 | 中等 | 简单 | 复杂 |
主/从设备 | 可能有多个主设备和从设备 | 一个主设备和多个从设备 | 一个主设备和多个从设备 |
半双工/全双工 | 全双工 | 半双工 | 全双工或半双工 |
应用 | 通常用于远距离通信,如RS-485 | 适用于短距离通信,如传感器与微控制器之间 | 广泛应用于外设连接、存储设备等 |
4.什么是SPI,SPI的特性?⭐⭐⭐
1、什么是SPI
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
2、SPI模式
SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。
提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。
SPI是全双工且SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps
3、SPI信号线
SPI接口一般使用四条信号线通信:
SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)
- MISO: 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
- MOSI: 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
- SCLK:串行时钟信号,由主设备产生。
- CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为"片选引脚",也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
4、SPI设备选择
SPI是单主设备( single-master )通信协议,这意味着总线中的只有一支中心设备能发起通信。
- 当SPI主设备想读/写[从设备]时:
- 它首先拉低[从设备]对应的SS线(SS是低电平有效)
- 接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,[主设备]把信号发到MOSI实现"写",同时可对MISO采样而实现"读"
6、SPI通信的四种模式
SPI的四种模式,简单地讲就是设置SCLK时钟信号线的那种信号为有效信号
它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低)。每种模式由一对参数刻画,它们称为时钟极(clock polarity)CPOL与时钟期(clock phase)CPHA。
- SPI通信有4种不同的操作模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的
- 但我们的通信双方必须是工作在同一模式下
- 所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式
具体如下:
1. 时钟极性(CPOL)定义了时钟空闲状态电平:
- CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时**(高有效)**
- CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时**(低有效)**
2. 时钟相位(CPHA)定义数据的采集时间。
- CPHA=0,在时钟的第1个跳变沿(上升沿或下降沿)进行数据采样。在第2个边沿发送数据**(1采2发)**
- CPHA=1,在时钟的第2个跳变沿(上升沿或下降沿)进行数据采样。在第1个边沿发送数据**(1发2采)**
具体如下:
- Mode0:CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平;数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变;所以数据采样是在上升沿,数据发送是在下降沿。
- Mode1:CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平;数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变;所以数据采样是在下降沿,数据发送是在上升沿。
- Mode2:CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平;数据采样是在第1个边沿,也就是SCLK由高电平到低电平的跳变;所以数据采集是在下降沿,数据发送是在上升沿。
- Mode3:CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平;数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变;所以数据采集是在上升沿,数据发送是在下降沿。
注:数据采样=准备数据
CPOL=0:高有效,0到1,即上升沿是第一个边沿
CPOL=1:低有效,1到0,即下降沿是第一个边沿
5.什么是GPIO?⭐⭐
GPIO 是 General Purpose Input/Output(通用输入/输出)的缩写,它是一种在计算机系统中用于与外部设备进行数字信号交互的通用接口。每个 GPIO 引脚可以被配置为输入或输出,并且可以通过编程来读取或写入数字信号。
6.如何使用TIM定时器实现定时中断和PWM输出?⭐⭐⭐⭐
- 初始化 TIM 定时器:使用适当的配置和预分频器设置来初始化 TIM 定时器。选择合适的计数模式,例如向上计数模式或向下计数模式,以及所需的计数器值。
- 配置定时中断:使能定时器中断功能,并设置适当的中断优先级。确保定时器溢出时会触发中断。
- 配置 PWM 输出通道:选择一个或多个输出通道来作为 PWM 输出。配置这些通道的工作模式为 PWM 模式,并设置相应的占空比(PWM 的高电平时间与周期时间的比例)。根据您的需求配置 PWM 周期和占空比的值。
- 启动定时器:调用启动定时器的函数,开始定时器的计数。
- 在定时中断服务函数中编写代码:在定时中断服务函数中编写处理程序,用于处理定时中断的逻辑。您可以在此函数中执行所需的操作,例如更新 PWM 的占空比、改变输出状态等
#include "stm32xxxx.h" // 包含特定型号的 STM32 头文件
#include "stm32xxxx_hal.h" // 包含 STM32 HAL 库头文件
TIM_HandleTypeDef htim2; // 定义一个 TIM_HandleTypeDef 结构体变量用于配置 TIM2
void SystemClock_Config(void) {
// 在这里配置系统时钟
}
void TIM2_Init(void) {
TIM_MasterConfigTypeDef sMasterConfig;
TIM_OC_InitTypeDef sConfigOC;
TIM_HandleTypeDef htim;
// 启用 TIM2 时钟
__HAL_RCC_TIM2_CLK_ENABLE();
// 配置 TIM2
htim2.Instance = TIM2;
htim2.Init.Prescaler = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 1000;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
// 初始化 TIM2
HAL_TIM_PWM_Init(&htim2);
// 设置 PWM 输出
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500; // 设置占空比,取值范围为 0 - 1000(0%-100%)
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); // 配置 TIM2 的通道 1
// 配置 TIM2 的定时中断
HAL_TIM_Base_MspInit(&htim2);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
// 启动定时器
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
HAL_TIM_Base_Start_IT(&htim2);
}
void TIM2_IRQHandler(void) {
// 处理定时中断的逻辑
// ...
HAL_TIM_IRQHandler(&htim2);
}
int main(void) {
HAL_Init();
SystemClock_Config();
TIM2_Init();
while (1) {
// 主循环中的其他任务
}
}
7.外部中断触发模式有哪些?请分别描述它们的特点和应用场景。⭐⭐⭐
触发模式 | 特点 | 应用场景 |
上升沿触发 | 信号从低电平到高电平时触发中断 | 检测按钮按下或传感器触发等高电平信号变化的场合 |
下降沿触发 | 信号从高电平到低电平时触发中断 | 检测按钮释放或传感器复位等低电平信号变化的场合 |
双边沿触发 | 信号的上升沿和下降沿均触发中断 | 需要同时检测上升沿和下降沿的场合,如通信协议的时钟信号 |
电平触发 | 信号维持相应电平期间持续触发中断 | 持续性信号的检测,如通信协议的数据线 |
8.比较I2C和SPI接口的异同点,分别适用于哪些应用场景?⭐⭐⭐
特点 | I2C | SPI |
数据线数量 | 2 根(一根用于数据传输,一根用于时钟) | 多根(最少 4 根,通常包括数据线、时钟线、片选线等) |
传输速率 | 低速,最高速率通常在几百 kHz | 高速,速率可以达到几 Mbps 或更高 |
设备连接方式 | 总线拓扑结构 | 点对点连接或主从模式 |
主从设备数量 | 高,支持多个主设备和从设备同时连接 | 通常只有一个主设备操作多个从设备 |
硬件复杂性 | 相对较低,只需要实现 I2C 控制器和设备 | 相对较高,需要实现 SPI 控制器和设备 |
适用场景 | - 传感器、EEPROM、温度传感器等小规模设备 - 系统中设备数量多、通信速率要求不高的场景 | - 存储器、FPGA、音频编解码器等需要高速数据传输的设备 - 系统中设备数量少、通信速率要求较高的场景 |
9.在STM32中如何配置和使用ADC模块?⭐⭐⭐
#include "stm32f4xx.h"
void ADC_Configuration(void) {
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
// 使能 GPIO 时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
// 使能 ADC1 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
// 配置 ADC 输入引脚为模拟模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 假设使用PA0作为ADC输入引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; // 模拟输入模式
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // 不使用上下拉电阻
GPIO_Init(GPIOA, &GPIO_InitStructure);
// ADC 配置
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; // ADC 分辨率为 12 位
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 非扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 非连续转换模式
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; // 不使用外部触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 右对齐输出
ADC_InitStructure.ADC_NbrOfConversion = 1; // 转换的通道数为1
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE); // 启用 ADC1
// 配置ADC转换通道
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);
// 启动ADC校准
ADC_GetCalibrationFactor(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
// 启动ADC转换
ADC_SoftwareStartConv(ADC1);
}
10.同步通信和异步通信⭐⭐⭐⭐
同步通信:在同步通信中,发送方和接收方的时钟是相互关联的,数据的传输和接收是基于一个共同的时钟信号进行同步的。发送方在每个时钟周期内按照时钟的节拍发送数据,接收方也按照同样的时钟节拍接收数据。双方通过时钟信号的同步来保证正确的数据传输。同步通信对时序要求较高,需要在通信双方之间建立稳定的时钟信号。
异步通信:在异步通信中,发送方和接收方没有共同的时钟信号进行同步。数据的传输和接收不依赖于特定的时钟信号,而是通过特定的起始位和停止位来标识数据的传输开始和结束。每个数据帧都有自己的起始和停止位,这样接收方可以通过检测起始和停止位来识别每个数据帧。异步通信相对较为灵活,但需要额外的控制位来标识起始和停止。
区别:
- 时钟同步:同步通信使用共同的时钟信号进行同步,异步通信没有共同的时钟信号。
- 数据帧结构:同步通信将数据划分为固定的时间片或时钟周期,而异步通信在数据之间插入起始和停止位来界定数据帧的开始和结束。
- 时序要求:同步通信对时序要求较高,通信双方需要保持严格的同步;而异步通信对时序要求较低,通信双方无需精确同步。
- 灵活性:同步通信相对刚性,因为通信双方必须始终保持同步;异步通信相对灵活,因为通信不依赖于特定的时钟信号。
相关文章:
嵌入式基础(三)基础外设
嵌入式基础(三)基础外设 1.什么是UART?与USART有什么区别⭐⭐⭐ (1)什么是UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。是一种异步全双工串行通信协议,它将要…...
【微服务管理】深入理解 Gateway 网关:原理与实现
在当今微服务架构盛行的时代,Gateway 网关扮演着举足轻重的角色。它作为微服务架构的重要组成部分,为系统提供了统一的入口,承担着诸如路由转发、负载均衡、安全防护、流量控制等关键功能。本文将深入探讨 Gateway 网关的底层原理,…...
AI与无人驾驶汽车:如何通过机器学习提升自动驾驶系统的安全性?
引言 想象一下,在高速公路上,一辆无人驾驶汽车正平稳行驶。突然,前方的车辆紧急刹车,而旁边车道有一辆摩托车正快速接近。在这千钧一发的瞬间,自动驾驶系统迅速分析路况,判断最安全的避险方案,精…...
【网络安全】通过 JS 寻找接口实现权限突破
未经许可,不得转载。 本文所述所有风险点均已修复。 文章目录 引言正文引言 以下些漏洞已被起亚方面修复;起亚方面确认,这些漏洞从未被恶意利用过。 2024年6月11日,我们发现起亚汽车存在一系列严重安全漏洞,攻击者仅凭车牌号即可远程控制车辆的核心功能。该攻击不需要接触…...
【HarmonyOS NEXT】多目标产物构建实践
目录 什么是多产物构建 如何定义多个构建产物 如何在项目中使用 参考文章 什么是多产物构建 在鸿蒙应用开发中,一个应用可定义多个 product,每一个 product 对应一个定制的 APP 包,每个 product 中支持对 bundleName、bundleType、输出产…...
Openlayers:实现聚合
一、什么是聚合 聚合是一种将一定范围内的多个图形合并为一个图形的一种技术方案。通常用来解决图形过于集中或者图形数量过多的问题。 在Openlayers中主要通过Cluster数据源来实现聚合的效果。与其它的数据源不同,Cluster数据源在实例化时需要接收一个矢量数据源…...
相机内外参
文章目录 相机内参相机外参 相机的内外参是相机标定过程中确定的重要参数,用于建立图像像素坐标与实际世界坐标之间的关系。 相机内参 定义:相机内参是描述相机内部光学和几何特性的参数,主要包括焦距、主点坐标、像素尺度因子以及畸变系数等…...
轨道力学课程习题集
轨道力学课程习题集 第一讲:轨道力学概述 思考题 推导开普勒第三定律与牛顿万有引力定律的关系。 计算地球表面的第一宇宙速度和第二宇宙速度。 设计一个太阳同步轨道,高度为800公里,要求当地时间为上午10:30。 分析地球静止轨道的稳定性…...
【Web三十一】K8S的常用命令
01 基础资源操作 查看资源 # 查看 kube-system 命名空间下的 Pod 列表 kubectl get pods -n kube-system# 查看节点详细信息(IP、状态等) kubectl get nodes -o wide# 按标签筛选 Pod(例如筛选标签 appnginx 的 Pod) ku…...
GDPR/CCPA
定义 GDPR(通用数据保护条例) 适用范围:适用于欧盟境内所有成员国,以及处理欧盟居民个人数据的全球企业。 数据主体权利:用户有权知道、访问、更正、删除(被遗忘权)自己的数据,还有…...
Lua中的元表
2025年4月14日,周一上午 Lua中的元表(metatable)是一种特殊的表,用于定义或修改其他表(或用户数据类型)的行为。通过元表中的元方法(meta-methods),开发者可以自定义表在…...
Sql Server(自用查看版)
目录 1、基本数据库相关概念 1.1数据Data 1.2数据库DataBase,DB 1.3数据库管理系统DataBase Management System,DBMS 1.4数据库系统 DataBase System DBS 1.5数据库系列架构 2、SQL sever 基本概念 单表查询 查询所有列的信息,用* 查询部分列:…...
【JavaScript】二十、电梯导航栏的实现
文章目录 1、案例:电梯导航1.1 需求分析与实现1.2 关键思路梳理 2、属性选择器补充 1、案例:电梯导航 1.1 需求分析与实现 需求:点击不同的模块,页面可以自动跳转不同的位置 模块分析: 页面滚动到对应位置,导航显示…...
【Python】OpenCV图像处理
文章目录 OpenCV安装查看版本getVersionString查看图片像素shape打开图片imshowRGB灰度图图像裁剪image绘制处理噪点图像特征提取匹配图像梯度(canny边缘检测)阈值图像的形态学(腐蚀、膨胀)打开电脑的摄像头 OpenCV OpenCV&#…...
HTTP协议 --- 超文本传输协议 和 TCP --- 传输控制协议
是基于 TCP 协议的 80 端口的一种 C/S 架构协议。 特点:无状态 --- 数据传输完成后,会断开 TCP 连接,哪怕浏览器还正常运行。 请求报文 --- 方法 响应报文 --- 状态码 是一种面向连接的可靠传输协议 。 面向连接 --- 在传输数据之前&am…...
微信小程序实现table样式,自带合并行合并列
微信小程序在代码编写过程好像不支持原生table的使用,在开发过程中偶尔又得需要拿table来展示。 1.table效果展示 1.wxml <view class"table-container"><view class"table"><view class"table-row"><view cla…...
【NLP】25.python实现点积注意力,加性注意力,Decoder(解码器)与 Attention
1. 点积注意力(Dot-Product Attention) 点积注意力是最简单的注意力机制之一,其基本思想是通过计算查询(query)和键(key)之间的点积来得到相似度,进而为每个值(value&am…...
基础贪心算法集合2(10题)
目录 1.单调递增的数字 2.坏了的计算器 3.合并区间 4.无重叠区间 5. 用最少数量的箭引爆气球 6.整数替换 解法1:模拟记忆化搜索 解法2位运算贪心 7.俄罗斯套娃信封问题 补充.堆箱子 8.可被3整除的最大和 9.距离相等的条形码 10.重构字符串 1.单调递增的数字…...
Oracle OCP知识点详解3:使用 vim 编辑文件
一、Vim 核心模式解析 1.1 模式切换图谱 graph LR A[普通模式] -->|i/I/a/A| B[插入模式] B -->|Esc| A A -->|v/V/Ctrlv| C[可视模式] A -->|: / ?| D[命令模式] C -->|Esc| A D -->|Enter| A 1.2 Oracle 场景高频模式组合 模式组合应用场景操作效率提…...
项目风险的早期识别与应对清单
项目风险的早期识别与应对策略的核心在于: 建立系统化的风险识别流程、评估风险的影响程度、制定详细的应对措施、持续监控与调整风险管理计划。 其中,建立系统化的风险识别流程是风险管理的第一步,也是最为关键的一环。通过构建一套有效的识…...
springboot数据动态脱敏
反射Jackson数据动态脱敏 我有两个字段,name和type,我想要在type为1对数据脱敏,而其他情况不脱敏: CustomSerializer注解 Target(ElementType.FIELD) //表示这个注解只能用在字段上 Retention(RetentionPolicy.RUNTIME) //注解…...
算法:定义一个数组的的陡峭值为:相邻两个元素之差的绝对值之和。
定义一个数组的的陡峭值为:相邻两个元素之差的绝对值之和。现在小红拿到了一个数组,她有多次询问,每次查询一段连续子数组的陡峭值。你能帮帮她吗? 连续子数组为从原数组中,连续的选择一段元素(可以全选、可以不选)得到的新数组。 输入描述 …...
【AI提示词】网络安全专家
提示说明 网络安全专家在数字时代扮演着至关重要的角色,他们通过专业的知识和技能保护网络系统免受攻击和破坏,确保数据的安全和隐私。 提示词 # 角色 网络安全专家## 性格类型指标 INTP(内向直觉思维感知型)## 背景 网络安全专…...
AI大模型原理可视化工具:深入浅出理解大语言模型的工作原理
AI大模型原理可视化工具:深入浅出理解大语言模型的工作原理 在人工智能快速发展的今天,大语言模型(如GPT、BERT等)已经成为改变世界的重要技术。但对于很多人来说,理解这些模型的工作原理仍然是一个挑战。为了帮助更多…...
解决无人机无人化自主巡检面对的新挑战-机载通信、控制及算力的AIBOX
解决无人机无人化自主巡检面对的新挑战-机载通信、控制及算力的AIBOX 之前的微文:基于无人机的无人化自主巡检-大疆机场3M4TD,介绍了机场3的无人机无人机巡检的特点以及局限性。此处从通信增强、飞行及位置服务增强、智慧飞行以及无人机编队几个方面阐述…...
供应商涨价,项目如何控制采购成本
优化供应商结构、严格控制交付流程、强化谈判策略、设置弹性预算、建立长远合作机制 来有效控制采购成本。其中,强化谈判策略 是最核心的一步:不仅要明确价格承受范围,还需根据对方供应链特点和市场行情,准备多套备选方案…...
newbee商城购物车模块mapper.xml
1.浏览代码 1)表 自定义 DROP TABLE IF EXISTS tb_newbee_mall_shopping_cart_item; CREATE TABLE tb_newbee_mall_shopping_cart_item (cart_item_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 购物项主键id,user_id bigint(20) NOT NULL COMMENT 用户主键id…...
高级java每日一道面试题-2025年4月07日-微服务篇[Nacos篇]-如何监控Nacos的运行状态?
如果有遗漏,评论区告诉我进行补充 面试官: 如何监控Nacos的运行状态? 我回答: 监控Nacos运行状态的综合方案 在Java高级面试中,监控Nacos运行状态是一个重要的技术点,它直接关系到微服务架构的稳定性和性能。以下是一个综合的监控方案&am…...
开源技术如何助力中小企业实现财务管理自主化?
中小企业的数字化困境与开源机遇 国际数据公司(IDC)研究显示,全球67%的中小企业因高昂的软件成本和僵化的功能设计,未能有效推进数字化转型。传统商业软件常面临三大矛盾: 功能冗余与核心需求缺失:标准化系…...
3D-DIC技术:煤层开采瓦斯防治的精准监测解决方案
3D-DIC非接触式三维全场应变测量系统是基于数字图像相关算法(DIC)的一种光学测定应变、变形的方法。由CCD相机、光源、支架、数据采集器和DIC软件组成。 一、DIC技术瓦斯防治应用 新拓三维XTDIC三维全场应变测量系统,通过两个工业相机采集图…...
CS5346 - Annotation in Visualization (可视化中的注释)
文章目录 Annotation 的重要性Levels of Annotation (注释的层级)Headings and IntroductionHeadings(标题)陈述型(Statement):突出结论或有趣发现疑问型(Question)&…...
VRoid-Blender-Unity个人工作流笔记
流程 VRoid 选配模型>减面、减材质>导出vrm Blender(先有CATS、vrm插件) 导入vrm>Fix model>修骨骼>导出fbx Unity 找回贴图、改着色器、调着色器参数…… VRoid 减面 以模型不出现明显棱角为准。脸好像减面100也问题不大。 下…...
【ROS2】行为树 BehaviorTree(三):异步操作
【ROS】郭老二博文之:ROS目录 1、简述 前面的例子中,使用过同步节点 SyncActionNode,当调用到该节点时,成功返回SUCCESS,失败返回FAILURE,并且线程会等待该节点执行完毕。 如果需要异步操作,比如节点执行需要很长时间,不能立刻返回结果,可以先去执行其它任务,等该…...
Uniapp:本地存储
目录 一、概述二、分类三、同步存储:setStorageSync3.1 方法3.2 案例3.2.1 存储3.2.2 获取3.2.3 获取storage3.2.4 删除3.2.5 清空 四、异步存储:setStorage4.1 方法4.2 案例4.2.1 存储数据4.2.2 获取数据4.2.3 获取storage详情4.2.4 删除4.2.5 清空 一、…...
3D版的VLA——从3D VLA、SpatialVLA到PointVLA(不动VLM,仅动作专家中加入3D数据)
前言 之前写这篇文章的时候,就想解读下3D VLA来着,但一直因为和团队并行开发具身项目,很多解读被各种延后 更是各种出差,比如从25年3月下旬至今,连续出差三轮,绕中国半圈,具身占八成 第一轮 …...
Linux/Unix 命令pstree
pstree 是一个用于以树状结构显示系统中进程关系的 Linux/Unix 命令。它可以直观地展示进程的父子关系,帮助用户理解进程之间的层次结构。 基本用法 pstree [选项] [PID或用户名]如果不带参数,pstree 会显示所有进程的树状结构。可以指定 PID 来查看某个…...
探索Linux/Unix 系统中进程与文件的深层关系
在 Linux 和 Unix 系统中,“一切皆文件” 的设计哲学贯穿始终。这种理念不仅简化了系统的操作接口,也赋予了用户和开发者极大的灵活性。文件、目录、设备、网络套接字,甚至进程本身,都可以通过文件系统的形式进行访问和操作。其中…...
AI:线性代数之矩阵
从0到1吃透线性代数矩阵:码农必修的数学武器库 ⚔️🔥 🧩 矩阵基础概念(程序员视角) 在人工智能时代,矩阵早已突破数学课本的边界,成为程序员手中的瑞士军刀🔪。TensorFlow底层用矩阵实现张量计算⚡,OpenCV依赖矩阵完成图像卷积🌌,Spark MLlib通过矩阵分解进行…...
object类
equals() 方法 equals() 方法的原始定义是比较两个对象的内存地址是否相同,但在实际使用中,很多类都会重写这个方法,使其用于比较对象的内容是否相同。例如 String 类就重写了 equals() 方法,用于比较字符串的内容。 String str…...
MySQL表的使用(4)
首先回顾一下之前所学的增删查改,这些覆盖了平时使用的80% 我们上节课中学习到了MySQL的约束 其中Primary key 是主键约束,我们今天要学习的是外键约束 插入一个表 外键约束 父表 子表 这条记录中classid为5时候,不能插入; 删除…...
国产海光 DCU 资源监控脚本 + Promethues+grafana 深度解析
在当今数字化时代,对于服务器资源的高效监控与管理愈发重要。特别是在使用国产海光 DCU 的场景下,如何精准掌握其资源使用情况,成为了众多技术人员关注的焦点。本文将详细介绍一款国产海光 DCU 资源监控脚本,以及它与 Prometheus 和 Grafana 的结合使用,助力大家实现对 DC…...
视觉slam框架从理论到实践-第一节绪论
从opencv的基础实现学习完毕后,接下来依照视觉slam框架从理论到实践(第二版)的路线进行学习,主要以学习笔记的形式进行要点记录。 目录 1.数据里程计 2.后端优化 3.回环检测 4.建图 在视觉SLAM 中整体作业流程可分为࿱…...
基于若依的ruoyi-vue-plus的nbmade-boot在线表单的设计(二)后端方面的设计
希望大家一起能参与我的新开源项目nbmade-boot: 宁波智能制造低代码实训平台 主要目标是类似设计jeecgboot那样的online表单功能,因为online本身没有开源这部分代码,而我设计这个是完全开源的,所以希望大家支持支持,开源不容易。 今天主要是讲后端部门。 1、FormControl.ja…...
mapbox V3 新特性,加载风粒子动画
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️raster-particle 栅格粒子样式图层 api…...
开发一个答题pk小程序的大致成本是多少
答题 PK 小程序通常指的是一种允许用户之间进行实时或异步答题竞赛的应用程序,可能结合PK答题、积分系统、排行榜等功能。 一、首先,确定答题 PK 小程序的基本功能模块。这可能包括用户注册登录、题库管理、题目类型(单选、多选、判断等&am…...
深入探索如何压缩 WebAssembly
一、初始体积:默认 Release 构建 我们从最基础的构建开始,不开启调试符号,仅使用默认的 release 模式: $ wc -c pkg/wasm_game_of_life_bg.wasm 29410 pkg/wasm_game_of_life_bg.wasm这是我们优化的起点 —— 29,410 字节。 二…...
系统性能优化总结与思考-第一部分
1.C代码优化策略总结 编译器方面:用好的编译器并用好编译器(支持C11的编译器,IntelC(速度最快)GNU的C编译器GCC/G(非常符合标准),Visual C(性能折中)&#x…...
Qt6文档阅读笔记-Simple Http Server解析
此篇博文是利用Qt6如何创建一个简单的HTTP服务。 此例展示了如何使用QHttpServer类建立服务端。服务端通过QTcpServer的bind()函数监听tcp端口,并且使用route()函数增加不同URL的处理。 QSslConfiguration conf QSslConfiguration::defaultConfiguration();const a…...
深度解析Redis过期字段清理机制:从源码到集群化实践 (二)
本文紧跟 上一篇 深度解析Redis过期字段清理机制:从源码到集群化实践 (一) 可以从redis合集中查看 八、Redis内核机制深度解析 8.1 Lua脚本执行引擎原理 Lua脚本执行流程图技术方案 执行全流程解析: #mermaid-svg-X51Gno…...
【密码学——基础理论与应用】李子臣编著 第六章 祖冲之序列密码 课后习题
免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正! 不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维! 题目 逐题解析 6.1 直接看表得 0x18 0xAD 0xF8 0x25 …...