- 博客(133)
- 收藏
- 关注
原创 UART,IIC,SPI总线(通信协议)
S → 写寻址(0x80)→ ACK → 寄存器(0xE3)→ ACK → 重复 S → 读寻址(0x81)→ ACK → 数据(0x1A→ACK→0x5B→NACK)→ P。1.通信属性:串行(数据逐位传),同步(依赖sclk(spi)时钟同步),全双工(同一时钟周期内,主机经mosi发、从机经miso发,双向同时传);:每传 1 字节(8 位),接收器第 9 时钟周期回 ACK(0,成功)或 NACK(1,失败 / 停止)。:串行(逐位传)、同步(依赖 SCL 时钟同步)、半双工(同一时间单向传);
2025-09-16 21:39:50
723
原创 I2C 总线
I2C 总线的核心是 “通过时序和地址实现设备间有序通信”,理解起始 / 终止信号、应答机制、寻址规则是关键。实际应用中,需结合具体设备的地址和寄存器手册,按协议格式编写读写代码(如 STM32 通过 GPIO 模拟时序或使用硬件 I2C 外设)。
2025-09-11 20:05:12
1060
原创 UART 总线核心特性
通过以上整理,可清晰理解 UART 的理论基础、硬件配置及代码实现,结合示例能快速上手调试。总线,物理层存在,用于设备间通信(如 PC 与开发板)。:8N1(8 数据位,无校验,1 停止位)。
2025-09-11 20:04:15
1003
原创 单片机学习笔记
本文整理了单片机学习的核心知识点,包括环境搭建、硬件分析、寄存器操作、工程配置、库函数使用及实践案例。引脚查找的 “硬件连接链” 分析方法;寄存器(如 RCC、GPIO)与 HAL 库函数的对应关系;工程创建与代码编写的规范(如 USER CODE 块、无中文路径)。通过实际案例(LED 闪烁、按键控制)可加深对知识点的理解,建议结合开发板动手调试。编辑分享总结一下寄存器分析的具体步骤提供一些在学习过程中加深对知识点理解的建议讲解一下如何使用HAL库函数进行工程创建。
2025-09-11 20:03:25
1320
原创 广度优先遍历(BFS)和深度优先遍历(DFS
在计算机科学中,广度优先遍历(BFS)和深度优先遍历(DFS)是两种常用的图或树的遍历算法,用于按特定顺序访问数据结构中的所有节点。
2025-08-26 11:25:18
734
原创 哈希查找核心知识点(面试版
优先链地址法:开放地址法会导致 “二次冲突”(解决冲突时占用其他地址),且删除数据需标记 “墓碑”,链地址法无此问题,更适合高频插入 / 删除场景。质数的约数少,能避免数据因 “共同约数” 集中映射到同一地址,降低冲突概率(如选合数易导致偶数数据都映射到偶数地址)。
2025-08-25 19:17:46
459
原创 bool 类型转换运算符重载
以下是一个的示例代码,用最直观的方式演示bool类型转换运算符重载的触发逻辑、使用场景和避坑点,帮你快速掌握:cpp运行。
2025-08-06 17:03:07
427
原创 类模板与模板类的区别及模板类的实现时机
类模板是 “模板定义”(通用蓝图),模板类是 “实例化结果”(具体类);模板类通过隐式实例化、显式实例化生成,特殊类型可通过全特化 / 偏特化定制实现。
2025-08-05 16:22:27
585
原创 迭代器代码
(解引用)、++(移动)、!(比较)。与容器的绑定:作为内部类,容器提供begin()end()。按功能分类:前向、双向、随机访问(根据容器特性选择实现)。掌握这些,就能手写适配各种容器的迭代器,理解 STL 容器的遍历逻辑。
2025-07-31 16:48:17
524
原创 7.30..
Weaponcpppublic:// 加属性接口// 卸属性接口virtual ~Weapon() {} // 虚析构(确保派生类释放)原因:作为所有武器的 “模板”,定义必须实现的接口,为多态提供基础。此时只需知道Hero是一个类(通过前向声明),无需知道其细节。
2025-07-30 20:50:49
906
原创 多态示例。
函数重载:不依赖继承,解决 “同功能不同类型的调用简化”;• 动态多态:依赖继承,解决 “基类接口与派生类实现的适配”;• 协变:依赖继承,解决 “重写时返回值类型的灵活性问题”,是动态多态的补充。最终目的都是在保证逻辑清晰的前提下,减少冗余代码,提升代码的可维护性和扩展性。
2025-07-29 16:03:38
250
原创 【无标题】
虚函数核心:通过vtable和vptr实现运行时多态,让父类指针 / 引用能调用子类重写的函数。你的菱形继承代码:虚拟继承解决了 “多继承父类成员重复” 问题,在此基础上加入虚函数,依然可以实现多态(父类指针指向子类对象时,自动调用子类逻辑)。构造函数不能是虚函数:因为构造函数的职责是初始化对象(包括vptr),而虚函数调用依赖vptr已设置,逻辑矛盾。
2025-07-29 15:59:44
884
原创 吃透 lambda 表达式(匿名函数)
include <algorithm> // 包含 sort 函数// 用 lambda 作为 sort 的回调:自定义排序规则(从大到小)// 排序规则:x 大于 y 则 x 放前面});// 遍历输出:5 4 3 1 1return 0;// 不用 lambda:需单独定义函数// 传函数名核心价值:临时定义 “一次性小函数”,替代简单回调,简化代码。关键语法[捕获列表]决定外部变量访问权限(值 / 引用),是必须掌握的重点。考试技巧。
2025-07-28 22:47:11
883
原创 c++深拷贝和浅拷贝
浅拷贝:简单复制指针值,共享内存,容易出 “重复释放” 或 “内容互相影响” 的问题。深拷贝:给新对象指针重新开内存、复制内容,让对象互相独立,解决浅拷贝的隐患。实现关键:在拷贝构造函数和赋值运算符重载里,手动 “开新内存 + 复制内容”,别依赖编译器默认的浅拷贝逻辑。理解后,写涉及指针成员(动态内存)的类时,记得补全深拷贝的这两个函数,否则程序大概率会崩溃或内存泄漏~
2025-07-24 16:25:16
568
原创 医疗系统伪代码
这个系统是一个基于 C/S 架构的医疗记录管理系统,主要包含三个部分:服务器端和两种客户端(患者和医生)。下面通过伪代码和逻辑说明帮助你理解。通过以上伪代码和逻辑说明,应该能清晰理解整个系统的工作原理和各部分之间的交互方式。
2025-07-22 20:24:57
422
原创 演示数据库操作
代码中用sprintf需要将用户输入的动态密码(code_pswd)嵌入 SQL 语句;用%s占位并拼接,是简单直接的字符串格式化方式;单引号是 SQL 语法要求(字符串值必须包裹)。但这只是演示级写法,实际开发必须用参数化查询()避免 SQL 注入。
2025-07-16 21:24:24
428
原创 多客户端-服务器(select,poll)
参数: :最大描述符值+1。 :分别监视“可读/可写/异常”事件的列表。 :阻塞超时时间(表示永久阻塞)。 特点:监视列表与激活列表共用同一块内存,激活后会覆盖原列表,需手动备份。3. 优缺点 优点:逻辑简单直观,易于实现。 缺点: 监视列表容量固定,无法动态扩容。 需额外维护描述符数组,遍历效率低(双重循环)。 每次调用需复制列表,浪费系统资源。 五、poll模型详解1. 核心结构 监视列表类型:数组(可动态扩容,栈/堆空间均
2025-07-14 20:27:45
1006
原创 【无标题】
**文件扩展名** | `.a` | `.so` || **文件扩展名** | `.a` | `.so` || **文件扩展名** | `.a` | `.so` || **依赖管理** | 无外部依赖 | 需确保库文件存在 |
2025-07-08 17:04:04
803
原创 【无标题】
此代码实现了:🚀高速数据传输(通过共享内存)🔒安全协作机制(通过信号量)⚖️生产消费平衡(FULL/EMPTY计数)P()= 等待(红灯)V()= 通知(绿灯)共享内存= 数据共享区三个信号量= 协调规则。
2025-07-08 16:19:43
688
原创 多线程安全日志库
c 是 线程入口函数,用于适配 POSIX 线程库 的接口要求,核心原因: 要求线程函数必须是 类型(参数和返回值都是 ),而 的签名是 ,两者函数签名不兼容,无法直接作为线程入口。如果直接让 当线程函数,会因为 参数类型、返回值、函数签名不匹配 导致编译或运行错误。 是 “胶水层”,让线程库的接口和业务逻辑衔接。void* (*)(void*) 类型函数指针吗是的, 是一个 函数指针类型,具体含义如下: 返回值: 函数返回一个 指针(通用指针类型,可指向任意类型数据)。 参数列表: 函
2025-07-04 20:49:02
816
原创 文件IO经典题目
标准IO中的特殊流指针:stdin(标准输入流)、stdout(标准输出流)、stderr(标准错误输出流),各有其作用及等价关系、文件描述符。行缓冲:对象为stdin和stdout,大小1024字节,刷新机制包括行满、fflush(七种)等。全缓冲:对象为fopen打开文件返回的流指针,大小4096字节,有多种刷新机制(五种)。time:获取当前到1970 - 1 - 1 0:0:0的时间差,单位为秒。无缓冲:对象为stderr,大小为0,常用于打印错误信息。
2025-07-01 21:05:46
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