自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Qt】OpenCv人脸识别 记录1

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由英特尔公司于1999年发起并开发,现在由Itseez公司(后来被英特尔收购)和社区共同维护。OpenCV旨在提供一个通用的计算机视觉基础设施,帮助商业应用更快地使用机器学习技术。

2025-11-12 13:37:54 208

原创 【C++】调用静态函数成员

摘要:C++静态成员函数属于类而非对象,可通过类名加作用域解析运算符(::)调用,也可通过对象调用但不推荐。类内部调用静态函数可直接调用或加类名限定(推荐),而类外部调用必须加类名限定。静态函数不能访问非静态成员,常用于工具函数和计数功能。示例展示了两种调用方式及类内外的调用规范。

2025-11-11 00:29:12 146

原创 在Ubuntu系统调试摄像头的记录:/dev/video*和v4l2-ctl

这会告诉我们摄像头支持哪些格式和分辨率。两种格式,有多种分辨率可选。根据你的摄像头信息,它支持。

2025-11-10 14:14:18 745

转载 STM32系列芯片命名规则

STM32型号命名规则包含7个部分:1)产品系列(如STM32);2)产品类型(F通用/L低电压/W无线);3)子系列表示内核型号(如M0/M3/M4);4)管脚数(20-176PIN);5)Flash容量(16KB-1MB);6)封装类型(LQFP/BGA等);7)温度范围(工业级-40~105℃)。该规则通过字母数字组合精确标识芯片特性,涵盖性能、外设、存储等关键参数。STM32系列基于ARM Cortex-M内核,提供从基础型到增强型的多样化选择,满足不同应用场景需求。

2025-11-08 21:53:56 47

原创 【DIY】PCB练习记录2——51单片机核心板

这个排针不好焊,会晃 -_-||

2025-11-07 23:43:11 364

原创 【DIY】PCB练习记录1——USB拓展坞

摘要:本项目基于嘉立创平台开发USB2.0高速4端口HUB控制器,使用SL2.1A主控芯片和4MHz晶振,包含1个TYPE-C接口和4个USB-A接口。成功版(ノ◕ヮ◕)ノ*:・゚✧参考B站专家方案制作,而初版因焊接问题表现欠佳。3D渲染与布线已完成,主要材料包括16针TYPE-C连接器等元件。

2025-11-06 22:36:11 135

原创 【Qt】Qt实践记录3——UDP通信

本文介绍了基于Qt6.9.0的UDP网络编程实现方案。使用C++语言在QtCreator16.0.1环境下开发,通过QUdpSocket类实现UDP通信功能。重点讲解了关键方法:bind()绑定地址端口、hasPendingDatagrams()检测数据、readDatagram()和writeDatagram()读写数据等。实现了包含发送接收功能的GUI界面,可与网络调试助手进行测试。项目帮助理解UDP与TCP在消息传递机制上的差异,掌握了Qt网络编程的基本流程,包括信号槽连接、数据读写等核心操作,为网络

2025-11-06 16:14:34 866

原创 【Qt】Qt实践记录2——TCP通信服务器和客户端demo

本项目通过实现TCP服务器和客户端的消息互发功能,掌握了Qt网络编程的核心技术。主要收获包括:1)熟练使用QTcpServer监听端口和QTcpSocket进行数据传输;2)深入理解read()/readAll()读取数据和write()发送数据的机制;3)实践了Qt的信号槽机制,特别是newConnection和readyRead信号的处理;4)提升了Qt UI布局和演示效果制作能力。开发环境为Qt 6.9.0 + MinGW64 + Windows11,未来可扩展支持多客户端连接功能。

2025-11-06 11:00:36 698

原创 【Qt】Qt实践记录1——做一个秒表应用程序

本文介绍了使用Qt框架实现时间功能编程的技术方案。项目采用C++语言,基于Qt6.9.0框架,在Windows11平台下使用QtCreator16.0.1开发环境。重点讲解了通过QTime类获取当前时间、计时功能实现,以及使用QTimer定时器实现秒表功能(开始/停止/重置/打点)。项目涉及的主要技术包括QTime的setHMS、currentTime等方法,以及QTimer的start、stop等操作。通过该项目实践,作者掌握了Qt时间处理相关类的使用方法和UI布局技巧,并提出了实时更新时间显示和界面样式

