自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从 C 到现代 C++:嵌入式开发者的技术升级之路

摘要: 嵌入式开发长期以C语言为主,但其在复杂项目中面临模块化不足、错误处理繁琐等问题。现代C++(C++11及以上)通过零成本抽象提供了解决方案:封装与模块化(类/命名空间)、RAII自动资源管理、强类型与泛型(模板/枚举类)等特性,显著提升代码可维护性。迁移路径包括:明确嵌入式禁用特性(异常/RTTI)、兼容现有C代码、逐步应用核心功能(类/RAII/模板),并优化编译与内存管理。C++与C并非对立,而是互补工具,可参考《嵌入式C++实战》实现平滑过渡。(149字)

2026-04-17 21:59:03 1176

原创 一篇文章入门 C++(三万字长文,从用法到底层原理,全面分析)

本文全面介绍了C++的入门知识,从Hello World程序开始,详细讲解了命名空间、输入输出、缺省参数、函数重载、引用、内联函数和nullptr等核心概念。文章通过大量代码示例和底层原理分析,帮助读者理解C++如何弥补C语言的不足,提升编程效率和安全性。内容包括命名空间解决命名冲突、引用简化指针操作、内联函数替代宏函数等实用技巧,为后续学习类和对象打下坚实基础。全文约3万字,适合有一定C语言基础的读者系统学习C++语法特性。

2026-03-21 20:02:39 2108

原创 认识与了解 C++

C++由Bjarne Stroustrup于1979年开发,历经起源、雏形、普及和标准化四个阶段,1998年首个国际标准C++98发布。该语言以高性能和底层控制能力著称,2024年TIOBE排名第二。核心应用领域包括系统软件、音视频处理、游戏开发等8大方向。版本迭代中C++98和C++11为必学版本,工业界普及度达95%以上。推荐《C++ Primer》《STL源码剖析》等经典书籍,建议结合官方文档学习。当前C++26规划引入网络库,解决长期存在的生态短板。

2026-03-18 22:11:47 805

原创 排序(五)“计数排序” 与 “各排序实际用时测量”

本文系统介绍了计数排序的原理与实现,并对比分析了多种排序算法的性能。计数排序基于"鸽巢原理",通过统计元素频次实现O(n+range)时间复杂度的非比较排序,但存在空间消耗。实验测试表明:小规模数据适用直接插入排序或希尔排序;中等规模优先选择快速排序;大规模数据推荐堆排序或范围集中的计数排序。性能对比显示,O(nlogn)级别的算法(快速排序、归并排序、堆排序)显著优于O(n²)算法。此外,文章还分析了各算法的稳定性,并为不同场景提供了排序选择建议.

2026-03-16 23:38:10 686

原创 排序(四)“归并排序”

本文系统介绍了归并排序及其应用,主要内容包括:1. 递归归并排序:基于分治思想,通过分解和合并两个阶段实现排序,时间复杂度O(nlogn),空间复杂度O(n);2. 非递归版本:采用自底向上的归并策略,避免了递归调用;3. 外排序实现:处理大数据量的文件排序,通过分批读取、内存排序和文件归并完成。文章详细分析了各种实现的时间复杂度、空间复杂度和稳定性,并提供了完整的代码示例。归并排序因其稳定的线性的读写特性,成为内排序和外排序的重要算法。

2026-03-14 21:50:47 789

原创 排序(三)“交换排序”

本文介绍了两种交换排序算法:冒泡排序和快速排序。冒泡排序通过相邻元素比较交换逐步将大元素移到数组末尾,优化后可提前终止排序过程,时间复杂度为O(n²),稳定且空间复杂度O(1)。快速排序采用分治法,通过基准值将数组分为两部分递归处理,平均时间复杂度O(nlogn)。文章详细讲解了快速排序的三种分区方法(Hoare法、挖坑法、前后指针法)、三路划分优化、自省排序(结合插入排序和堆排序)以及非递归实现,并分析了各种方法的复杂度与稳定性。

2026-03-12 19:29:29 1026

