自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 我的CSDN近期规划

CSDN博主技术路线规划 博主近期暂停更新,专注梳理技术博客方向: 桌面端GUI:整合Win32/现代Windows GUI技术,构建《通用GUI编程技术指南》专题,配套代码库筹备中 嵌入式开发: 单片机结合现代C++教学 基于IMX6ULL的嵌入式Linux教程(含U-Boot/内核开发) 开源项目转化:包括x86_64操作系统开发等半成品项目教程化 所有代码资源均开源至GitHub仓库,涵盖嵌入式学习、现代C++及操作系统开发方向。博主邀请读者反馈兴趣点,共同推进技术分享。

2026-03-13 20:18:44 237

原创 现代Qt开发教程(新手篇)2.5——拖放系统基础

本文介绍了Qt拖放系统的基础知识,重点讲解了如何实现拖放功能的接收和发送。主要内容包括:1)通过setAcceptDrops(true)启用Widget的拖放接收功能;2)使用dragEnterEvent和dropEvent处理拖放接收逻辑;3)通过QDrag类发起拖放操作;4)利用QMimeData作为数据载体支持多种MIME类型的数据传输。文章还提供了代码示例,展示了如何实现文本和文件的拖放功能,并强调了拖放操作在现代应用中的重要性。

2026-05-23 07:52:32 211

原创 嵌入式Linux驱动开发——Pinctrl 子系统架构深度解析

本文深入解析了Linux内核中的Pinctrl子系统架构,将其比喻为"翻译官、复用管理员、电工"三重角色。文章从硬件到软件的桥梁作用入手,详细介绍了Pinctrl子系统如何将设备树配置转换为硬件寄存器操作、统一管理引脚复用以及配置电气特性。核心内容包括:1) 关键数据结构如pinctrl_pin_desc、imx_pin和pinctrl_dev;2) 三个核心操作结构体(pinctrl_ops、pinmux_ops、pinconf_ops)的功能实现;3) 具体实现流程,如imx_dt_node_to_ma

2026-05-23 07:40:30 226

原创 嵌入式Linux驱动开发——开始pinctrl之前,快速回顾i.MX 6ULL 引脚复用与 GPIO 硬件原理

本文介绍了i.MX 6ULL芯片的引脚复用与GPIO硬件原理。主要内容包括: 引脚复用概念:一个物理引脚可配置为多种功能(如UART、SPI、I2C等),通过IOMUXC控制器选择功能模式。 引脚配置: MUX寄存器选择引脚功能模式(如GPIO模式为ALT5) PAD寄存器配置电气特性(驱动强度、上下拉电阻、速率等) GPIO模块控制: 每个GPIO模块最多控制32个引脚 关键寄存器:DR(数据)、GDIR(方向)、PSR(状态)等 通过设置GDIR方向寄存器配置输入/输出模式 文章强调理解硬件原理对开发L

2026-05-23 07:22:51 233

原创 嵌入式C++实战第23篇:7 状态消抖状态机 —— 本系列的核心

本文介绍了嵌入式C++中按钮消抖状态机的实现方法。通过7个状态(BootSync、Idle、DebouncingPress、Pressed、DebouncingRelease、BootPressed、BootReleaseDebouncing)的有限状态机,解决了传统if-else消抖逻辑存在的状态变量散乱、边界处理不清晰等问题。文章详细解析了每个状态的功能和转换条件,特别是处理启动时按钮已被按下的特殊边界情况。该状态机实现了清晰的逻辑分离,确保按钮事件(按下/释放)只触发一次,并在消抖期间正确处理信号反弹

2026-05-22 08:07:25 363

原创 现代Qt开发教程(新手篇)2.4——QFont 与文本渲染基础

本文介绍了Qt中文本渲染的基础知识,重点讲解了QFont、QPainter::drawText()和QFontMetrics的使用方法。文章首先指出文本渲染的重要性,特别是在需要精确控制文字布局时。主要内容包括:QFont的构造与属性设置,如何指定字体族名、大小和样式;QPainter::drawText()的不同用法,特别是基于QRect的版本及其对齐方式;以及QFontMetrics在计算文字尺寸方面的应用,包括获取字符宽度、字体高度等关键指标。文章强调在实际开发中应优先使用QRect版本的drawTe

2026-05-22 07:58:58 250

