自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 通过VSCode远程连接到CentOS7/Ubuntu18等老系统

摘要:文章分享了在CentOS7上成功启用VSCode Remote-SSH功能的经验。解决方法简单有效,但需注意每次VSCode更新后需重新下载对应的服务包。作者亲测该方法可行,为使用旧版系统的开发者提供了实用解决方案

2025-12-20 15:06:20 228

原创 Linux_基础IO(Linux入门到精通)

摘要:本文系统讲解了C语言文件IO操作原理及文件系统相关知识。首先介绍了文件的基本概念,包括文件内容与属性的区分、打开文件的管理方式(通过文件描述符数组实现)。重点分析了重定向机制,解释了如何通过修改文件描述符实现输出重定向。然后深入探讨了缓冲区的三种刷新策略(无缓冲、行缓冲、全缓冲)及其实现原理。在文件系统部分,详细解析了磁盘存储结构、inode概念、目录实现原理以及软硬链接的区别。最后介绍了动静态库的制作和使用方法,包括gcc编译选项、库搜索路径设置等。文章还通过代码示例演示了如何模拟实现C标准库的文件

2025-12-15 22:22:32 1039

原创 Python_OpenCV入门到精通——进阶篇(看这一篇就足够了!!!)

本文是OpenCV图像处理系列教程的第三篇,主要介绍模板匹配、滤波器、形态学运算、图形检测、视频处理和人脸检测等进阶内容。首先详细讲解模板匹配的原理和实现方法,包括单模板匹配和多模板匹配。接着介绍四种常用滤波器(均值、中值、高斯和双边滤波器)的工作原理和应用场景。然后深入解析腐蚀、膨胀等形态学运算及其组合应用,包括开运算、闭运算和梯度运算等。在图形检测部分,涵盖轮廓提取、拟合、凸包以及Canny边缘检测和霍夫变换等技术。视频处理章节重点讲解摄像头视频和视频文件的读取、显示与保存方法。最后详细说明人脸检测和三

2025-12-05 17:07:04 860

原创 Python_OpenCV入门到精通——基础篇(看这一篇就足够了!!!)

在这篇系列文章中,我将带你从“完全小白”一路打怪升级到能动手做真实项目。不堆术语、不讲空话,只用你能跑通的代码 + 能看懂的图解 + 踩过的坑总结,手把手拆解 OpenCV 的核心逻辑。点个关注不迷路!!!

2025-12-02 15:10:53 779

原创 Python_OpenCV入门到精通——入门篇(看这一篇就足够了!!!)

本文是一篇OpenCV图像处理入门教程,分为四个部分:入门篇、基础篇、进阶篇和项目篇。入门篇从Python与OpenCV基础开始,详细介绍了开发环境搭建、图像基本操作(读取、显示、保存、获取属性)、像素操作(使用NumPy创建和修改图像)以及色彩空间与通道(BGR、GRAY、HSV色彩空间转换及通道拆分合并)。教程采用代码示例+图解+经验总结的方式,帮助零基础学习者快速掌握OpenCV核心概念,为后续深入学习奠定基础。重点讲解了NumPy数组操作在图像处理中的应用,包括创建黑白/彩色图像、图像拼接等实用技巧

2025-11-28 18:53:52 1475

原创 Linux_进程控制(Linux入门到精通)

本文摘要:文章主要讲解了Linux进程管理的三个核心知识点:进程等待、程序替换和进程终止。1) 进程等待通过wait/waitpid系统调用回收子进程,避免僵尸进程导致内存泄漏,同时获取子进程退出状态;2) 程序替换使用exec函数族实现,替换当前进程代码和数据但不改变PID,重点介绍了6种exec函数参数差异;3) 进程终止分析退出码($?)和异常信号,说明如何通过返回值判断进程执行结果。文章还包含一个简易shell的实现示例,演示了如何组合这些技术实现进程创建、等待、替换等功能,最后解释了环境变量继承机

2025-11-21 17:01:00 1134

原创 FreeRTOS入门

FreeRTOS入门教程

2025-11-09 14:10:32 755

原创 PCB入门教程