原创 排序(二)“选择排序”

本文介绍了两种选择排序算法:直接选择排序和堆排序。直接选择排序通过每次选取最小/最大值与区间端点交换实现排序,时间复杂度为O(n²),空间复杂度O(1),是不稳定排序。堆排序利用大/小根堆特性,通过建堆和交换堆顶元素实现排序,时间复杂度为O(nlogn),空间复杂度O(1),同样是不稳定排序。两种算法都采用原地排序方式,但堆排序效率更高。文章详细说明了两种算法的实现原理、代码示例和复杂度分析。

2026-03-09 22:25:44 1035

原创 排序(一)“插入排序”

本文系统介绍了排序算法的基本概念和两种典型插入排序方法。首先阐述了排序的核心定义、常见应用场景(如电商商品排序、课程列表排序)和算法分类(插入/选择/交换/归并/非比较排序)。重点讲解了直接插入排序的原理(类似扑克牌理牌)、时间复杂度(O(n²)~O(n))及其稳定性特点。随后详细分析了希尔排序的优化思想,通过分组预排序(gap逐渐缩小)提升效率,时间复杂度约为O(n^1.3),并指出其不稳定的特性。两种算法均给出了具体实现代码和复杂度分析,展现了从基础到优化的排序算法演进路径。

2026-03-05 20:33:58 1124

原创 一篇文章掌握“树”(下)—— 链式结构二叉树

本文系统介绍了链式二叉树的实现与应用。主要内容包括:1. 基础概念:阐述二叉树的递归本质、二叉链与三叉链结构差异,以及项目文件组织方式;2. 遍历算法:详细讲解前序、中序、后序和层序遍历的实现方法;3. 核心操作:递归实现结点统计、深度计算、查找和销毁等常见操作;4. 完全二叉树判断:基于层序遍历的应用实现;5. 二叉树性质:总结任意二叉树和完全二叉树的核心公式。文章采用递归万能骨架模板,强调边界条件处理和内存管理,并指出常见错误与解决方案,为二叉树学习提供全面指导。

2026-03-02 17:04:27 1721

原创 一篇文章掌握“树”(上)

本文系统介绍了树形数据结构及其应用,重点讲解了二叉树和堆的实现。首先阐述了树的基础概念、特性、表示方法、文件系统等实际应用场景。然后详细解析了二叉树的定义、分类(满二叉树和完全二叉树)及存储结构(顺序和链式)。接着深入讲解了堆的实现,包括大小根堆的定义、核心操作(创建/销毁、入堆/出堆)及调整算法(向上/向下调整)。最后探讨了堆的核心应用——堆排序和TOP-K问题,分析了算法的时间复杂度与优势。全文通过代码示例和复杂度分析,全面展现了树形结构在数据处理中的高效性和实用性。

2026-02-24 20:16:19 2349

原创 一篇文章掌握“队列”

本文全面介绍了队列数据结构及其应用,主要内容包括:1. 队列基础概念:定义FIFO特性,解释队头队尾操作,分析数组/链表实现的优缺点,推荐单链表+头尾指针的最佳方案;2. 代码实现:详细展示队列初始化、入队、出队等核心操作的C语言实现,包含完整工程结构和测试用例;3. 算法应用:通过三个经典题目(队列实现栈、栈实现队列、循环队列设计)深入讲解队列与其他数据结构的转换技巧,提供完整解题思路和代码实现。文章强调实践性,所有概念都配有具体代码示例,适合数据结构学习者系统掌握队列知识。

2026-02-22 23:25:09 1480

原创 一篇文章掌握“栈”

本文系统介绍了栈的数据结构及其实现。首先阐述了栈的LIFO特性、基本术语(栈顶、栈底、压栈、出栈等)和逻辑结构。重点比较了数组和链表两种实现方案,推荐使用数组实现(时间复杂度O(1),空间效率高)。详细讲解了数组栈的实现方法,包括动态扩容机制(初始容量4,2倍扩容)、核心操作(入栈、出栈、取栈顶)的实现逻辑。最后通过"有效的括号"算法题展示了栈的实际应用,完整代码展示了问题解决过程,并分析了边界情况的处理方法。文章提供了栈的完整工程实现方案和测试用例。