原创 通用GUI编程技术——图形渲染实战(四十五)——D3D12资源与堆管理:从上传到驻留

本文深入解析了D3D12的内存管理机制,重点介绍了三种堆类型(DEFAULT、UPLOAD、READBACK)的特性和适用场景,以及三种资源创建方式(CreateCommittedResource、CreatePlacedResource、CreateReservedResource)的优缺点。D3D12将内存管理权交给开发者,通过精细控制数据存放位置和传输方式实现性能优化。文章还提供了代码示例,展示如何创建常量缓冲区和手动管理堆空间,帮助开发者理解D3D12底层内存操作原理,为高效图形编程奠定基础。

2026-05-22 07:47:12 351

原创 嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路

嵌入式Linux驱动开发:从寄存器操作到pinctrl/gpio子系统 本文探讨了嵌入式Linux驱动开发的演进过程,从直接操作寄存器的方式逐步过渡到使用pinctrl和gpio子系统。传统方法存在硬编码地址、配置步骤繁琐、代码复用性差等问题。Linux内核通过"分离与分层"的设计理念,将硬件操作与驱动逻辑解耦: pinctrl子系统:负责引脚复用和电气特性配置 gpio子系统:提供统一的GPIO控制接口 这种架构使驱动开发者无需关心底层寄存器细节,只需通过设备树获取配置信息并调用标准API。文章通过LED

2026-05-20 08:23:04 787

原创 现代C++特性指南(4)——完美转发与移动语义实战

本文介绍了现代C++中的完美转发与移动语义实战应用。主要内容包括: 完美转发解决了模板函数中参数值类别传递的问题,通过万能引用(T&&)和std::forward实现参数值类别的精确传递,避免重载函数数量爆炸。 万能引用的工作原理依赖于类型推导和引用折叠规则,只有T&&形式的模板参数才能成为万能引用。 std::forward本质上是一个有条件的类型转换,根据原始参数的值类别决定返回左值引用还是右值引用。 移动语义在STL容器和自定义类型中能显著提升性能,通过避免不必要的拷贝操作。 文章通过具体代码示例展示

2026-05-20 08:18:06 377

原创 嵌入式C++开发第22篇:非阻塞消抖 —— 不让 CPU 停下来等

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

2026-05-20 07:57:44 355

原创 通用GUI编程技术——图形渲染实战(四十四)——D3D12命令列表、队列与围栏:GPU同步核心

本文深入解析D3D12的命令管理机制,包括命令分配器(CommandAllocator)、命令列表(GraphicsCommandList)和命令队列(CommandQueue)的工作原理及其协作方式。重点阐述了D3D12与D3D11的关键区别:D3D12要求开发者显式管理命令的录制、提交和同步过程,以实现CPU与GPU的并行执行。文章详细介绍了命令分配器的内存管理特性、命令列表的录制模式,以及通过围栏(Fence)实现CPU-GPU同步的核心机制。这些概念构成了D3D12运行时的基础骨架,为后续渲染操作提

2026-05-19 09:23:07 385

原创 现代Qt开发教程(新手篇)2.3——QImage、QPixmap、QIcon 图像处理基础

本文介绍了Qt中图像处理的核心类QImage、QPixmap和QIcon的区别与使用场景。QImage适合像素级操作,QPixmap专为显示优化,QIcon则管理多状态图标。文章详细讲解了如何从文件和资源系统加载图像,重点说明了QPixmap的缩放方法及保持比例的技巧,并提供了性能优化建议。通过理解这些类的定位和使用方法,开发者可以更高效地处理Qt中的图像显示需求。

2026-05-19 09:14:59 426

原创 现代Qt开发教程(新手篇)2.2——坐标系与 QTransform 变换基础

本文介绍了Qt中坐标系变换的基础知识,重点讲解了QTransform的三大核心操作:平移(translate)、旋转(rotate)和缩放(scale)。通过具体代码示例展示了如何通过translate移动坐标原点、使用rotate实现图形旋转、以及利用scale进行坐标系缩放。文章还强调了save()和restore()在管理绘图状态中的重要性,并简要提及了视口(viewport)与窗口(window)的坐标映射机制。这些变换操作可以避免手动计算复杂坐标,让开发者能在局部坐标系中工作,大大简化了旋转、缩放

2026-05-18 10:35:29 199

原创 嵌入式Linux嵌入式Linux驱动开发:设备树驱动改造——从硬编码到设备树的实战之旅

