自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 Qt数据结构与编码技巧全解析

本文介绍了Qt框架中的核心数据结构及其使用方法,主要包括: QDebug - 替代C++标准输出的调试工具,支持自动换行和Qt类型重载<<运算符 几何类型 - QPoint(点)、QLine(线)、QRect(矩形)等基础几何元素 QString - Qt字符串类,解决了编码转换问题,支持UTF-16内部表示,提供丰富的字符串操作接口 容器类 - 包括序列容器(QList/QVector/QQueue/QStack)和关联容器(QSet/QMap),详细介绍了它们的构造、增删改查等操作 特别强调

2025-08-26 14:48:26 922

原创 Qt对象树与事件处理全解析

本文摘要: Qt框架采用对象树模型实现自动内存管理,基于组合模式设计,Object类作为基类支持树形结构。事件处理机制包含事件队列、事件分发和事件处理三阶段,通过重写event()或event handler()实现自定义处理。事件可向上传递给父对象,通过return值或ignore()控制传递行为。事件系统可与信号槽机制协同工作,在事件处理中发射信号。文章通过实例演示了鼠标和键盘事件的处理流程,以及父子对象间的事件传递规则。

2025-08-25 09:56:48 646

原创 Qt信号槽机制深度解析

松耦合 分离了发送方与接收方类型安全关联自由生态好 有很多预设的信号和槽性能差准备时间 非虚函数 1 虚函数 5 槽函数 10。

2025-08-22 09:31:33 1088

原创 Qt入门指南:从GUI到信号槽(初识)

本文介绍了Qt开发的基础知识,主要包括GUI与CLI的区别、Qt项目结构、信号与槽机制以及图片显示方法。文章首先对比了命令行界面(CLI)和图形用户界面(GUI)的特点,阐述了事件驱动机制。随后详细讲解了Qt项目的创建过程、文件组织结构、main.cpp和MainWindow类的作用,比较了UI设计器和纯代码两种开发方式的优缺点。重点介绍了信号与槽机制,包括预设信号与槽的关联、自定义槽函数实现等。最后通过示例演示了在设计模式和纯代码模式下如何显示图片,包括资源文件创建、QPixmap使用和Label设置等操

2025-08-21 09:43:48 675

原创 TCP/UDP协议全解析:三次握手与四次挥手揭秘

原因:三次握手是为了确保双方都准备好进行通信,并且能够处理数据传输。第一次握手由客户端发起,表示想要建立连接;第二次握手由服务器回应,表示同意建立连接并告知自己的初始序列号;第三次握手由客户端再次确认,确保服务器的回应已经被正确接收。这样可以避免因网络延迟或丢包导致的连接失败问题。如果采用四次握手,则会增加不必要的通信开销和复杂性。原因:四次挥手是为了确保双方都能正确地关闭连接,并释放资源。在TCP连接中,数据传输是双向的,因此需要分别关闭两个方向的数据流。

2025-07-27 21:59:43 1399

原创 深入理解线程:从概念到实践(包含线程池实现)

线程对象被创建,但尚未启动。

2025-07-26 18:08:36 1273

原创 进程与线程 全解析(附带 博主学习时的疑惑 ai 解答 干货)

