- 博客(41)
- 收藏
- 关注
原创 c++基础补强--Day06
表格关键字作用是否需要初始化是否保留引用 /const适用场景auto定义变量,靠初始化推导类型必须初始化仅基础类型,丢弃引用迭代器、循环、lambda、简化长类型decltype查询任意表达式完整类型不需要变量初始化完整保留 const、&、左值属性模板返回值、提取复杂类型、精准保留修饰符C++11 新增,统一使用大括号{}做初始化,统一所有类型(普通变量、数组、结构体、类、容器)的初始化语法,也叫统一初始化。三种传统初始化对比:cpp运行// 1. 赋值初始化(等号)
2026-06-29 21:23:31
440
原创 c++基础补强-Day05
enum class叫,C++11 新增,解决传统普通enum的两大缺陷:无作用域、隐式转 int 不安全。二、普通 enum 与 enum class 核心对比1. 传统 enum(弱枚举,缺点很多)cpp运行缺陷总结:枚举成员污染外层命名空间,容易重名冲突;枚举值自动隐式转整型,类型无隔离,极易写出错误代码。2. enum class(强枚举)cpp运行三、作用域规则(访问方式)enum class 的枚举成员被包裹在枚举类型内部,访问,不能单独使用:cpp运行。
2026-06-28 12:46:12
162
原创 c++基础补强-Day04
命名空间内部再定义 namespace,形成层级结构,适合多层级代码分组(如项目→模块→工具)。:无名称,内部内容仅当前文件可见,替代 static 做文件私有函数 / 变量。(using 指令):引入全部符号,简写方便但易重名,仅小型程序用。3. using 指令(using namespace 空间)二、访问命名空间元素:using 声明 /using 指令。(using 声明):仅引入单个符号,冲突少,工程推荐;:空间内再套空间,层级管理;2. using 声明(using 标识符)
2026-06-26 21:56:18
241
原创 c++基础重补-Day02
标准不规定固定后果。栈数组越界后果:篡改其他局部变量、覆盖函数返回地址,程序乱码、崩溃、栈溢出攻击风险。堆数组越界后果:破坏堆内存管理头部信息,后续调用 free () 大概率直接程序崩溃,内存结构损坏。四、避坑总结背诵只有函数内部。
2026-06-25 10:29:25
148
原创 ESP32S3-Day04-BLE
GAP(Generic Access Profile):广播、扫描、连接、配对GATT(Generic Attribute Profile):服务 Service、特征 Characteristic、读写 NotifyMesh:在 GAP/GATT 之上,多设备网状通信1.2 两种经典角色角色英文做什么类比从机Peripheral广播等人连,提供数据蓝牙音箱主机Central扫描并主动连接手机、电脑实验 ①②④⑤⑥⑦ 中 ESP32 都是从机/节点;
2026-06-19 09:22:36
255
原创 OPENWRT-ESP32-Day03-mqtt联调-边缘网关项目
WiFi 初始化对齐(PMF、RAM 存储、RF 兼容、事件重试)WiFi 未连接时不启动 MQTTMQTT 连上后发布online、订阅led/set、周期上报 RSSI/uptime。
2026-06-17 21:40:04
239
原创 ESP32S3-Day02-连接wifi
能扫描、连不上」≠ 密码错扫描是被动接收,连接需要主动发包。失败阶段不同,原因完全不同。menuconfig 配对了不代表不是软件问题,但也不一定不是路由器问题本次配置自始至终正确,问题出在 AP 侧。「曾经连上过」是重要线索指向会话残留、路由器状态变化,而非代码突变。换路由器是最快的定责手段比反复改代码高效得多,应尽早做。务必打印 WiFi reason 码官方示例默认不打印,排障成本会大幅上升。ESP-IDF 的REQUIRES要写全漏写esp_wifi会直接导致头文件找不到。
2026-06-17 11:23:50
227
原创 OPENWRT-Day02-驱动ST7735(spi tft1.44 128*160屏幕)
环境:OpenWrt 25.12.4 / bcm2711 / 内核 6.12.87 / 树莓派 4B屏幕:ST7735,SPI,1.44 寸,
2026-06-15 13:42:18
295
原创 OPENWRT-Day01
5 | `NO-CARRIER` / `Failed to initiate sched scan` | 国家码、默认 AP、可能连了 5G | 设 `country=CN`、关 AP、连 **2.4G** SSID |缺的只是 **第二条上行**,用 **WiFi 补上** 即可。| 6 | 误加 `wireless.sta.sskey` | 字段名错误,应为 `key` | `uci delete wireless.sta.sskey`,用 `key` |WAN 用 WiFi 即可 |
2026-06-14 19:27:37
263
原创 c++工具转向网络底层工具
**✅ 逻辑纠正**:需要维护一个动态更新的 `start` 指针,利用 `substr(start, pos - start)` 截取片段,并将 `start` 更新为 `pos + 1`,直到 `pos == npos`。* **`reserve()` 与 `malloc` 的区别**:`malloc` 只是分配原始字节;* **✅ 逻辑纠正**:`std::move` 本身**什么都没动**,它只是一个将左值强转为右值的标记。* **知识点**:`vector` 在内存中是连续存储的。
2026-03-19 10:29:42
245
原创 性能瓶颈之内核旁路和无所编程
当你的程序能一秒处理一千万个包时,传统的“加锁”操作(Mutex/Spinlock)会变成灾难。比如,如果你(内网)主动请求访问百度,防火墙会记住这个动作,当百度的回程包到达。在万兆(10Gbps)网络下,内核处理一个包的开销(中断、上下文切换、内存拷贝)会导致大量丢包。如果内存很大,字典页数太多,TLB 存不下,CPU 就要去慢速的内存里查字典,这叫。它把网卡从内核手里“抢”过来,由 DPDK 自己的驱动在用户态接管。:丢弃包的同时,给对方回一个“ICMP Unreachable”报文。
2026-03-08 11:17:26
372
原创 报文的生命周期
Linux网络性能优化中的中断处理机制 摘要: Linux内核通过分层中断处理机制解决高负载下的性能问题。传统硬中断模式在高并发时会导致CPU陷入"中断风暴",耗尽资源于上下文切换而非实际数据处理。内核采用"上半部+下半部"设计:硬中断快速响应并触发软中断,软中断处理繁重任务。NAPI机制动态平衡中断与轮询,低负载时用中断保证实时性,高负载时切换为轮询提升吞吐量。网卡硬件层面通过DMA控制器和多队列设计配合软件优化,共同实现高效数据包处理。这种软硬件协同设计有效减少了
2026-03-08 11:17:19
404
原创 虚拟文件系统 (VFS) 与 Netlink 编程
Netlink 虽然遵循 Socket(文件)规范,但它跳过了复杂的文件系统路径查找,直接在协议栈内部分发消息,平衡了“易用性”与“性能”。:虽然你在树莓派上点灯、控制电机可能还会用到它,但在现代 Linux 网络子系统中,它已经慢慢退居二线,被 Netlink 取代了。:是一块巨大的、没有任何结构的“字节荒漠”(比如一块 512GB 的硬盘,从第 0 字节到最后 1 字节都是平等的)。:VFS 层为了实现“一切皆文件”,做了大量的封装和转换(权限检查、路径解析、锁竞争),这会产生巨大的。
2026-03-07 19:17:40
374
原创 详解sk_buff
在网络中,有一个概念叫MTU(最大传输单元),通常是 1500 字节。问题:如果你的应用层发了一个 4000 字节的大包,而物理内存分配器(kmalloc)给你的data区装不下怎么办?方案:内核会把剩下的数据挂在“附件”里。就是这个附件夹。它紧跟在skb->end指向的内存之后。frags[]:指向其他内存块(分片)的指针。gso_sizegso_segs:即你提到的GSO(分片卸载)。它告诉网卡:“我给你一个大包,你自己按照这个 size 帮我切成小包发出去。这是计算机组成原理在内核中的应用。物理本质。
2026-03-07 15:22:26
418
原创 内核子网和驱动--抓包练习
系统想知道刚才连的 NTP 服务器(91.189.91.157)的域名。:WSL 向 Ubuntu 时间服务器请求同步时间(系统后台行为)。:有公网域名配置的(NTP 服务器、Google DNS、多播域名):你的私有 IP(172.26.153.93)、部分 IPv6 地址。:系统反向查询自己的 IP(172.26.153.93)的域名。现象 1:为什么第一次 DNS 成功,后面都是失败?:成功查到 NTP 服务器的域名和 IP 地址。五、ARP 详解:为什么后面才出现?1. DNS 是什么?
2026-03-01 20:04:06
252
原创 内存管理与泄露检测--持续更新
1. 虚拟内存、页表、TLB:给每个进程一个假象,认为自己拥有连续的、巨大的内存空间(例如 4GB)。:存放“虚拟地址”到“物理地址”映射关系的字典。:由于查页表(去物理内存里查)太慢,CPU 内部搞了一个小缓存,专门存最近查过的映射关系。--TLB 缺失(Miss)会导致 CPU 性能剧降。
2026-02-27 08:24:12
374
原创 网络协议-持续更新
三次握手:client 先发送 SYN请求 server接收到消息之后发送SYN和ACK 表示确认答应 最后clinet 发送ACK 让server知道client端已经接受到信息。四次挥手:假设由client 发送ACK+FIN 服务端接收把手头的数据发送掉 再发送以提高FIN+ACK 然后client收到消息发送一个ACK来确认。TCP-三次握手-面向连接。
2026-02-27 08:23:54
111
原创 生产者消费者问题-并发控制
典型的同步问题:生产者-消费者问题生产者:生产资源放入队列消费者:从队列取出资源执行同步的实现方法:信号量(semaphore)和条件量(cond)
2026-02-26 17:55:31
908
原创 并发编程&锁
是整个并发编程的“灵魂”。如果没有 CAS,我们所有的锁(Mutex, Spinlock)在底层都无法实现。简单来说,CAS 是一种,它允许你在不使用传统重量级锁(Mutex)的情况下,安全地更新一个变量。
2026-02-26 12:15:42
1026
原创 局部变量&全局变量--堆与栈上的差别?
操作系统之所以将内存划分为栈(Stack)和堆(Heap),本质是为了在分配效率、生命周期管理和内存布局之间取得平衡——栈追求极致的速度和确定性,堆追求灵活性和大容量存储。
2026-01-29 09:23:59
62
原创 访问结构体成员的操作
> 箭头运算符(间接成员访问) 结构体指针访问成员 p->age。. 点运算符(直接成员访问) 结构体变量访问成员 stu.age。└─ 用 . 直接访问 └─ 用 -> 间接访问。等价写法: (*p).age = 20;-> 叫做箭头运算符或成员访问运算符。结构体变量 结构体指针。
2026-01-26 13:28:30
63
原创 树莓派初始化配置
3-放在boot盘,和config.txt同目录下。2-buildroot已经编译好了mkimage。* uboot自动启动配置。1-创建文件并且编译。
2026-01-05 20:42:38
103
原创 AttributeError: ‘FigureCanvasInterAgg‘ object has no attribute ‘tostring_rgb‘. Did you mean: ‘tostri
pycharm matplotlib
2025-03-25 15:37:19
2249
原创 platform io IDE 报错
环境:win11\ vscode\ platformio IDE\ esp32c3-supermini。-- 将 framework = arduino 添加到配置文件中。解决方法: 参考github。
2025-03-13 19:36:41
664
原创 pycharm配置已有conda环境
先从conda.bat(可执行文件)–>索引已有环境–>索引需要的环境。1-- 首先确定你已经创建好此conda环境。
2025-02-04 21:13:33
795
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