本文介绍了将硬编码Linux驱动改造为设备树驱动的实战过程。通过渐进式重构方法,分步骤完成驱动改造:添加设备树头文件、定义节点路径、查找设备节点、读取设备属性等。重点讲解了设备树API的使用技巧和常见错误处理,如of_find_node_by_path查找节点、of_property_read_string读取属性等。文章强调保持硬件抽象层接口不变,通过小步验证确保改造过程可控。配套开源项目提供了i.MX平台的主线内核移植和设备树驱动实现,适合嵌入式开发者学习参考。

2026-05-18 10:31:21 483

原创 嵌入式Linux嵌入式Linux驱动开发:板级DTS实操与完整实战演练——从修改设备树到点亮LED的完整闭环

本文介绍了嵌入式Linux驱动开发中设备树(DTS)的实际操作流程,重点演示了从修改设备树到点亮LED的完整闭环开发过程。主要内容包括: 环境准备:确认开发板型号,定位板级DTS文件,理解.dtsi、.dts和.dtb的区别,强调备份的重要性。 DTS文件编写:详细讲解如何根据芯片手册确定寄存器地址,编写LED设备节点,包括节点命名规则、属性设置和寄存器映射方法。 DTB编译:介绍手动编译和构建脚本两种方式,以及通过反编译验证DTB正确性的方法。 驱动开发:概述驱动代码结构,说明如何从设备树中提取硬件信息并

2026-05-18 10:25:14 519

原创 嵌入式Linux驱动开发 —— 从 DTS 到代码的桥梁与简单OF系列API

嵌入式Linux驱动开发:设备树与OF API实践指南 摘要 本文深入探讨了嵌入式Linux驱动开发中设备树(DTS)与OF API的实际应用。主要内容包括: 设备树历史背景:从PowerPC的Open Firmware起源到ARM架构的强制采用,解释了为什么内核API使用"OF"前缀而非"DT"。 核心数据结构: device_node:表示设备树节点,包含父子节点关系 property:存储节点属性值 resource:统一描述硬件资源 关键API功能: 节点查找(of_find_node_by_pat

2026-05-16 09:00:40 559

原创 通用GUI编程技术——图形渲染实战(四十三)——D3D12设计哲学:显式控制与性能解锁

本文深入探讨了Direct3D 12(D3D12)与D3D11在设计哲学上的根本差异。D3D12通过将驱动层的控制权完全交给应用程序,实现了显著的性能提升,但代价是更高的编程复杂度。文章从命令提交、资源状态管理、内存管理、描述符机制和同步模型五个维度进行对比:D3D11采用隐式自动管理,而D3D12要求开发者显式控制命令列表、资源屏障、内存堆和围栏同步。重点分析了D3D12的核心优势——通过命令列表并行录制和显式同步机制大幅降低CPU开销,同时详细说明了环境要求和设备创建方法。这种设计转变使D3D12成为高

2026-05-15 13:18:44 430

原创 通用GUI编程技术——Win32 原生编程实战(五十四)——Hook 机制

Win32 Hook机制摘要 Hook机制是Win32编程中强大的消息拦截技术,允许开发者在消息到达目标窗口前进行处理。与子类化不同,Hook可以拦截全局消息流,适用于监听键盘输入、鼠标事件等系统级操作。 核心要点 Hook类型:分为低级钩子(WH_KEYBOARD_LL/WH_MOUSE_LL)和非低级钩子,前者无需DLL注入即可全局拦截 实现步骤: 使用SetWindowsHookEx安装钩子 实现回调函数处理消息 必须调用CallNextHookEx保持消息链 最后用UnhookWindowsHook

2026-05-15 09:40:55 391

原创 现代C++特性指南(3)RVO 与 NRVO:编译器的返回值优化

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

2026-05-14 13:14:38 498

原创 嵌入式Linux驱动开发——设备树语法与编译工具——读懂这张“藏宝图“

本文介绍了Qt中QPainter绘图的基础知识,主要包括三个核心内容:1) 在paintEvent中正确使用QPainter的方法,推荐使用RAII风格的构造函数;2) QPen(线条)和QBrush(填充)的设置与使用,包括颜色、线型、填充模式等;3) 基本图形的绘制方法,如直线、矩形、椭圆、多边形和文字等。文章强调QPainter是Qt GUI开发的核心工具,特别适合自定义控件和嵌入式界面开发,并提供了详细的代码示例说明绘图的基本操作。通过掌握这些基础知识,开发者可以为后续学习更高级的绘图技术打下坚实基