C 语言中线程的状态转换完全依赖于pthread 库和操作系统调度。开发者需通过调用等函数显式管理线程的生命周期,并遵循线程安全的最佳实践。1. 函数原型2. 功能说明execl用于执行指定路径的可执行文件(path),并替换当前进程的地址空间为新程序的代码、数据和堆栈。参数列表以NULL结尾(即(char *)0如果执行成功,execl不会返回;如果失败,返回-1并设置errno。因为成功时返回 0,失败时返回非 0 错误码。所以判断是否出错应该用if (ret!= 0),而不是if (!

2025-07-25 20:28:19 792

原创 文件与目录操作全解 :系统调用与C语言标准库 (干货:附带博主学习时的联想到的各种疑问的ai解答 )

函数名类型用途一次读取是否适合二进制是否适合文本fgetc字符逐字符读取1 个字符✅(不推荐)✅fgets行按行读取最多n-1字符❌(可能包含二进制乱码)✅fread块批量读取字节✅✅(但需手动解析)每次调用会从DIR *dirp所指向的目录流中读取一个目录项(即一个文件或子目录的信息)。它返回的是一个指向的指针,这个结构体中包含了当前目录项的信息(如文件名、inode号等)。每调用一次readdir(),目录流的位置会自动前进到下一个条目。

2025-07-24 09:15:00 948

原创 GCC编译工具链全解析 含动态库与静态库

如果表达式的值为 0,则#if 与 #endif 之间的代码会在预处理阶段删除;否则,#if 与 #endif 之间的代码会被保留,交由编译器处理。仅当 DEBUG 被定义成宏时,#if 和 #endif 之间的代码会保留到程序中。动态库之所以称为动态,是因为它在链接阶段并不会打包到可执行程序中,而是在程序运行的时候才加载的。它的作用恰恰与 #ifdef 相反:当标识符没有被定义成宏时,保留 #ifndef 与 #endif之间的代码。当链接时,有同名的静态库与动态库时,会默认与动态库进行链接。

2025-07-23 10:45:00 1754

原创 GDB调试技巧:快速定位Bug (详解)

Coredump 文件类似飞机上的"黑匣子",它会保留程序"失事"瞬间的一些信息,通常包含寄存器的状态、栈调用情况等。调试需要在编译的时候,加上一些调试相关的信息,也就是说,需要指定 -g 选项。其中 Num 为断点的编号,Enb(enable)表示断点是否有效,What表示断点在源代码的哪个位置。next/n 命令表示逐过程,也就是说遇到函数调用,它不会进入函数,而是把函数调用看作一条语句。step/s 命令可以用来进行单步调试,即遇到函数调用会进入函数。我们还可以通过命令查看参数和局部变量的值。

2025-07-22 09:45:00 1010

原创 Makefile入门:从规则到伪目标

但是这样写 Makefile,有一个弊端:如果存在名字为 clean 和 rebuild 的文件,那么make clean 和 make rebuild 就不起作用了。作为目标名称时,若存在同名文件,Make 工具会默认将其视为 “文件目标”,并通过检查文件是否存在或更新来决定是否执行对应命令。这就是 make 的执行原理,make 会递归地去查找文件之间的依赖关系,直到最终生成要执行的目标。在查找的过程中,如果出现错误,比如最后依赖的文件不存在,那么 make 就会直接退出,并报错。

2025-07-21 09:45:00 1308

原创 MySQL优化:从体系到物理结构的深度探索(全解)

客户端通过 “网络接入层” 连 MySQL ,请求到 “服务层” 解析、优化、执行,再调用 “存储引擎层” 读写数据,最终落地 “文件系统层” 持久化。​ 查询缓存不仅有大小限制,并且命中还是有点难,因为要想命中,sql语句要一模一样,他不会进行筛选,而是简单的key- value键值对。接下来,我们重点看看两个配置文件mysql.conf.d/mysql.cnf和mysql.conf.d/mysqld.cnf。是服务器mysqld要读取的配置文件,其中包含了很多字段,有些我们后续会学到。

2025-07-15 17:52:55 743

原创 存储过程探秘:数据库编程的艺术

​ 设置用户变量的rownum为0,从score表中,显示 s_id,s_score,rownum(如果@c_id 等于 c_id, @row_num = @row_num+1,否则 等于 1,因为 c_id没有定义数值,所以第一次不会相同会赋值为1)别名为 rrank ,@c_id = c_id 别名为 c_id。复合语句来包含多个语句,Statement_list 代表一个或者多个语句的列表,REPEAT循环:先执行一组语句,然后重复执行,直到指定条件为真。LEAVE语句:用于从循环中跳出。

2025-07-14 17:12:19 428

原创 MYSQL预处理与SQL注入问题(方法即实现全解)

由用户自己定义的变量,而不是系统定义的。-- 演示-- 1 定义变量set @i=0;-- 2 查询-- 方法二 在from 语句中进行初始化,因为语句的执行是从from开始执行的。-- 第二页-- 每页1条记录-- 获取1条数据-- error# 使用预处理sql语句解决问题# 三步曲操作# 1.定义预处理语句,将sql语句模板化offset?# 2.执行预处理语句# 3.释放(删除)定义的预处理语句 使用deallocate,drop来释放定义的预处理语句。

2025-07-12 09:35:28 508

原创 PID 算法的原理与应用 (通俗易懂)

名称含义PID 是比例(Proportion)、积分(Integral)、微分(Derivative)三个英文单词的缩写,因此 PID 控制即比例、积分、微分控制。无需深入掌握微积分知识,仅需理解其浅显概念即可。核心任务(两种等价描述)作为闭环控制算法:动态改变施加到被控对象的输出值,使被控对象某一物理量的实际值快速、准确、稳定地跟踪目标值(如电机定速旋转,无论负载变化,转速始终稳定在目标值)。作为基于误差调控的算法:定义误差 = 目标值 - 实际值。

2025-07-11 21:53:50 2363

原创 MYSQL C_API使用全解

经验又是没有返回结果也不会返回null,所以最好拿到返回结果之后做一下判断,如果是null,就是没有返回数据,如果不是null,使用mysql_num_rows()函数,判断是不是0,如果不是0,就进行常规的后续操作。用户发送请求,程序通过端口监听用户的,程序中会包含一系列的操作来访问数据库,但是mysql官方为我们封装好了一系列的函数,我们可以通过函数来对mysql服务器进行访问,获得结果,对数据进行一系列的处理,然后返回给用户。适用于数据量较小的情况。当一个连接,建立好之后可以查询多次。

2025-07-11 13:48:40 889

原创 LeetCode347 前K个高频元素解题思路与实现

本文分析了LeetCode 347题"前K个高频元素"的三种解法:大顶堆、小顶堆和桶排序。大顶堆实现简单但效率较低(O(n log n));小顶堆优化空间复杂度(O(n+k)),适合k较小场景;桶排序最优(O(n)),但需预知最大频率值。文章详细对比了三种方法的时间/空间复杂度及适用场景,并提供了完整代码实现。在实际应用中应根据数据规模、k值大小和频率分布特征选择合适解法。

2025-07-10 09:00:00 1091

原创 SQL实战:多表查询篇

也可以理解为复制一个数据库。比如:数据库的要备份的时候,有人也在使用数据库,所以要加锁,不用我们来进行加锁,服务器会自己进行加锁处理。

2025-07-09 10:44:46 696

原创 数据库设计精要:完整性和范式理论

摘要 本文介绍了数据库设计中数据完整性的关键概念,包括实体完整性、域完整性和参照完整性。实体完整性通过主键(唯一且非空)保证表中每行数据的唯一性;域完整性要求数据符合列的类型和范围设定;参照完整性通过外键约束维护表间关联数据的一致性。文章还探讨了多表设计中的一对一、一对多和多对多关系,并简要提及数据库设计的第一范式(原子性要求)。此外,详细说明了主键与外键的定义、创建方式及注意事项,强调了合理使用外键约束对维护数据一致性的重要性。

2025-07-08 17:13:31 863

原创 SQL 语言基础操作全解析:从库表到数据操作

我们可以在创建库中的表时,设置编码格式,如果没有设置编码格式,会与库的编码格式保持一致,但是我们在修改库的编码格式,表的编码格式不会变化。在要加入的内容前面,加一个或者两个字节来对后面的内容长度进行描述,方便后面开辟空间。我们在创建数据库的时候,给数据库指明了编码格式 ->编码格式仅仅是给数据存储字符串用的。创建数据库的时候后面会有默认的排序规则 ,这个排序规则就是为字符串排序进行的。用于结果集中,用于去除重复字段,每一个重复的字段,只保留一个。给某些东西(表,列,查询结果)起别名。comment 注释。

2025-07-02 12:07:53 740

原创 Linux基本指令(包含vim,用户,文件等方面)超详细

linux常见的所有指令总结

2025-06-11 16:54:37 629

原创 STM32 Flash 实战全解:存储结构、编程操作与安全机制深度剖析

组成部分程序存储器(主存储器):存储程序代码,起始地址0x08000000,容量根据芯片型号不同(如 C8T6 为 64KB)。系统存储器:存储原厂 Bootloader,用于串口下载程序,起始地址0x1FFFF000,容量 2KB。选项字节(Option Bytes):存储配置参数(如读写保护、看门狗设置),起始地址0x1FFFF800,容量 16 字节。特点:非易失性存储器(掉电不丢失),写入前需擦除,擦除最小单位为页(Page)。volatile。

2025-06-10 09:58:25 1343

原创 保姆级教程|STM32 IWDG 与 WWDG 看门狗:原理、配置及实战实验全攻略

英文名称本质功能硬件级程序运行监控机制,通过 “喂狗”(重置计数器)避免程序卡死 / 跑飞。类比 “自动重启按钮”,在程序异常时强制复位,保障系统可用性。应用场景嵌入式系统(如 STM32)中防止软件漏洞、硬件故障(如传感器卡死)、电磁干扰导致的系统崩溃。尤其适用于无人值守设备、工业控制等高可靠性场景。

2025-06-09 10:28:21 2040

原创 STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)

定位宏定义位置打开文件,找到预编译宏定义区域(文件头部)。核心配置项为 #define SYSCLK_FREQ_XXX,其中XXX对应不同主频(如 72MHz、36MHz 等)。根据设备型号选择配置分支超值系列(如 VL 型号):仅支持 8MHz 和 24MHz 主频。非超值系列(如 F103C8T6):支持 8MHz、24MHz、36MHz、48MHz、56MHz、72MHz 等。通过预编译指令(#ifdef)判断设备类型,选择对应配置分支(非超值系列查看#else分支)。

2025-06-08 10:55:59 1402

原创 嵌入式里的时间魔法:RTC 与 BKP 深度拆解

含义与用途:BKP 即 backup registers,是备份寄存器,可存储用户自定义数据。电源特性:当 VDD 主电源切断,由 VBAT 备用电池供电,系统唤醒、复位时数据不复位。VDD 供电电压 2.0 - 3.6 伏,VBAT 供电电压 1.8 - 3.6 伏。引脚定义:VDD 相关引脚为系统主电源,正常使用时接 3.3 伏电源;VBAT 为备用电池供电引脚,使用 BKP 和 RTC 需接备用电池,电池负极与主电源负极共地。

2025-06-07 09:54:36 1982 3

原创 W25Q64 实战指南:硬件电路、存储架构与指令代码全解析

非易失性存储:数据掉电不丢失,属于 Flash 存储器,对比易失性存储器(如 SRAM/DRAM),适用于需要持久保存数据的场景(如参数存储、字库、固件程序)。低成本与小型化价格仅几元钱,容量范围 4Mb~256Mb(需除以 8 换算为字节,如 W25Q64 为 8MB)。8 引脚封装,节省电路板空间,适合嵌入式系统。SPI 通信接口支持标准 SPI、双重 SPI(160MHz 等效频率)、四重 SPI(320MHz 等效频率),通过 MOSI/MISO 引脚复用实现高速传输。

2025-06-06 09:52:09 2300

原创 SPI 通信从入门到精通:时序、硬件、外设实战 一站式全解析

硬件 SPI 电路功能(核心优势)硬件自动处理STM32 内部集成硬件 SPI 收发电路,可自动生成时钟(SCK)、控制数据收发(MOSI/MISO),无需 CPU 实时干预(如软件 SPI 需手动翻转 GPIO 电平)。对比软件 SPI:硬件 SPI 节省 CPU 资源(如发送 1 字节仅需 1 个寄存器操作,软件需 4-8 条 GPIO 指令),传输速度提升(最高 36MHz vs 软件 SPI 的 1-2MHz)。典型场景。

2025-06-06 09:47:04 1780

原创 I2C 外设知识体系:从基础到 STM32 硬件实现

原理:通过手动翻转 GPIO 引脚电平,模拟 I2C 时序(时钟线 SCL 和数据线 SDA)。例:用软件控制 SCL 拉低 / 释放,逐位判断数据位并操作 SDA,生成通信波形。优势灵活性高,无需硬件支持,适用于简单场景。资源限制少,只需复制代码即可开辟多路 I2C 总线。局限依赖软件延时,时序精度较低(同步时序允许一定不规整)。占用 CPU 资源,不适合高频或复杂通信。

2025-06-05 10:26:15 1112

原创 MPU6050芯片 寄存器详解与配置指南(详解)

分频值越小,数据刷新越快(如分频值 = 0 时,刷新率 = 8kHz/1=8kHz)。功能:配置采样频率分频系数,控制 ADC 转换速度和数据刷新率。数据刷新率 = 陀螺仪输出时钟频率 /(1 + 分频值)

2025-06-04 12:53:46 1215

原创 I2C 通信技术深度解析:硬件原理、时序逻辑与软件模拟实战指南

I2C 总线通过。

2025-06-03 09:26:16 1127

原创 数据包发送接收全解析:HEX 与文本数据包的原理、流程及代码实现

实际应用中多字节数据通信需打包分割,避免接收方数据错位,如陀螺仪传感器数据发送。:可在数据高位加标志位,但破坏原有数据且复杂,常用添加包头、包尾方式。可以结合上一文章 USART外设一起学习哦!

2025-06-02 12:45:48 1079

原创 USART 串口通信全解析:原理、结构与代码实战

一、USART 的全称与基本定义英文全称USARTUniversalSynchronousAReceiverTransmitter,即通用同步异步收发器。核心功能:实现串行通信,支持同步通信(需时钟信号)和异步通信(无需时钟信号,依赖波特率同步)。与 UART 的本质区别UARTUniversalAReceiverTransmitter,即通用异步收发器仅支持异步通信。关键差异USART 比 UART 多一个同步时钟输出功能(对应引脚 CLK),可在通信中提供时钟信号。

2025-06-01 09:31:43 4570

原创 通信接口 之 串口通信

串口通信模块一般有 VCC、TX、RX、GND 引脚,VCC 供电视情况连接(需要按照从设备供电等),TX 与 RX 交叉连接,单向传输可只接一根通信线,电平标准不一致需加转换芯片。,也可以看做3根通信线,因为数字信号的输出和接收都是以GND为基准进行判断的。数据位表示有效载荷,低位先行;:由起始位、数据位、停止位组成,数据位 8 位代表一个字节,可加奇偶校验位,校验位用于数据验证,有奇校验和偶校验等方式。:应用广泛,成本低、易使用、线路简单,可实现设备互相通信,单片机串口能与电脑等通信,扩展应用范围。

2025-05-31 10:21:07 956

原创 深入剖析 DMA:原理、结构与工作流程详解

DMA 简介功能与权限:英文全称 direct memory access,可直接访问 STM32 内部存储器,包括运行内存、程序存储器、Flash 和寄存器等,能提供外设和存储器或存储器和存储器之间高速数据传输,无需 CPU 干预,节省 CPU 资源。通道数量:STM32 的 DMA 有 12 个独立可配置通道,DMA1 有 7 个通道,DMA2 有 5 个通道,通道是数据转运路径,多个通道转运互不干扰。触发方式:每个通道支持软件触发和特定硬件触发;

2025-05-30 09:52:08 1711

原创 STM32 AD单通道与多通道实战指南

AD 单通道 与 多通道 实战指南

2025-05-29 10:00:22 1483

原创 STM32 ADC工作原理与配置详解

ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:03.3V,转换结果范围:0409518个输入通道,可测量16个外部和2个内部信号源规则组和注入组两个转换单元模拟看门狗自动监测输入电压范围STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道ADC 基础定义全称。

2025-05-28 15:08:29 2092

原创 TIM 编码器接口技术全解:原理、结构、代码实现与应用实例

Encoder Interface 编码器接口编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用定时器都拥有1个编码器接口两个输入引脚借用了输入捕获的通道1和通道2编码器接口核心原理与硬件资源基本概念英文名称:Encoder Interface,直接接收正交编码器(增量式编码器)信号。正交信号特性。

2025-05-27 09:28:58 1036

原创 STM32 定时器TIM外设 输入捕获技术全解析:原理、电路与应用实战(铁头山羊 江协 双解析)

输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。:是一个复用器,有 TRC(从模式控制器信号)、直接和间接三路输入,常用直接和间接,可实现通道间信号交叉引用,节省引脚。:定时器有四个通道,通道一和通道 2、通道 3 和通道 4 内部结构一样,选取部分通道分析内部结构。:以测量脉冲信号脉宽为例,配置定时器,接入信号到通道一和通道二,分别捕捉上升沿和下降沿,计算脉宽。可配合主从触发模式,实现硬件全自动测量。

2025-05-26 11:31:19 1540

原创 STM32 输出比较输出PWM控制呼吸灯小实验(2种实现 铁头山羊与江协科技)

让 LED 亮度连续变化类似正弦函数,将标准正弦函数 y = sin2πt 通过加 1、乘以 0.5 变换到 0 到 1 范围,通过调节 PWM 占空比模拟正弦信号,使 LED 两端电压按此函数变化。:使用 gplo pin remap config 函数进行重映射配置,根据手册选择合适的重映射方式,如将 Tim 2 的 CG1 从 PA0 挪到 PA15 可选择部分重映射一或完全重映射。因为标准的正弦函数,频率为1HZ,是使PWM信号的占空比为这个正弦函数。找到IO口之后,查看GPIO口的配置模式。

2025-05-25 10:10:25 1454

原创 STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)

直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向直流电机及驱动电机特性:将电能转化为机械能,电极正接正转,反接反转,属于大功率器件,GPIO 口无法直接驱动。驱动芯片:选用 TB6612 双路 h 桥型直流电机驱动芯片,可驱动两个直流电机并控制转速和方向,集成度高,外围只需三个滤波电容。

2025-05-24 10:10:03 1951

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除