本文介绍了电子电路设计的基础知识与实践操作。首先讲解了元器件识别、数据手册使用、原理图绘制规范等基础知识,重点说明了元件封装、PCB叠层结构等关键概念。然后详细描述了从原理图绘制到PCB设计的完整流程,包括电源模块设计、单片机电路搭建、晶振电路处理等关键步骤,并提供了实用的EDA软件操作技巧。最后通过USB拓展坞项目实战,展示了差分信号处理、滤波电路设计等实际应用案例。全文系统性地阐述了电子电路设计的全流程,既有理论知识,又包含具体操作指南,对电子设计初学者具有实用指导价值。

2025-10-24 19:24:48 1107

原创 PID入门到精通(一篇足够)!!!!!

本文基于江科大PID教程,总结了PID控制原理及STM32实现方法。文章详细介绍了PID三要素(比例、积分、微分)的作用原理,分析了位置式和增量式PID的差异,并提供了完整的STM32代码实现。针对编码电机控制,讲解了编码器数据处理、参数整定技巧及常见问题处理(如积分饱和、噪声消除等)。特别介绍了改进算法(积分限幅、微分先行等)和双环PID的实现,通过内外环协同控制提升系统性能。最后给出了PID模块化封装方案,便于实际项目应用。

2025-10-16 21:30:55 2878 1

原创 ROS2入门教程(看这一篇就足够啦!!!)

本文介绍了ROS2的基础知识和实践操作,包括Linux常用命令、ROS2核心概念、节点创建与通信、服务与参数通信等内容。文章详细讲解了如何在Python和C++中实现话题发布订阅、服务通信、参数设置等功能,并提供了人脸检测、海龟控制等实际案例。此外,还介绍了ROS2中的launch文件使用方法,包括多节点启动、参数传递等高级功能。通过学习这些内容,读者可以掌握ROS2的基本开发流程和实际应用技巧。

2025-10-14 23:25:25 2872

原创 MaixCam二维云台检测人脸项目

本项目实现了一个基于MaixCAM Pro和STM32的人脸追踪系统。系统分为两部分:MaixCAM Pro端负责实时检测人脸并计算中心坐标,通过串口发送给STM32;STM32端接收坐标数据,通过PID控制算法驱动双轴云台舵机进行跟踪。其中,MaixCAM Pro使用YOLOv8模型进行人脸检测,STM32采用PWM控制舵机角度,并设置了死区阈值防止微小抖动。系统通过115200波特率的串口通信,实现了从图像采集到机械控制的完整闭环。该方案具有硬件成本低、实时性好的特点,可应用于智能监控、人机交互等场景。

2025-10-12 21:46:43 336

原创 深入理解C++11

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了 C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞 进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。

2025-10-04 09:06:11 1046

原创 计算机二级

注意vlookup函数是可以从一个表格里面查找,比如查找一个人某一项的数据就像这个里面一样,如果要是按人名区查找一个人的某项数据,是可以用vlookup的但是这个仅限与查找的值是在数据表的第一列,才可以正确找到,因为他是默认是第一列的如果是根据一个人的排名去找人名的话,只能用这个函数,这个函数是将你要找的数据那一列选进去,然后用MATCH函数,这个函数可以返回你要查找的数据所在数组的位置那么你选排名这一列,那么返回的就是排名匹配的那一行,然后就正好可以当index的返回值去找我们想要的数据。

2025-09-21 08:40:31 391

原创 C++_哈希

本文介绍了C++中unordered系列关联式容器的哈希表实现原理。相比红黑树结构的关联式容器,哈希表通过哈希函数建立元素与存储位置的映射关系,实现O(1)的平均查找效率。文章详细阐述了哈希冲突的解决方法(开放定址法和链地址法),并提供了哈希表的具体实现代码,包括迭代器设计、扩容机制等关键技术点。同时介绍了位图和布隆过滤器两种哈希应用,位图适用于海量数据存在性判断,布隆过滤器则用于允许一定误判率的场景。最后通过封装unordered_set和unordered_map展示了哈希表在实际开发中的应用。

2025-09-06 22:28:35 1160

原创 CAN通信入门