2026-05-14 13:04:25 428

原创 嵌入式Linux驱动开发——设备树语法与编译工具——读懂这张“藏宝图“

本文介绍了嵌入式Linux设备树开发的核心概念与工具。首先讲解了DTC编译器如何将.dts文本转换为.dtb二进制文件的过程,包括词法分析、语法分析和代码生成三个阶段。接着详细解析了设备树语法规则,重点阐述了节点命名、标签引用机制以及常见属性类型(字符串、数值、引用等)。文章还列举了标准属性如compatible、status、reg等的作用和使用场景,帮助开发者理解设备树如何描述硬件配置并与内核驱动匹配。通过掌握这些基础知识,开发者能够准确解读和修改设备树文件,为嵌入式系统硬件配置提供灵活支持。

2026-05-14 12:23:59 367

原创 如何开始嵌入式Linux的学习呢?

摘要: 本文系统介绍了嵌入式Linux与单片机开发的核心区别,为初学者提供清晰的学习路线图。作者指出嵌入式Linux本质上是完整的Linux操作系统运行在特定硬件平台上,与单片机开发存在四大关键差异:1)复杂的启动链条(U-Boot→内核→RootFS);2)驱动与应用分离的开发模式;3)基于日志和虚拟内存的调试方式;4)交叉编译工具链的配置要求。项目采用分层架构组织教程,从工具链、U-Boot、Linux内核到根文件系统逐步深入,帮助开发者理解嵌入式Linux的系统级开发思维。文章特别强调从裸机开发过渡到

2026-05-13 09:58:45 974

原创 现代Qt开发教程(新手篇)1.15——正则与文本处理

说实话,在 Qt5 时代我也还在用 QRegExp,毕竟老习惯难改。但后来项目里遇到一个复杂的文本解析需求,正则写了一百多字符,调试起来简直要命。那时才发现 QRegularExpression 不仅性能更好,语法也更接近现代正则标准,而且早已不是什么"新东西"了——Qt6 里 QRegExp 直接被扔到了 Qt5Compat 模块,这意味着官方已经明确告诉你:别用了。正则表达式这东西,学会之前觉得玄学,学会之后简直是文本处理的瑞士军刀。

2026-05-12 09:21:00 399

原创 通用GUI编程技术——Win32 原生编程实战(五十三)——子类化与超类化

文章摘要 本文深入讲解了Win32 GUI编程中的子类化(Subclassing)与超类化(Superclassing)技术。主要内容包括: 概念解析:子类化是修改已有控件实例的行为,超类化是创建具备新行为的控件类 技术原理:通过替换窗口过程指针来拦截和处理消息 实现方法:推荐使用SetWindowSubclass进行子类化,并详细介绍了相关API 实战案例:演示如何通过子类化拦截Edit控件的Enter键,实现提交功能而非默认换行 注意事项:强调要正确处理子类化的生命周期管理 文章提供了完整的代码示例,展

2026-05-12 09:08:48 463

原创 基于开源项目的现代C++实战——OnceCallback 实战(五):then 链式组合

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

2026-05-12 08:39:40 386

原创 嵌入式Linux开发——设备树简介 - 给硬件画张像

本文介绍了嵌入式Linux开发中的设备树技术。文章从Linus Torvalds对ARM内核源码膨胀的不满切入,解释了传统硬编码方式的弊端:代码重复、维护困难、编译效率低。设备树的本质是将硬件描述从代码中分离出来,形成树状结构的"硬件说明书"(DTS文件),其中.dts描述板级信息,.dtsi描述SOC级信息。相比传统方式,设备树使驱动代码更通用,硬件变更只需修改设备树文件而无需重新编译驱动。作者建议通过实践来掌握设备树,从基础语法开始逐步构建知识体系,强调"少讲理论,多写代码

2026-05-12 08:34:06 361

原创 基于开源项目的现代C++工程实践——OnceCallback 实战(四):取消令牌设计

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

2026-05-10 07:58:31 403

原创 现代Qt开发教程(新手篇)1.14——日志