2026-02-20 19:55:35 1384

原创 一篇文章掌握“双向链表”

本文详细介绍了带头双向循环链表的实现与操作。主要内容包括:1. 链表基础认知,对比不同链表类型的差异;2. 环境搭建与结构体定义,创建List.h头文件;3. 核心函数实现,包括增删改查等操作;4. 完整测试用例;5. 关键问题解答,如指针合法性校验、时间复杂度和应用场景等。带头双向循环链表具有操作高效(O(1))、结构稳定等优势,适用于编辑器撤销、浏览器历史记录等场景。文章提供了完整的代码实现和详细的说明,有助于深入理解双向链表的工作原理和应用。

2026-02-18 21:57:57 1199

原创 单链表算法思路详解(下)

本文针对四个链表问题提供解题思路和代码实现:1)相交链表通过计算长度差和同步遍历寻找交点;2)环形链表I使用快慢指针判断是否存在环;3)环形链表II基于相遇点推导入环节点;4)随机链表复制采用节点插入和分离技术实现深拷贝。每个问题都详细分析了核心算法、步骤拆解、代码实现及易错点,时间复杂度均为O(n),空间复杂度优化至O(1)。

2026-02-15 21:56:28 1445

原创 单链表算法题思路详解(上)

本文介绍了链表操作的常见算法及实现方法。主要内容包括:1.移除链表元素的新建链表法;2.反转链表的三指针原地修改法;3.查找中间节点的快慢指针法;4.合并有序链表的哨兵节点优化法;5.链表分割的"拆分-合并"方法;6.判断回文结构的快慢指针与反转法。每种算法均包含题目描述、解题思路、代码实现及复杂度分析,特别针对边界条件和易错点进行了详细说明。这些算法涵盖了链表处理的核心技术,具有时间复杂度低、空间复杂度优的特点,是数据结构与算法学习的重要内容。

2026-02-13 20:16:17 998

原创 一篇文章掌握“单链表”

本文全面介绍了单链表的核心概念与实现方法。主要内容包括:单链表的基本结构(结点、头指针等定义);项目搭建文件组织;核心操作实现(插入、删除、查找等);单链表与顺序表的性能对比;以及关键注意事项(野指针处理、二级指针使用等)。文章通过具体代码示例详细讲解了各种操作的实现逻辑,重点分析了指针操作和内存管理的要点,并对比了单链表在不同场景下的优劣势。最后强调了动态内存管理和指针使用的注意事项,为单链表的正确实现提供了完整指导。

2026-02-11 22:39:11 1404

原创 顺序表的算法题通用思路

本文介绍了三个数组操作问题的解题思路:1. 移除元素 - 对比遍历、新数组和双指针三种解法,最优解是双指针法(O(n)时间复杂度);2. 删除有序数组重复项 - 利用有序数组特性,通过双指针实现高效去重(O(n)时间,O(1)空间);3. 合并两个有序数组 - 采用三指针法从后往前遍历,避免数据覆盖(O(m+n)时间)。关键点在于利用指针技巧实现原地操作,优化时间和空间复杂度。

2026-02-09 20:18:12 1254 2

原创 一篇文章掌握“顺序表”

本文系统介绍了顺序表这一线性数据结构,从基础概念到具体实现进行了全面讲解。主要内容包括:1. 线性表的基本特性,区分逻辑结构和物理结构;2. 顺序表的两种实现方式(静态和动态)及其特点比较;3. 动态顺序表的核心操作实现,包括初始化、增删改查等基本操作,重点关注扩容机制和位置操作;4. 工程化实现方法,采用模块化设计思想;5. 顺序表的主要缺陷分析,包括中间操作效率低、扩容消耗大、空间浪费等问题,并引出链表作为改进方向。文章通过详实的代码示例展示了顺序表的具体实现,为后续学习更高级的数据结构奠定了基础。