2025-11-05 12:42:29 398

原创 【Qt】发布Release版本

仅仅构建出Release版本的可执行文件是不够的,因为它通常依赖于Qt的动态链接库(DLL)。要分发给没有安装Qt环境的用户,你需要进行。由于优化级别不同,某些在Debug模式下隐藏的bug(如未初始化的变量、竞态条件等)可能会在Release模式下暴露出来。它生成的是一个经过优化、去除了调试信息、体积更小、运行速度更快的可执行文件,旨在为用户提供最佳的性能体验。可以看到,除了.exe,这个文件夹增加了dll文件和其他库文件。将.exe文件放到一个空白文件夹里。

2025-11-05 10:39:19 286

原创 为什么ISR通常只设置标志位?

在原始简单例子(前后台系统)中:按键响应(设置标志)可能被轻微延迟,但极短。是的,当CPU在执行时,它没有在执行,因为它们是顺序执行的。但正因为ISR很短,所以"响应"是及时的,而"处理"的顺序是可以接受的。在更先进的系统(RTOS)中:按键响应绝对及时。当高优先级的按键任务运行时,低优先级的串口任务确实被抢占了。此时,CPU在处理按键逻辑,而没有处理串口数据。这正是我们想要的效果!确保了紧急任务(按键)能立即得到处理,而非紧急任务(串口解析)可以稍后执行。

2025-11-02 17:30:15 874

原创 【数据结构】双链表 二叉树 练习记录

双链表结构体:数据域和两个指针域(指向上一个结点和下一个结点)结构体别名:DNode结构体指针别名:DLinklist。

2025-11-01 23:15:35 281

原创 【数据结构】单链表 练习记录

摘要:本文讨论单链表三种基础操作:1)删除所有值为x的结点,关键在于记录前驱节点pre并使用free()释放内存;2)递归实现链表反向输出,利用递归到表尾后回溯打印;3)单链表就地逆置,采用三指针法实现,比传统方法更简洁高效。这些操作涵盖了链表的基础算法实现技巧,包括指针操作、递归应用等核心知识点。

2025-10-31 22:56:18 365

原创 交叉编译工具链

本地编译例如,我们通常在x86的平台上编译在Windows操作系统运行的程序交叉编译在一个平台上编译出可在另一个平台上运行的可执行代码。这个平台包含两个概念:体系结构和操作系统。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC来完成,因此称为交叉编译,并出现了交叉编译器。交叉编译器是指运行在宿主机(Host)上,可用来编译源程序,然后生成针对特定目标平台(target)的代码的编译器。

2025-10-27 03:37:39 928

原创 【ARM】1

ARM体系结构是一种精简指令集(RISC)架构,由ARM公司设计,以高效低功耗著称。其核心特点包括固定长度指令、负载/存储架构和大量通用寄存器。ARM采用独特的IP授权模式,客户可选择架构授权自主设计(如苹果)或核心授权直接集成。主要产品线包括Cortex-A(高性能)、Cortex-R(实时)和Cortex-M(微控制器)。当前主流版本为ARMv8-A(64位),最新ARMv9-A增强了AI和安全功能。ARM架构广泛应用于移动设备(95%智能手机)、物联网、服务器和新兴的PC领域(如苹果M系列)。

2025-10-27 01:01:48 951

原创 6.1 操作系统的启动流程

PC启动时,BIOS作为固化程序首先执行,进行硬件检测和初始化,并加载引导设备的主引导记录(MBR)。MBR中的引导加载器(BootLoader)负责加载操作系统,常见的有GRUB和U-Boot。GRUB通过配置文件指定内核镜像和参数,将控制权转交给Linux内核完成启动。BootLoader在多系统环境下还能选择不同操作系统,并传递初始化参数。

2025-10-26 23:15:26 400

原创 05 shell脚本