本文介绍了Qt日志系统的核心功能和使用方法。首先阐述了日志在调试中的重要性,特别是现场调试时的关键作用。接着详细讲解了Qt提供的日志工具:从基础的qDebug()、qWarning()等宏,到更高级的QLoggingCategory分类日志系统。文章还介绍了如何在编译时控制日志级别以优化性能,以及通过环境变量或代码在运行时动态调整日志输出。最后展示了如何自定义日志格式,添加时间戳、线程ID等信息。这些功能共同构成了Qt强大而灵活的日志系统,能够满足从快速调试到生产环境监控的各种需求。

2026-05-10 07:44:42 353

原创 基于开源项目的现代C++工程实践——OnceCallback 前置知识(下):C++20/23 高级特性

C++20/23高级特性摘要 本文深入探讨了C++20/23中实现OnceCallback的关键特性: mutable lambda:允许修改捕获变量,对回调状态管理至关重要 初始化捕获:支持移动语义和表达式捕获,实现回调链的所有权转移 C++20 lambda包展开:简化参数绑定,使bind_once实现更简洁 Concepts约束:防止模板构造函数劫持特殊成员函数调用 move_only_function:提供类型擦除能力,是回调机制的核心组件 这些特性共同构成了现代C++回调系统的基础设施,相比传统方

2026-05-10 07:38:00 375

原创 通用GUI编程技术——Win32 原生编程实战(五十二)——高级输入消息:触控、Raw Input 与窗口管理

本文介绍了Win32编程中的高级输入消息处理技术,包括触控、Raw Input和窗口管理等。主要内容涵盖: WM_TOUCH消息:处理多点触控输入,包括注册触控窗口、获取触控点数据以及坐标转换等关键操作。 WM_POINTER消息:Windows 8引入的统一指针模型,可同时处理触控、笔和鼠标输入,提供了更简洁的编程接口。 应用场景:适用于触控屏支持、高精度输入设备处理、窗口位置监控、打印截图以及多显示器管理等需求。 文章通过代码示例详细说明了各种消息的处理方法,并比较了WM_TOUCH和WM_POINTE

2026-05-09 09:22:14 487

原创 通用GUI编程技术——图形渲染实战(四十二)——混合与透明渲染:从Alpha混合到粒子系统

本文介绍了图形渲染中的Alpha混合与透明渲染技术。主要内容包括: Alpha混合的数学原理:通过源颜色与目标颜色的加权组合实现透明效果,使用公式finalColor = srcColor * srcAlpha + dstColor * (1 - srcAlpha)。 D3D11混合状态配置:详细讲解了如何创建和绑定混合状态对象,包括源/目标混合因子设置和混合操作选择。 透明渲染的特殊处理:强调透明物体必须按从远到近的顺序渲染,并需要关闭深度写入但保持深度测试开启,以确保正确的混合效果。 深度状态管理:为透

2026-05-09 09:17:30 406

原创 嵌入式Linux驱动开发——驱动错误处理模式 - 当资源分配失败时该怎么办

本文介绍了嵌入式Linux驱动开发中的错误处理模式,重点讲解了两种核心方法: 错误指针机制:使用ERR_PTR()、PTR_ERR()和IS_ERR()宏来处理需要同时返回指针和错误码的情况,通过内核地址空间的保留区域编码错误信息。 goto错误处理模式:通过逆序清理的方式管理资源释放,使用goto语句简化错误处理流程。这种模式相比传统的if-else嵌套更加清晰可靠,避免了重复的清理代码。 文章通过具体代码示例展示了如何在实际驱动开发中应用这些技术,包括设备号申请、cdev添加、类创建和设备创建等步骤的完

2026-05-08 10:08:54 575

原创 现代Qt开发教程(新手篇)1.13——国际化

本文介绍了Qt国际化的核心概念和实现方法。主要内容包括: 国际化的重要性:建议开发初期就考虑多语言支持,避免后期重构成本高昂。 关键技术点: 使用tr()函数标记需要翻译的字符串 处理复数形式的特殊语法%n QTranslator加载翻译文件的机制 lupdate/lrelease工具链的工作流程 实现细节: 翻译器安装顺序的影响 动态切换语言的实现方法 CMake配置翻译工具链 注意事项:翻译器必须在需要翻译的对象创建前安装,否则部分文本无法翻译。 文章通过实际代码示例展示了完整的国际化实现方案,帮助开发

2026-05-08 09:59:45 517