本文介绍了CAN总线的基础知识与应用。CAN总线是BOSCH开发的串行通信总线,具有抗干扰强、传输速率高(1Mbps/40m或125kbps/1km)、支持多设备等特点,广泛应用于汽车和工业控制领域。文章详细解析了CAN的差分信号传输、帧格式(数据/遥控/错误/过载帧)、位填充等关键技术,并对比了不同通信协议。通过STM32的CAN外设实例,展示了硬件电路设计、初始化配置、收发函数实现等开发要点,包括GPIO设置、过滤器配置及数据传输流程。最后提供了基础的CAN通信代码实现框架。

2025-09-05 20:07:20 975

原创 Linux进程概念

本文主要介绍了计算机系统中的关键概念和技术。首先阐述了冯诺依曼体系结构的特点,包括CPU只能直接访问内存、外设必须通过内存进行数据交换等核心原则。其次详细讲解了操作系统的管理功能,包括进程概念、PCB数据结构、进程状态(运行、阻塞、僵尸等)以及进程调度优先级。文章还深入探讨了环境变量的作用和使用方法,包括PATH、HOME等常见变量及其相关指令。最后分析了进程地址空间的本质,解释了虚拟地址到物理地址的转换机制,以及页表在内存管理中的重要作用。这些内容系统性地揭示了计算机系统如何通过分层管理和资源调度来实现高

2025-07-30 21:16:01 1179

原创 C++_红黑树树

本文介绍了红黑树的概念、性质及其实现。红黑树是一种二叉搜索树,通过颜色标记和旋转操作保持近似平衡,其最长路径不超过最短路径的两倍。文章详细阐述了红黑树的插入操作及其三种处理情况(uncle节点为红/不存在/黑),并提供了代码实现。此外,还讲解了红黑树的检查方法(检查连续红节点和黑节点数量一致性),以及如何用红黑树模拟实现STL中的map和set,包括迭代器设计。最后给出了完整的红黑树底层实现代码,包含旋转、平衡检查和高度计算等核心功能。

2025-07-29 19:19:23 1134

原创 STM32单片机_4(入门完结篇)

本文介绍了STM32嵌入式开发中的电源控制、看门狗和FLASH闪存三大模块。在电源控制方面,详细讲解了主频修改、睡眠模式、停止模式和待机模式的实现方法,包括时钟配置、中断唤醒等关键技术。看门狗部分对比了独立看门狗和窗口看门狗的工作原理与配置方法,强调喂狗操作的重要性。FLASH闪存章节介绍了数据存储机制,展示了如何将SRAM数据保存到FLASH以避免掉电丢失,并提供了电子签名的读取方法。全文通过代码实例详细演示了各模块的实现过程,为STM32初学者提供了实用的开发指导。

2025-07-13 17:01:36 552

原创 Linux环境基础开发工具使用

Linux安装软件的方式:1 源代码安装2 rmp安装 -- Linux安装包3 yam安装 : 解决安装源, 安装版本, 安装依赖这些问题说简单一点yam就类似于应用商店rzsz这个软件是实现Linux和windows之间消息互传sudo yum install 软件名字 : -y是不询问sudo yum remove 软件名字: -y是不询问有一些软件官方下载源里面没有, 如果我们要去安装的话就要先去安装扩展源。

2025-07-12 19:08:14 1200

原创 STM32单片机_3

摘要:本文介绍了IIC和SPI通信协议的实现方法,包括软件模拟和硬件配置。在IIC部分,详细说明了起始信号、地址寻址、应答机制等关键时序,并给出了STM32的软件模拟代码示例。SPI部分则讲解了模式0的实现,以及W25Q64 Flash存储器的读写操作流程。此外,还介绍了STM32的RTC模块使用,包括备份寄存器的读写和实时时钟的配置方法。文中提供了完整的代码实现,涵盖初始化、寄存器读写、数据收发等关键操作,并对硬件配置注意事项进行了说明。

2025-07-10 16:31:58 1180

原创 Linux_常见指令和权限理解

Linux操作系统基础与权限管理摘要 Linux是一款开源、稳定、安全的操作系统,广泛应用于服务器后端、智能设备和嵌入式场景

2025-07-08 13:14:41 911

原创 STM32单片机学习_2