虽然主程序的返回值不像子程序返回值那样强调,但shell可以根据主程序的返回值知道程序是什么原因结束的,从而在脚本中根据命令执行情况决定程序的走向。脚本程序直接利用了系统的高级命令,便捷高效,它是Linux系统中一种重要的软件工具。脚本程序中,#通常起引导注释的作用,但第1行的这个符号不仅仅是注释。默认情况下,一个变量一旦被赋值,就可以被整个脚本访问,除非使用shell的命令local加以限定。用shell编写的程序通常叫做脚本程序,它无需专门的编译器,而是由shell逐行解释。

2025-10-26 20:05:57 504

原创 08 版本控制系统

如果已经在一个分支上作了一些改动,还没到要提交的阶段,但又想临时切换到另一个分支上,或者有了临时的紧急任务,要在一个新的分支上开展工作。查看经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的,但它们看上去就像是串行的一样,提交历史是一条直线,没有分叉。大多数版本控制系统工作时,将管理的数据建立在文件改变的基础上,跟踪记录文件的变化情况,这类系统又被叫做基于差量的版本控制。虽然git是一种分布式的版本控制系统,但为了充分利用git的协作功能,拥有一个可以共同访问的服务器仓库是很重要的。

2025-10-26 00:46:49 479

原创 【C】函数指针

函数指针是C、C++等语言中的一个重要概念,它允许我们将函数的地址存储在一个指针变量中,然后通过这个指针来调用函数。——是指针,只不过这个指针存储的是函数的地址语法是:返回类型 (*指针变量名)(参数列表);如:函数指针pfunc,它的类型是:void (*) (const char, short)看的时候先看(*pfunc)// 方法1:使用typedef// 方法2:直接定义。

2025-10-24 22:03:55 498

原创 【Linux】常见的系统调用 函数和功能简单总结

系统调用是操作系统内核提供的服务接口,用户程序通过软中断或专用指令(如int 0x80/syscall)从用户态切换到内核态执行。主要功能包括:1)错误处理(如strerror/perror);2)内存管理(mmap/brk);3)文件操作(open/read/write);4)进程控制(fork/exec);5)信号处理(signal/kill);6)进程间通信(pipe/shmget);7)网络通信(socket/bind);8)线程管理(pthread_create)。系统调用实现了用户程序与硬件资源

2025-10-24 21:04:17 969

原创 静态库与动态库

【摘要】库文件是代码仓库,提供可复用的变量、函数或类,分为静态库和动态库。静态库在编译时打包,生成独立但体积大的可执行文件;动态库运行时加载,支持多程序共享,体积小但依赖库文件。关键差异包括文件大小、运行依赖、内存占用和更新方式。不同系统格式各异(如Windows的.lib/.dll,Linux的.a/.so)。使用场景上,静态库适合小型工具,动态库适合大型共享组件。Linux下通过ar命令构建静态库,动态库需用-fPIC编译位置无关代码。建议混合使用,核心模块静态链接,常用模块动态加载。

2025-10-24 17:16:04 519

原创 从程序(源代码)如何到最终可执行文件的呢?

中间经过了这4个步骤。

2025-10-24 15:09:57 300

原创 【C】sizeof()里做的赋值无效

与普通数组的区别是,sizeof(vla)在运行时确定,sizeof(normal_array)在编译时确定。在C/C++中,sizeof运算符用于计算一个对象或类型所占用的内存字节数。在循环中多次调用sizeof(vla)会影响性能。对于变长数组,sizeof需要在运行时计算大小。编译时运算符(除了C99中的变长数组)就确定结果,编译器只需要知道操作数的。- 数组长度在运行时确定的数组。,这意味着在大多数情况下,它是。在编译时求值的,而不是在运行时。重要的是,sizeof是一个。,不需要实际执行代码。

2025-10-24 11:34:19 216

原创 【C】使用C语言举例说明逻辑运算符的短路特性

短路特性的价值:提高效率:避免不必要的计算增强安全性:防止空指针、数组越界等问题简化代码:可以写出更简洁的条件判断&&:第一个为假就短路||:第一个为真就短路短路时,第二个操作数完全不会执行。

