logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Cinux会说话了:串口、kprintf 与双轨测试

如果您是想尝试 Cinux,并对一些驱动、前沿细节的实现感兴趣的朋友,请移步到下面的仓库:如果您对手写一个现代 C++ 操作系统感兴趣的朋友,请到这里:如果上面的内容,对您的学习和实际的开发哪怕有一丝帮助,都是笔者极大的荣幸!喜欢的话,麻烦小小的赏一个 ⭐(QAQ)。自己的知识仍不精湛,文章必然还有很多错误,还请各位大佬批评斧正!我们让内核跑起来了,可它只会往 debugcon 吐单字符(PL==

#驱动开发
基于开源项目复刻的现代C++实践——OnceCallback 实战(二):核心骨架搭建

本文介绍了基于开源项目复刻的现代C++实践——OnceCallback的核心骨架搭建过程。通过五步法从零开始构建OnceCallback类:首先定义主模板与偏特化处理函数类型;然后添加三个核心数据成员(状态枚举、类型擦除的可调用对象和取消令牌);接着实现构造函数与requires约束,确保模板构造函数不会劫持移动构造;最后利用deducing this技术实现run()方法,在编译期拦截左值调用。

文章图片
#c++#开源#开发语言 +1
基于开源项目的现代C++工程实践——OnceCallback 实战(四):取消令牌设计

本文介绍了基于开源项目的现代C++工程实践中取消令牌(CancelableToken)的设计与实现。文章首先阐述了取消令牌的概念和核心需求,即支持多回调共享、可拷贝移动和多线程安全。随后详细解析了一个仅18行代码但功能完整的CancelableToken实现,包括其嵌套Flag结构体设计、shared_ptr共享机制以及内存序保证。文章还展示了如何将取消令牌集成到OnceCallback中,重点说

文章图片
#开源#c++#开发语言
基于开源项目的现代C++工程实践——OnceCallback 前置知识(下):C++20/23 高级特性

C++20/23高级特性摘要 本文深入探讨了C++20/23中实现OnceCallback的关键特性: mutable lambda:允许修改捕获变量,对回调状态管理至关重要 初始化捕获:支持移动语义和表达式捕获,实现回调链的所有权转移 C++20 lambda包展开:简化参数绑定,使bind_once实现更简洁 Concepts约束:防止模板构造函数劫持特殊成员函数调用 move_only_fu

文章图片
#开源#c++#c++20
基于开源项目的现代C++实战——OnceCallback 实战(五):then 链式组合

本文深入探讨了现代C++中OnceCallback的then链式组合实现,重点分析了管道思维、所有权转移和void/非void分支处理。文章首先通过Unix管道类比then()的串联语义,展示如何将回调A的输出作为回调B的输入。核心挑战在于所有权设计,then()必须完整转移原回调和后续回调的所有权到新闭包中。通过逐行拆解实现代码,详细解释了右值限定、类型推导、lambda捕获等关键技术点,并演示

文章图片
#开源#c++#开发语言
现代C++特性指南(3)RVO 与 NRVO:编译器的返回值优化

本文介绍了现代C++中的返回值优化(RVO)和命名返回值优化(NRVO)技术。这两种优化允许编译器直接在调用者的栈帧上构造返回值对象,避免了临时对象的构造和拷贝/移动操作。文章通过Point类的示例展示了RVO和NRVO的工作机制,并对比了开启和关闭优化时的行为差异。特别指出C++17对prvalue返回的拷贝消除提供了语言层面的保证,而NRVO仍然是编译器可选的优化。最后分析了可能导致NRVO失

文章图片
#c++#开发语言#开源
嵌入式C++开发第22篇:非阻塞消抖 —— 不让 CPU 停下来等

本文介绍了嵌入式系统中非阻塞式按钮消抖的实现方法。通过使用HAL_GetTick()获取系统时间戳,避免了传统阻塞式消抖方案中CPU停滞的问题。文章详细分析了阻塞消抖的弊端,提出了基于时间戳比较的非阻塞算法,并提供了完整的C语言实现代码。该方案通过记录状态变化时间点,在后续循环中检查是否达到消抖时间,从而在保证消抖效果的同时,让CPU能够继续执行其他任务。文中还特别强调了32位时间戳溢出问题的安全

文章图片
#c++#开发语言#stm32
现代C++特性指南(5)——RAII 深入理解:资源管理的基石

本文深入解析了现代C++中的RAII(资源获取即初始化)机制。RAII通过将资源获取与对象构造绑定、资源释放与析构绑定,利用C++的栈展开机制确保资源安全释放。文章通过文件句柄封装示例展示了RAII的实际应用,并详细解释了栈展开的工作原理:无论正常返回还是异常抛出,局部对象都会按构造逆序析构。同时强调析构函数应避免抛出异常,否则会导致程序终止。RAII是C++智能指针、锁守卫等自动清理机制的基础,

文章图片
#c++#开发语言
现代C++:scope_guard 与 defer:通用作用域守卫

本文介绍了现代C++中scope_guard和defer模式的实现与应用,它们是管理作用域退出时操作的通用工具,比智能指针更灵活。通过RAII机制,scope_guard能在作用域退出(正常返回或异常抛出)时自动执行绑定的操作,如状态恢复、事务处理等。文章给出了scope_guard的基础实现,并展示了如何通过宏实现类似Go语言的defer语法,让清理代码紧邻资源获取代码。此外,还讨论了区分成功与

文章图片
#c++#开发语言
现代C++工程:constexpr 基础:编译期求值的艺术

constexpr函数在编译期求值时,如果触发了未定义行为(UB),编译器会直接报错——这其实是件好事。比如数组越界、有符号整数溢出、除以零等,在运行时可能悄悄产生错误结果,但在constexpr求值时会被编译器拦截。// 如果 b == 0,编译期求值时直接编译错误// 编译错误:除以零这个特性让constexpr成为一种"安全网"——你在编译期能算出来的东西,编译器会帮你检查合法性。

文章图片
#c++#开发语言
    共 219 条
  • 1
  • 2
  • 3
  • 22
  • 请选择