- 博客(25)
- 收藏
- 关注
原创 C++第一章基础教学笔记
C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持面向过程的程序设计,也支持面向对象的程序设计,还支持泛型编程和函数式编程的编程语言。特性C语言C++说明输入输出cout/cinC++更类型安全命名空间无namespaceC++避免命名冲突变量声明代码块开头任意位置C++更灵活类型转换static_cast等C++更安全结构体只有数据成员可以有成员函数C++struct是类函数重载不支持支持C++同名不同参默认参数不支持支持。
2026-02-28 15:15:49
782
原创 C++学习路线
│ C++学习总结 ││ ││ 学习C++是一个长期的过程,需要: ││ ││ 1. 扎实基础:语法、OOP、内存管理 ││ 2. 掌握STL:容器、算法、迭代器 ││ 3. 理解现代C++:C++11/14/17/20 ││ 4. 项目实战:通过实际项目巩固知识 ││ 5. 持续学习:关注新标准、阅读优秀代码 ││ ││ 记住:C++是一门既强大又复杂的语言, ││ 不要急于求成,循序渐进才能掌握精髓!││ ││ 祝你学习顺利!││ │。
2026-02-28 14:56:25
1373
原创 第十章 标准IO
标准I/O(Standard Input/Output)是C语言标准库(stdio.h)提供的一组用于输入输出的函数接口。它是对底层系统调用的封装,提供了更高级、更方便的文件操作方式。// 在/usr/include/stdio.h中定义(不同系统略有差异)// 文件描述符// 缓冲区起始地址// 缓冲区结束地址// 当前读取位置// 当前写入位置int _flags;// 文件状态标志...│ C标准I/O知识图谱 ││ ││ 核心概念 文件操作 高级应用 │。
2026-02-27 14:35:18
786
原创 嵌入式开发-桥接架构
将上层业务逻辑(抽象层)(比如 “读取传感器数据”、“上报数据到云端”)与底层硬件 / 协议实现(实现层)(比如 “通过 I2C 读 SHT30”、“通过 SPI 读 W25Q64”、“通过 MQTT 上报”、“通过 HTTP 上报”)彻底解耦;引入桥接层作为中间层,定义统一的接口规范,让抽象层通过桥接层调用实现层,实现层的变更(如换传感器、换通信协议)不会影响抽象层。// 桥接层接口结构体:封装传感器的核心操作// 初始化传感器// 读取温度(返回值:温度值,单位℃)
2026-02-26 10:52:19
1544
原创 面试题4:中断危险操作
核心危险操作:阻塞 / 睡眠、耗时过长、调用不可重入函数、不当操作共享资源、中断开关 / 嵌套失控;规避核心原则:中断只做 “存数据、打标志、清中断” 的最小化操作,复杂逻辑延迟到主程序 / 线程;关键技巧:用自旋锁(短临界区)、消息队列(RTOS)替代阻塞锁,用可重入函数替代不可重入函数,用缓冲区 + 标志位避免共享资源竞争。简单来说,中断的设计准则是 “快进快出、不堵不卡、不碰不该碰的函数 / 资源”—— 只要让中断保持 “轻量、无阻塞、可重入”,就能规避 99% 的中断相关 bug。
2026-02-26 08:47:56
808
原创 面试题3:咬尾中断与晚到中断
当正在执行一个 ISR时,来了一个优先级更低或同级的中断请求,处理器不会等当前 ISR 执行完后 “出栈→再入栈”,而是直接复用已保存的栈帧,立刻执行新的 ISR,仅在最后执行一次出栈。当处理器正在为低优先级中断执行压栈操作(还没进入 ISR)时,来了一个更高优先级的中断请求,处理器会先完成当前压栈,然后优先执行高优先级中断,执行完后再回头执行原低优先级中断,全程仅一次压栈。触发阶段是最核心区别:咬尾中断发生在 ISR 执行中,晚到中断发生在中断压栈阶段(未进入 ISR)。优先级逻辑相反。
2026-02-26 08:45:39
1062
原创 面试题2:为什么不能在中断中使用互斥锁
核心冲突:互斥锁依赖调度器实现 “睡眠等待”,但中断上下文不能睡眠、优先级极高,强行使用会导致系统卡死 / 死锁;死锁根源:中断抢占持有锁的线程,且中断无法被线程抢占,导致锁永远无法释放;替代方案:短临界区用自旋锁(需关闭本地中断),优先用可重入函数 + 最小化中断逻辑,从根源避免锁。简单来说,中断上下文的 “不可调度、不可睡眠、高优先级” 特性,和互斥锁的 “阻塞睡眠、依赖调度” 特性完全相悖,这就是中断里绝对不能用互斥锁的根本原因。最优方案。
2026-02-26 08:28:41
1147
原创 面试题1:可重入函数
简单来说,可重入函数就是指在被中断后(比如多线程、信号处理场景),再次被调用时依然能保证执行结果正确、不会出现数据错乱的函数。不使用全局 / 静态变量(避免多个调用者共享同一个 “勺子”);不修改传入的参数(如果参数是指针,不修改指针指向的外部数据);不调用其他不可重入的函数(比如 C 语言里的strtok是不可重入的,strtok_r才是可重入版本);不依赖硬件相关的状态(比如寄存器、外设状态)。核心特征:可重入函数的执行结果只依赖传入的参数和局部变量,不依赖任何外部共享状态;关键区别。
2026-02-25 15:13:40
943
原创 第九章 结构体
结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据。共用体变量可以存储不同类型的数据。前面我们学习很多种数据类型,然而使用这些类型定义的变量,它们的值虽然可以改变,但其类型是不能改变的。在某些特殊应用中,要求在存储区域中的数据对象在程序执行的不同时期能存储不同类型的值,共用体就是为满足这种需要而被设计出来的。1、先定义枚举类型,再定义枚举变量2、定义枚举类型的同时定义枚举变量。
2026-02-25 15:08:59
917
原创 第八章 内存管理
C 语言被称为 “裸奔的语言”,核心原因之一是它将内存管理的控制权完全交给开发者 —— 没有自动垃圾回收机制,所有内存的分配、使用、释放都需要手动控制。这既是 C 语言高效的根源,也是新手最容易踩坑的地方。本文将从内存布局原理入手,结合图解、代码示例和核心函数应用,带你彻底搞懂 C 语言的内存管理。
2026-02-24 15:07:36
821
原创 第七章 指针
内存概念酒店对应物通俗解释内存整体一栋酒店程序运行时,所有数据(变量、函数、计算结果)都要 “住” 在这里,断电就清空(客人全走)内存单元酒店的单个房间最小房间是「1 字节(Byte)」,只能装 1 字节的数据(0~255 之间的数)内存地址房间号每个房间有唯一编号(比如 0、1、2… 或 0x00、0x01…),电脑靠地址找数据数据房间里的 “客人”不同大小的客人需要不同数量的房间(比如 int 占 4 间,char 占 1 间)硬盘 / 固态硬盘酒店旁边的永久公寓。
2026-02-24 14:41:43
1180
2
原创 第六章 数组
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量的集合。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。数组是用于存储多个相同类型数据的集合。通常用Array表示,也称之为线性表。线性表是一种数据结构,第一个节点没有前驱,最后一节节点没有后继,中间节点只有一个前驱节点和一个后继节点。
2026-02-23 13:36:07
1056
原创 第五章 函数
函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码。函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码。函数还可以接收数据,并根据数据的不同做出不同的操作,最后再把处理结果反馈给我们。示例1:编写代码,输入年月,输入的月份有多少天;int day;day=31;day=30;elseday=29;elseday=28;return day;示例2:编写代码,输入年月日,判断输入的日期是当前的第多少天;
2026-02-23 12:34:36
1288
原创 第四章 结构化编程
1.选出a,b中最小的一个数字放到c中 2.分别用a,b对c求余数,即看是否能被c整除 3.直到a,b同时都能被c整除 4.如不能整除,c– (c的值减一) 继续从2开始执行 5.也就是说该循环的判断条件为 a,b能否同时被c整除,只要有一个数不能被c整除,循环继续执行。:输入一个字符,如果是大写字母则将其以小写形式输出,如果是小写字母,则将其以大写形式输出,如果是数字字符则输出对应的ASCII编码,如果不是上述字符,则原样输出。是 C 标准库中的一个头文件,包含了大量用于数学运算的函数和宏。
2026-02-22 13:37:28
632
原创 第三章 运算符
判定1:年份能被4整除且不能被100整除的为闰年。否则为平年。判定2:年份能被400整除的是闰年。否则为平年。-> 判定1和判定2只需要满足一个,就可以判断闰年,则判定1和判定2是逻辑或关系。
2026-02-22 11:55:15
999
原创 第二章 基本数据类型
使用基本数据类型定义变量:本质是在内存中开辟一块空间来保存变量的值,这块空间的名称就是变量名;数据类型的作用:(1)表明数据的存储形式:整型数据存储/浮点型数据存储;(2)明确数据占用的空间大小;<1> 数据类型 变量名;//变量的定义<2> 数据类型 变量名=初值;//变量的定义及其初始化<1> 定义一个短整型变量Num,初始值没有;short Num;//定义一个Num变量,初值没有<2> 定义一个单精度浮点型变量Num,初始值为3.14;//定义一个Num变量,初值为3.14。
2026-02-21 20:52:38
901
原创 第一章 C语言入门与环境搭建
本文系统介绍了嵌入式开发中的编程语言选择及C语言基础。首先对比了编译型语言(C/C++)和解释型语言(Python)在嵌入式开发中的适用场景,强调C语言因其硬件控制能力、高效性和生态优势成为嵌入式开发的核心语言。详细讲解了C语言开发环境搭建(VS2022/Dev-C++),并通过"Hello World"示例演示完整开发流程。重点解析了C程序结构、文件类型、注释方法,以及输入输出函数(printf/scanf)的使用技巧和缓冲区机制。文章指出,C语言直接操作硬件的能力使其成为嵌入式开发的
2026-02-21 20:21:30
907
原创 第四章 FreeRTOS调度机制
通用目的寄存器 R0-R7R0‐R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后的初始值是不可预料的。通用目的寄存器 R8-R12R8‐R12 也被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们,32位的指令则不受限制。它们也是 32 位字长,且复位后的初始值是不可预料的。
2025-08-24 20:24:05
814
原创 企业笔试真题
4、关键字static,在模块内的static变量、在模块内的static函数、在函数体内的static变量,请分别描述其作用是什么?3、给出两个单向链表的头指针,比如pHead1、pHead2,判断这两个链表是否相交,两个链表均不带环。A、main()函数里的i是一个未定义值 B、main()函数的i为1。1、有以下程序段,其中的变量已定义为 int 类型,则程序段的输出结果是( )。4、以下可以将任意一个两位整数n的个位数与十位数对换的表达式为( )。则出栈序列不可能为( )。
2025-08-24 13:17:39
719
1
原创 企业面试:什么是动态数组
动态数组看似简单,却蕴含了 "空间换时间"、"均摊复杂度" 等重要的算法设计思想。它是理解更复杂数据结构(如哈希表、栈、队列)的基础,也是企业面试中考察候选人基础是否扎实的重要切入点。掌握动态数组,不仅要会用,更要理解其底层实现 —— 内存如何分配、扩容如何进行、性能如何优化。这些知识能帮你在实际开发中做出更合理的技术选择,也能在面试中展现出超越普通开发者的深度思考能力。下次被问到动态数组时,不妨从概念、实现原理、代码案例到复杂度分析层层展开,让面试官看到你对数据结构的真正理解。
2025-08-24 09:59:58
2099
原创 企业面试:什么是柔性数组
柔性数组(Flexible Array Member)又称 “伸缩数组”,是 C99 标准引入的一种特殊结构体成员。在结构体中,最后一个成员可以是一个未指定大小的数组(即长度为 0 的数组),这个数组就被称为柔性数组。int len;// 用于记录柔性数组的实际长度int data[];// 柔性数组,不指定长度(C99允许)// 也可以写成 int data[0];早期编译器的兼容写法位置限制:柔性数组必须是结构体的最后一个成员,不能有其他成员跟在后面;大小特性。
2025-08-24 09:51:32
708
1
原创 你真的适合嵌入式吗?
如果你看到这里,或许已经在心里对 “是否适合嵌入式” 有了答案 —— 不管你是刚入门的学生,拿着 51 单片机开发板琢磨 LED 闪烁;还是想转行的职场人,对着 STM32 的 datasheet 犯怵;又或是在行业里摸爬滚打几年,卡在驱动调试或系统架构的瓶颈期,其实你都不是 “一个人在战斗”。嵌入式这条路,我走了 5 年 —— 从第一次把 “按键控制电机转动” 的代码跑通时的激动,到熬夜三天排查 CAN 总线通信 bug 的崩溃;
2025-08-24 09:28:53
1190
原创 只学会 STM32 能不能搞嵌入式开发?
回到最初的问题:“只学会 STM32 能不能搞嵌入式开发?如果你想做简单单机项目、基础开发助理岗、技术支持 / 测试岗,那么 “学好 STM32” 足够让你入门,甚至找到工作 ——STM32 的硬件控制能力,是这些场景的核心需求;如果你想做复杂多任务项目、物联网项目、高端领域(汽车电子 / 工业控制),那么 “只学 STM32” 远远不够 —— 你需要在 STM32 的基础上,补充 RTOS、通信协议、行业特定技术等技能。STM32 是嵌入式开发的 “黄金起点”。
2025-08-24 00:13:28
692
原创 嵌入式开发烂大街了吗?用真实案例说话
【嵌入式开发市场现状与前景分析】当前嵌入式开发远未饱和,市场需求呈现结构性差异。传统领域如汽车电子、工业自动化保持稳定增长,新兴物联网和AI边缘计算带来爆发需求。尽管初入行者竞争激烈,但中高端人才仍供不应求,企业普遍面临复合型人才招聘困境。薪资水平随经验显著提升,资深专家年薪可达30-100万元。智能医疗、工业控制等实战案例显示,嵌入式开发在解决实际问题中创造重要价值。未来AI融合、物联网拓展和国产替代将持续推动行业发展,为具备核心竞争力的开发者提供广阔空间。
2025-08-24 00:03:10
1840
原创 嵌入式系统学习路径
先动手,后理论”:嵌入式是 “实践驱动” 的学科,不要一开始就啃《嵌入式系统原理》这种厚教材,而是 “边做项目边学理论”(比如做 LED 闪烁时学 GPIO 口原理,做联网项目时学 WiFi 协议),效率更高。“接受 bug,享受调试”:嵌入式开发中,“代码跑不通”“硬件不工作” 是常态,比如 “LED 不亮可能是电路接反,也可能是寄存器配置错”,要学会用示波器、调试器排查问题,每解决一个 bug,技术就会提升一步。“循序渐进,不贪多求快”
2025-08-23 23:59:31
4692
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