本文介绍了STM32 ADC和DMA模块的使用方法。第七章详细讲解了ADC单通道和多通道的配置,包括初始化时钟、GPIO设置、ADC参数配置及校准流程。第八章介绍了DMA的基本原理和应用,包括存储器到存储器的数据传输,以及DMA与ADC多通道的结合使用,实现了高效的数据采集。第九章阐述了串口通信的实现,包括发送和接收数据的方法,以及通过状态机机制处理数据包的技巧。文中还提供了丰富的代码示例和详细解释,如ADC初始化、DMA配置、串口发送接收等,为嵌入式开发者提供了实用的参考。

2025-07-04 15:04:13 959

原创 stm32单片机学习入门_1

这篇博客记录了STM32单片机学习笔记,主要包含以下内容:1) DMA直接内存访问功能;2) 标准库工程创建方法;3) GPIO配置与使用(输入/输出模式);4) 中断系统(外部中断、定时器中断);5) PWM应用(呼吸灯、舵机控制、电机驱动);6) 输入捕获测量频率/占空比;7) 编码器测速实现。重点讲解了各类外设的初始化配置流程,并通过代码示例详细说明GPIO、定时器、PWM等模块的使用方法,包括时钟配置、结构体参数设置和典型应用场景。笔记还对比了STM32与51单片机的差异

2025-06-30 18:08:19 928

原创 python_入门基础语法(2)

本文主要介绍了Python基础语法中的条件语句、循环语句、函数定义与使用、列表/元组/字典操作以及文件读写等内容。在条件语句部分讲解了if-elif-else结构;循环语句介绍了while和for循环,特别说明了Python特有的range函数和可迭代对象概念;函数部分重点讲解了参数传递、返回值和作用域规则;数据结构部分对比了列表和元组的异同,详细说明了字典的使用方法;文件操作部分介绍了文件路径、打开方式及读写方法。文章还提及了Python特有的编程规范要求,如缩进规则和PEP8规范

2025-05-26 21:33:35 1154

原创 python_入门基础语法(1)

本文主要介绍了Python基础语法与C++/Java的主要区别。Python采用动态类型,变量类型在运行时确定,且整型无大小限制,浮点型仅float一种但相当于双精度。字符串使用灵活,单/双引号等价,支持三引号处理复杂字符串。输入输出使用input()和print(),支持f-string格式化。运算符方面,算术运算包含**幂运算和//地板除;关系运算符可直接比较字符串;逻辑运算符支持and/or/not及短路求值。Python特有赋值方式如多元赋值(a,b=1,2)和复合赋值(+=),但去除了易混淆的++

2025-05-25 17:57:38 999

原创 C++_AVL树

本文介绍了多种搜索数据的方法,包括暴力搜索、二分搜索、二叉搜索树、二叉平衡搜索树(如AVL树和红黑树)、多叉平衡搜索树(如B树)和哈希表。重点讨论了AVL树,它是一种自平衡二叉搜索树,通过确保每个节点的左右子树高度差不超过1来维持平衡。文章详细阐述了AVL树的概念、节点定义、插入操作、旋转操作(包括左单旋、右单旋和双旋)以及验证和删除操作。AVL树在查询时具有高效的时间复杂度(O(log N)),但在频繁插入和删除时性能较低,因此适合用于数据静态且需要高效查询的场景。

2025-05-19 22:20:54 1179

原创 C++_STL_map与set

关联式容器与序列式容器的主要区别在于存储结构。序列式容器如vector、list等,底层为线性序列,存储元素本身;而关联式容器如map、set等,存储键值对,数据检索效率更高。键值对由key和value组成,key用于唯一标识元素,value存储与key关联的信息。STL中的关联式容器分为树形结构和哈希结构,树形结构包括map、set、multimap、multiset,底层使用平衡搜索树(红黑树),元素有序。set存储唯一元素,不允许修改,查找时间复杂度为O(log n)。

2025-05-16 18:49:53 1286

原创 C++_进阶_异常