2025-10-24 10:58:32 417

原创 【C】占位符知识点总结

C语言占位符是格式化输入输出的关键元素,主要分为整数、浮点数、字符/字符串和指针类型。常用占位符包括%d、%f、%s等,配合格式修饰符可控制输出宽度、精度和对齐方式。scanf使用占位符时需注意变量地址传递和缓冲区安全。典型应用包括表格输出、数值格式化等,必须确保占位符与变量类型严格匹配。常见错误包括类型不匹配、缺少地址符&及参数不足等。正确使用占位符能有效提升输入输出处理的准确性和安全性。

2025-10-24 10:10:56 438

原创 vscode安装、部署和小技巧 记录

摘要:本文介绍了VSCode中解决代码运行问题的两种方法。1.修改CodeRunner配置:打开设置搜索executorMap,将C++配置中的rm改为del;2.解决终端乱码问题:文件按UTF-8保存后出现乱码时,改用GB18030编码重新打开即可。文中还提供了setting.json的格式化配置示例,包括自动保存格式化、为不同文件类型设置Prettier格式化插件等。调试时直接按F5键即可。

2025-10-22 22:36:47 184

原创 ubuntu安装gcc编译器

本文介绍了Linux系统下安装编译工具链的基本步骤:首先通过sudo apt update更新软件包索引;然后使用sudo apt install build-essential安装包含GCC、g++、make等工具的编译套件;最后通过gcc --version命令验证安装是否成功。该流程为开发者提供了基础的编译环境搭建方法。

2025-10-22 21:08:00 254

原创 【Makefile】Linux内核模块编译

在Linux内核模块编译中,obj-m用于指定将源代码编译为可动态加载的模块(.ko文件),而非直接嵌入内核。

2025-09-22 15:10:36 501

原创 linux命令

本文总结了Linux常用命令的核心用法和选项分类。主要内容包括:1. 命令基本格式:命令 [选项] [参数],介绍了Tab补全、历史命令等实用技巧;2. 详细分类了文件操作、权限管理、进程监控、压缩解压、网络管理等8大类命令;3. 重点解析了命令选项的语法规范,包括短/长选项的区别及合并使用技巧;4. 归纳了跨命令通用的核心选项(如-r递归、-f强制、-v详细等)及其组合应用;5. 提供了三种获取命令帮助的方法(--help、man手册、tldr工具)。全文系统梳理了Linux命令体系,既适合初学者建立知识

2025-09-21 23:18:21 1098

原创 CortexM3 和 CortexM4的区别

Cortex-M4 是 Cortex-M3 的超集。它在完全保留M3所有优点(高性能、低中断延迟、易用性)的基础上,添加了针对数学运算的“强力引擎”(DSP和可选FPU)。对于大多数传统嵌入式控制应用,Cortex-M3 依然非常强大且性价比高。但对于需要“计算”而不仅仅是“控制”的应用,Cortex-M4 是毋庸置疑的更优选择,其带来的性能提升远远超过其微小的成本增加。

2025-09-18 23:33:17 913

原创 三大主流CPU架构

架构 | 所属阵营 | 主要应用领域 | 主导公司 | 特点 || CISC |台式机、笔记本电脑、服务器| Intel, AMD | 性能强大,生态极其成熟,软硬件支持最广 |ARM| RISC |移动设备(手机/平板)、嵌入式、物联网、苹果Mac| ARM Ltd.(授权),苹果,高通等 | 高能效比(性能/功耗),可定制化强,授权模式灵活 |RISC-V| RISC |嵌入式、物联网、新兴计算(AI/专用芯片)| 开源社区,多家初创公司 |开源、免费、模块化。

2025-09-18 23:28:03 1091

原创 Linux发行版本

简单来说,一个 Linux 发行版就是一个由Linux 内核GNU 工具和库软件包管理系统以及一组预装应用程序所组成的完整操作系统。Linux 内核:汽车的引擎,负责最核心的硬件驱动和资源管理。GNU 工具:方向盘、变速箱、油门刹车,是用户与引擎交互的接口。软件包管理:汽车的维修和升级系统,让你可以轻松安装、更新和删除软件。桌面环境/应用程序:汽车的内饰、座椅、音响和空调,决定了你的使用体验和观感。不同的发行版将这些组件以不同的方式组合和配置,并加入自己的特色,从而形成了面向不同用户和需求的众多选择。