2026-02-08 23:50:28 1471

原创 算法复杂度分析

本文系统介绍了数据结构与算法的基础知识及复杂度分析方法。主要内容包括:1、数据结构定义与核心功能(数组、链表等),2、算法定义与优劣标准,3、复杂度分析(时间/空间复杂度、大O表示法),4、常见复杂度类型(O(1)、O(n)、O(n²)等)及其典型应用,5、通过旋转数组案例展示三种解法(暴力、新数组、三步逆置)的复杂度对比。文章强调复杂度分析对算法选择的重要性,指出实际开发中应优先选择O(logn)、O(n)等高效算法,避免复杂度爆炸问题。

2026-02-07 17:23:49 1477

原创 C语言代码“翻译”与“运行”全流程

本文详细介绍了C语言程序的翻译环境和运行环境。翻译环境将源代码转换为二进制指令,分为预处理、编译、汇编和链接四个阶段:预处理进行文本替换和清理,编译完成语法分析和汇编代码生成,汇编转换为机器指令,链接整合多文件生成可执行程序。运行环境负责程序加载和执行,包括内存管理和程序终止。文章还深入讲解了预处理指令,如#define宏定义、条件编译和头文件包含,并对比了宏与函数的优缺点。通过流程图和示例代码,全面展示了C程序从源码到运行的全过程,为开发者提供了实用参考。

2026-02-04 23:31:46 1450

原创 C 语言文件操作

本文系统介绍了C语言文件操作的核心概念与技术要点。主要内容包括:1、文件的基本概念与分类;2、文本文件与二进制文件的区别与适用场景;3、文件指针与流的本质理解;4、文件的打开、读写(顺序读写与随机读写)和关闭操作;5、文件结束判定方法及缓冲区机制;6、标准操作流程与注意事项。文章通过大量代码示例和对比表格,详细讲解了fopen、fclose、fread、fwrite等关键函数的使用方法,以及文件指针定位、缓冲区刷新等核心技术点,为C语言文件操作提供了全面的实践指导。

2026-02-02 19:36:51 1485

原创 动态内存管理

本文系统介绍了C/C++中的动态内存管理技术,包括其必要性、核心函数、常见错误及解决方案。先阐述动态内存分配的必要性,然后重点分析了malloc、calloc、realloc和free函数的使用规范,强调了内存泄漏和野指针问题的防范措施。接着通过经典笔试题解析了传值调用、栈区返回等常见错误场景,并介绍了柔性数组的特性与优势。最后详细讲解了程序内存区域划分,包括栈区、堆区、数据段和代码段的功能特点及管理方式。全文旨在帮助开发者掌握动态内存的正确使用方法、标准操作步骤,提高内存管理效率,避免常见错误。

2026-01-31 22:53:28 1681 2

原创 qsort函数的使用与模拟实现

qsort是C标准库中的通用排序函数,通过void指针和回调函数实现泛型排序。其核心在于自定义比较函数,需正确转换void为实际类型指针并定义排序规则。示例展示了如何排序整型数组、字符串数组和结构体数组。qsort内部可能采用快速排序或其他高效算法,时间复杂度为O(nlogn),但不保证稳定性。模拟实现展示了用void*和函数指针实现泛型排序的思想,体现了C语言中"手动泛型"的典型方法。理解qsort的关键在于掌握比较函数编写和类型转换技巧。

2026-01-29 20:27:12 1501

原创 自定义类型:联合体与枚举

本文系统讲解了C语言中联合体(union)和枚举(enum)的概念与应用。联合体的核心特点是成员共享内存空间,能有效节省内存,适用于存储互斥数据,如礼品属性描述和机器大小端判断。枚举则通过为整型常量赋予语义化名称,提升代码可读性和维护性,常用于菜单选项和状态机设计。文章详细介绍了两种类型的定义语法、内存分配原则、典型应用场景,并通过具体示例演示了它们在内存管理、代码优化等方面的实际应用价值,为C语言开发者提供了实用的编程技巧和设计思路。