原创 基于开源项目复刻的现代C++实践——OnceCallback 前置知识(上):C++ 基础特性速查

本文介绍了实现现代C++中OnceCallback所需的核心C++特性,重点解析了移动语义、完美转发、可变参数模板等关键技术。作为move-only类型,OnceCallback的设计基于右值引用和移动构造,通过std::move实现所有权转移。文章详细讲解了函数类型的模板偏特化技巧,这是解析回调签名的关键机制,并阐述了std::invoke提供的统一调用协议,它能处理各类可调用对象(函数指针、lambda、成员函数等)。这些特性共同构成了OnceCallback的实现基础,使其能够安全高效地封装一次性回调

2026-05-08 09:48:05 411

原创 基于开源项目复刻的现代C++实践——OnceCallback 实战(三):bind_once 实现

本文介绍了现代C++中OnceCallback的参数绑定实现bind_once。bind_once通过将已知参数提前绑定到回调中,简化了调用方的参数传递。文章详细解析了bind_once的实现原理,包括模板参数推导、lambda捕获列表和invoke调用过程,并通过具体示例展示了其工作流程。同时指出了生命周期管理和签名显式指定的必要性,为开发者提供了实用的C++回调绑定实践指导。

2026-05-08 09:43:32 374

原创 嵌入式Linux驱动开发——class 和 device 模型 - 自动创建设备节点的幕后机制

嵌入式Linux驱动开发摘要 本文介绍了Linux驱动开发中自动创建设备节点的机制,重点解析了class和device模型的工作原理: 背景问题:传统手动mknod方式繁琐,现代Linux通过udev/mdev自动管理设备节点 核心机制: sysfs作为内核与用户空间的桥梁,/sys/class目录组织设备类别 驱动通过class_create()创建设备类 device_create()在类下创建设备,触发uevent事件 用户空间udev/mdev监听事件并自动创建/dev节点 关键API: class

2026-05-07 09:20:35 265

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

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

2026-05-07 09:14:52 187

原创 现代Qt开发教程(新手篇)1.12——插件系统

这篇文章介绍了Qt插件系统的核心概念和应用场景,主要包含以下要点: 插件系统的价值在于解耦、可扩展和隔离性,允许功能模块独立开发和部署 Qt插件架构包含三个核心组件:接口定义、插件实现和插件加载器 详细说明了如何定义插件接口、实现具体插件类以及正确加载插件 重点强调了开发中的常见陷阱,包括必须使用Q_PLUGIN_METADATA和Q_INTERFACES宏、版本一致性要求、依赖库处理等 提供了插件自动发现机制的实现示例和代码练习 文章采用实践导向的写法,结合具体代码示例,特别适合需要开发模块化Qt应用的开

2026-05-07 09:11:07 216

原创 AwesomeQt:最小的Qt6系列迷你版本教程发布!

《AwesomeQt迷你教程发布:Qt6入门全栈指南》 CharlieChen推出了一个面向Qt6初学者的迷你教程仓库AwesomeQt,涵盖从基础到进阶的全方位学习内容。该教程特色包括:详细的环境搭建指南(支持Windows/Linux/WSL2)、Qt核心模块解析(元对象系统、信号槽、多线程等)、GUI开发基础(QPainter绘图、OpenGL集成)、Widgets控件详解,以及网络编程和扩展模块介绍(数据库、图表、多媒体等)。作者特别分享了自己学习Qt时踩过的坑,如信号槽跨线程问题和Q_OBJECT

2026-05-06 22:10:59 561

原创 基于开源项目复刻的现代C++实践——OnceCallback 实战(一):动机与接口设计

本文介绍了基于开源项目复刻的现代C++实践中的OnceCallback设计动机与接口。作者从异步文件读取的常见bug出发,分析了std::function在回调场景的三大缺陷:可复制性、可重复调用和无法表达消费语义。为解决这些问题,文章提出了Chromium风格的OnceCallback设计哲学:move-only特性、右值限定Run()方法和单次消费机制。最后详细设计了OnceCallback的目标API,包括构造调用、参数绑定、取消检查和链式组合等功能,并解释了关键接口设计决策的原因。该项目已在GitH

2026-05-06 13:51:21 522

学术英语词汇表-U1..pdf

学术英语词汇表-U1..pdf

2022-09-27

空空如也

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

TA关注的人

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