2025-09-18 23:21:40 613

原创 处理器,微处理器和微控制器的区别和联系

摘要:处理器是执行程序指令和处理数据的硬件统称,包括CPU、GPU、DSP等;微处理器特指将整个CPU功能集成在芯片上的处理器,如Intel酷睿系列。两者主要区别在于集成度和应用范围:微处理器高度集成于单一芯片,用于通用计算;处理器范畴更广,包含各类处理单元。现代个人电脑的CPU既是处理器也是微处理器。此外,微控制器(MCU)是集成处理器、内存和I/O的片上系统,适用于嵌入式控制,与需要外部芯片配合的微处理器形成对比。MCU以低功耗、低成本特点广泛应用于家电、汽车电子和物联网等领域。

2025-09-18 23:06:56 705

原创 【数据结构】哈希表 集合 练习 (leetcode217 389 496 217 705)

也可以用unordered_set做,把数字里的元素加到集合里,重复的数字是加不进去的。布尔型数据即可达成哈希表的O(1)性能。

2025-09-17 15:23:48 539

原创 【数据结构】队列 栈 练习(leetcode933 20 496)

由于只需在nums2数组里看后半部分数字,所以考虑用栈存储nums2,这样可以倒过来找更大元素。由于需要多次找,所以出栈后的数字也要存起来,一次找完再复原原来的栈。若此时栈为空(例如输入以右括号开头,如")"),操作会访问空栈,导致未定义行为(可能崩溃)。前检查栈是否为空,若为空则直接返回。所以用两个栈就可以解题。496 暴力解法会超时。

2025-09-16 10:36:20 261

原创 【数据结构】数组 链表 练习 (leetcode485 283 27 203 206)

leetcode简单题485 283 27 203 206

2025-09-15 23:36:09 200

原创 【算法】8皇后问题 C++

本文介绍了N皇后问题的回溯算法解法。该问题要求在N×N棋盘上放置N个皇后,使其互不攻击。作者通过四皇后示例展示了回溯法的基本思路:当发现某行无法放置皇后时回退到上一步重新尝试。文章详细讲解了C++实现方案,包括使用attack数组记录攻击范围、递归回溯逻辑以及状态恢复机制。核心代码包含放置皇后更新攻击范围、回溯主函数和接口函数,最终输出8皇后问题的92种解法。该算法通过递归和状态回溯有效解决了N皇后问题。

2025-09-15 14:32:08 362

原创 【算法】插入排序 选择排序 快速排序 练习

2025-09-11 14:52:03 126

原创 【算法】冒泡排序练习

思想是相邻元素两两比较,大的放到后面,就像冒泡泡。临界条件是 len - i - 1,因为每一轮排序确定一个数字的位置,第一轮确定的是 最后一个元素arr[len-0-1],第二轮确定的是倒数第二个元素 arr[len-1-1],...... 最后一轮确定的是 arr[len - (len-1) -1]。

2025-09-10 20:41:19 213

原创 【C】结构体初始化——学习指定初始化器(.)的用法

C99标准引入的结构体指定初始化器允许通过成员名而非顺序初始化,支持嵌套结构体、数组和联合体,提升代码可读性并减少错误。特性包括:1)按名称初始化普通结构体;2)嵌套结构体初始化;3)数组部分初始化;4)联合体单成员初始化。优点是可读性强、支持部分初始化,但需注意C89不支持且匿名结构体不可用。传统初始化方式需按声明顺序赋值或逐个成员赋值。该特性特别适合与宏定义结合简化批量初始化。

2025-09-10 19:16:13 314

https://github.com/chxuan/vimplus An automatic configuration program for vim

https://github.com/chxuan/vimplus An automatic configuration program for vim

2025-11-06

空空如也

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

TA关注的人

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