2026-01-27 21:17:07 1432

原创 自定义类型:结构体

本文系统介绍了C语言中结构体的核心知识,包括基础概念、内存对齐规则、传参方式及位段实现。结构体是一种自定义复合类型,用于封装不同类型的数据成员。内存对齐规则通过牺牲空间换取访问效率,需掌握四个核心对齐规则。结构体传参推荐使用传址调用以提高效率。位段通过精确控制成员比特位数实现内存优化,但存在跨平台问题。文章通过实例详细讲解了结构体的声明、定义、初始化、访问等操作,并分析了自引用、匿名结构体等特殊用法,为理解和应用结构体提供了全面指导。

2026-01-25 23:47:59 1267

原创 数据在内存中的存储

本文系统介绍了计算机数据存储的核心原理,包括: 1、数值编码方式:原码(直观但存在±0)、反码(改进减法运算)、补码(现代标准,解决所有缺陷),重点解析了补码的模运算原理和计算规则; 2、整数存储:采用补码形式,详解大端/小端存储模式的区别及判断方法,通过典型例题分析整型提升、截断等关键概念; 3、浮点数存储:遵循IEEE754标准,讲解单精度/双精度的存储结构(符号位+阶码+尾数),对比整数与浮点数的存储差异,并给出浮点数精度问题和比较规范。

2026-01-23 22:59:53 1276

原创 一篇文章带你精通“指针”

本文系统讲解了 C 语言指针的核心概念与应用,包括二级指针、数组指针、指针数组、字符指针和函数指针。二级指针存储指针变量地址;数组指针指向整个数组,强调整体性;指针数组由指针构成,常用于管理多个字符串。字符指针处理字符串需注意 '\0' 终止符。函数指针支持回调函数和函数表等,实现代码复用与解耦。文章通过代码示例演示各类指针的应用场景,如冒泡排序、字符串处理等,并解析指针与数组名的关系、数组传参本质等关键知识点,最后补充了 typedef 类型重命名和两段经典指针代码解读。

2026-01-21 20:08:28 933

原创 一篇文章带你真正入门“指针”

本文系统讲解了C语言指针的核心概念与应用。阐述了指针作为内存地址与数据类型结合体的本质,通过地址访问内存数据。解析了指针变量的定义、取地址与解引用操作,以及类型对步长和范围的影响。深入探讨了const修饰指针的四种情形,指针运算的原理与场景。针对野指针问题,归纳了成因与规避方法。通过模拟strlen和交换变量案例,对比了传值与传址调用的区别,突出指针在函数参数传递中的作用。全文以理论结合代码示例,全面呈现了指针的核心地位与实际价值。

2026-01-19 20:55:38 952

原创 ARM Cortex-M3内核详解

ARM Cortex - M3 内核是一款广泛应用于嵌入式系统的 32 位 RISC 处理器内核,以下是其简要介绍。它采用哈佛架构,具有独立的指令总线和数据总线,能同时进行指令和数据的访问,提高了数据处理效率。同时支持 Thumb - 2 指令集,它融合了 16 位 Thumb 指令和 32 位 ARM 指令的优点,既能保持代码的紧凑性,又能实现高效的处理性能。

2025-05-12 21:51:09 3140

原创 ARM介绍及其体系结构

概括起来,ARM具有以下三种含义:① ARM是一家公司的名称,1991年成立于英国剑桥,是一个在全球半导体行业技术领先的公司,其主要业务是设计16位和32位嵌入式处理器。② ARM是一项技术的名称,是一种Advanced RISC Machines 32位RISC(精简指令集)处理器体系结构,就像8086架构是一种CISC体系结构一样。③ ARM是一类微处理器芯片或产品的统称,是采用ARM技术开发的RISC处理器的统称。

2025-05-05 23:38:39 2310

原创 嵌入式系统基础知识