C语言传统的错误处理方式主要包括终止程序(如使用assert)和返回错误码。终止程序的方式在发生严重错误时使用,但用户体验较差;返回错误码则需要程序员自行处理错误,常见于系统库函数中。C++引入了异常处理机制,通过throw抛出异常,try/catch捕获和处理异常。异常处理允许在函数无法处理错误时,将错误传递给调用链中的上层函数处理。C++异常处理机制包括异常抛出、捕获、重新抛出、异常安全、异常规范和自定义异常体系等。异常处理的优点在于能够清晰展示错误信息,简化错误处理流程,但缺点包括执行流混乱、性能开销

2025-05-15 12:31:13 1116

原创 c++——二叉树进阶

本节内容主要围绕二叉搜索树(BST)展开,旨在通过二叉搜索树的学习,进一步理解map和set等数据结构的特性。二叉搜索树是一种特殊的二叉树,具有左子树节点值小于根节点、右子树节点值大于根节点的性质。文章详细介绍了二叉搜索树的基本操作,包括查找、插入和删除,并提供了递归和非递归的实现方式。此外,还探讨了二叉搜索树在实际应用中的两种模型:key搜索模型和key-value搜索模型。最后,文章通过几道LeetCode题目,展示了二叉搜索树在面试题中的应用,如二叉树的字符串表示、最近公共祖先、二叉搜索树

2025-05-10 23:30:44 1427

原创 C++进阶之——多态

本文章详细解答了多态的定义和原理,而且提供许多大厂考过的原题

2025-05-05 18:26:26 1004

原创 c++ 中的继承

下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。1很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱 形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设 计出菱形继承。否则在复杂度及性能上都有问题。2. 多继承可以认为是C++的缺陷之一,很多后来的OO(面向对象)语言都没有多继承,如Java。3. 继承和组合(1)继承和组合的区别就是:组合在类里面有定义其他的类,两者都是一种复用,都能用相应的成员和函数。

2025-05-02 12:43:15 1183

原创 模板--进阶

【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2025-04-28 22:20:00 1137

原创 stack __ queue(栈和队列)

下面用一些题来深入理解栈的压入、弹出序列_牛客题霸_牛客网这一题就不能找规律,这样就会陷入死胡同,正确的解法就是我们判断的一样我们判断就是通过想着一个模拟实现的栈,只要这个栈的top与出栈开头不同就入栈,相同pop最后看这个栈是否全出了这里里面用out来判断是否出完(若没出完就入,当入完的时候就是false)150. 逆波兰表达式求值 - 力扣(LeetCode)这里涉及到了表达式求解如正常的一个表达式 2+1*3这个表达式是前缀表达式,计算机是无法进行运算的,但是后缀表达式就可以。

2025-04-25 12:28:21 1153

原创 反向迭代器的实现

再写一个反向迭代器,只是在++的地方变为--,--的地方变为++同时rbegin 和rend与我们想象的指向位置不同。不是针对谁去写反向迭代器,而是去针对所有的类型。让解引用进行了错位,可以让便利正常进行。1要啥就传过来,如T* 和 T&2走一个萃取,可以把T 萃取出来。反向迭代器与正向迭代器是。但是写的模板不知道T类型。

2025-04-25 12:28:12 189

原创 list的模拟实现和学习

说白了就是带头循环双向循环链表stl 的两大组件就是容器和算法 ,他们两个之间是通过迭代器进行联系的这三种算法函数迭代器的种类 性质(容器底层结构决定)单项:++ forward_list /哈希(unordered_xxx)双向:++ / -- list/map/set随机:++/--/+/- vector /string/deque。

2025-03-23 23:04:51 548

原创 vector(向量)

范围for 在用在自定义类型的时候要用引用,因为拷贝的代价大。

2025-03-17 13:02:47 1041

原创 STL 简介+string

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可 能还会越界访问。

2025-03-10 17:55:13 1136

原创 模板-初阶

类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>(也就是必须显式实例化),然后将实例化的类型放在<> 中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。

2025-03-01 13:10:42 343

原创 c/c++内存管理

new的原理1. 调用operator new函数申请空间(最底层还是用malloc)2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间(还是用free)new T[N]的原理1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申 请2. 在申请的空间上执行N次构造函数delete[]的原理。

2025-02-27 21:34:34 753 1

原创 类和对象(下)

建议是,声明和初始化一致。

2025-02-26 16:39:50 987

空空如也

空空如也

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

TA关注的人

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