冯·诺依曼结构和哈佛结构是计算机体系结构中的两种重要类型,以下从其基本定义、特点、应用场景等方面进行介绍。冯·诺依曼也称为普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令和数据都存储在同一存储器中,并且通过同一组总线进行访问。

2025-05-04 23:50:38 1463

原创 MySQL 存储引擎

大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。而我们在选择引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎一样。而对于存储引擎,也是一样,他是mysql数据库的核心,我们也需要在合适的场景选择合适的存储引擎。接下来就来介绍一下存储引擎。存储引擎就是存储数据、建立索引、

2025-04-28 21:18:14 1201

原创 MySQL 事务(详细版)

事务是一组操作的集合,它是一个不可分割的工作单位。当我们进行事务操作时,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。如果有一件事,例如上面的转账操作,必须三个步骤同时完成才可以,此时就需要将几条SQL语句作为一个事务,保证它们同时成功或同时失败不影响原来的数据。所以此时我们就要对事务进行控制,将几条SQL语句组合为一个事务。如果成功,就统一提交,如果失败,则避免影响数据库的内容。

2025-04-24 22:15:32 3965

原创 多表查询之嵌套查询

 SQL语句中嵌套 select 语句,称为嵌套查询,又称子查询。嵌套查询外部的语句可以是 insert / update / delete / select 的任何一个。嵌套查询可以嵌套在select、from 、where等子句中,用于提供额外的过滤条件或者计算结果。

2025-04-22 22:37:00 2287

原创 多表查询之连接查询

连接查询用于将多个表中的数据组合起来,依据这些表之间的关联关系来获取所需的数据。在实际的数据库应用里,数据往往分散存储于多个表中,借助连接查询就能把不同表的数据关联起来,进而得到完整的信息。

2025-04-21 22:18:54 2008

原创 多表关系与多表查询概述

我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而除此之外我们还可以进行多表查询。本片文章,我们先对多表查询的基础知识作讲解,为下篇文章详细介绍多表查询打下基础。

2025-04-20 22:33:47 1417

原创 嵌入式系统的开发流程

对于嵌入式系统领域的开发者与爱好者而言,明晰其开发流程至关重要。它是构建功能完备、稳定可靠嵌入式系统的基石,关乎从需求梳理到系统落地全周期的顺畅推进,更是精准把控产品质量、提升开发效率的关键所在。接下来,让我们一同深入探究嵌入式系统的开发流程。

2025-04-14 20:16:41 2153

原创 嵌入式常见概念的介绍

MCU的英文全称是 Micro Controller Unit,即微处理器,又称单片微型计算机或者单片机。MPU 的英文全称是 Micro Processor Unit,即微处理器,通常是由计算机中的CPU演变而来的,可以理解为加强版的CPU,是一种高性能的处理器,即不带外围功能的器件。 MPU 的英文全称是 Micro Processor Unit,即微处理器,通常是由计算机中的CPU演变而来的,可以理解为加强版的CPU,是一种高性能的处理器,即不带外围功能的器件。 

2025-04-13 23:27:13 1905

原创 嵌入式系统的历史与发展​

嵌入式系统,这个在当今科技领域中无处不在却又常常隐匿于幕后的关键角色,正深刻地影响着我们生活的方方面面。从智能家居中的恒温器到汽车的防抱死制动系统,从工业自动化中的机器人控制到医疗设备中的生命体征监测,嵌入式系统以其强大的功能和高度的适应性,为各种设备赋予了智能与高效。然而,这样一个对现代生活至关重要的技术体系,其发展历程却鲜为人知。本文将带您深入探寻嵌入式系统的起源,梳理其发展脉络,展望其未来发展趋势,一同领略这项技术的魅力与变革。​

2025-04-11 18:36:59 2041

原创 一篇文章带你了解嵌入式系统

那么,什么是嵌入式系统呢?嵌入式系统就是将特定功能的程序,也就是软件部分,紧密集成到硬件之中,硬件为软件运行提供基础平台,二者协同工作来完成相应功能。

2025-04-10 20:10:56 1614

空空如也

空空如也

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

TA关注的人

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