自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 我的CSDN近期规划

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

2026-03-13 20:18:44 252

原创 RK3506B: buildroot:出一份正规的最小 rootfs

RK3506B处理器构建最小rootfs的实践总结:使用buildroot生成正规可维护的根文件系统,解决了WSL路径空格、外部工具链语言检查、glibc RPC迁移等关键问题,最终生成8.2MB的cpio和8.8MB的tar格式rootfs,包含busybox、glibc运行时和完整FHS结构。通过BR2_EXTERNAL机制实现定制化配置,避免直接修改buildroot源码,确保构建流程的可持续性。

2026-07-11 20:18:39 239

原创 RK3506 外设收官:音频点亮

摘要:RK3506外设开发收官,成功点亮音频系统。采用ES8388 codec + SAI1数字接口 + PL330 DMA架构,通过补丁解决了SAI of_match缺失和DMA 5-cell编码适配问题。开发过程中发现ES8328驱动隐藏配置、时钟频率要求、引脚冲突等关键点。最终数字链路正常工作,声卡成功注册,aplay/mpg123可完整播放音频。至此,RK3506已实现以太网、SPI、USB、WiFi、音频等全部外设功能,从"能开机的砖"蜕变为功能完整的开发板。相关代码和完整教程已开源在rk-for

2026-07-10 10:29:25 170

原创 Cinux: 为大内核铺路

些不匹配的直接判"不是 ELF"。 load_program 遍历程序头表,找 PT_LOAD 段。对每个这样的段,它分两步处理:先把 p_filesz 字节从 p_offset 处(文件内)拷贝到 p_paddr(物理内存),再把 p_memsz - p_filesz 字节清零(相当于 .bss)。这里 p_memsz >= p_filesz 是 ELF 规范保证的——BSS 段在文件里不占空间,只在内存里占。 load_elf 是二者的组合:先验头,再加载所有 PT_LOAD 段,最后返回入口地址 e_

2026-07-10 10:19:17 206

原创 IMX6ULL 驱动开发 | AP3216C I2C 驱动(一):用 6.12/7.1 框架拆透,现代内核 API 重写

本文介绍了如何在Linux 6.12/7.1内核下开发AP3216C三合一传感器的I2C驱动程序。主要内容包括: 现代内核API的更新:对比了4.1.15内核与6.12/7.1内核在I2C驱动实现上的主要差异,如probe/remove函数签名变化、class_create简化等。 AP3216C传感器特性:该芯片集成了红外(IR)、环境光(ALS)和接近距离(PS)三种传感器,通过I2C接口通信,地址为0x1e。 Linux I2C框架设计:分析了"控制器操作"与"设备逻辑"分离的设计哲学,详细解读了i2

2026-07-08 07:16:31 453

原创 std::any 不是 void*:浅谈类型擦除到底擦掉了什么

文章摘要 std::any是C++17引入的类型安全容器,能够存储任意类型的值并通过类型检查安全取回,解决了void*丢失类型信息的问题。它采用类型擦除技术,内部通过包装器和函数指针实现,并利用Small Buffer Optimization优化小对象性能。与std::variant相比,any适用于运行时确定类型的场景(如插件系统),但性能开销较大;而variant在编译期已知类型列表时更优。any通过std::any_cast进行类型安全取值,错误类型会抛出异常。现代C++中应优先使用any和vari

2026-07-07 08:37:49 146

原创 Qt 容器的 COW 真相:detach 何时触发,又何时让你性能崩盘

《Qt容器的COW机制深度解析:性能陷阱与多线程安全》摘要: Qt容器的隐式共享(COW)机制在实际开发中存在诸多细节问题。本文基于Qt6环境,揭示了COW的核心机制——任何非const操作(包括operator[]和begin())都可能触发数据分离(detach),导致性能损耗;剖析了自定义类型作为QHash键的实现要点,强调qHash函数的质量直接影响哈希表性能;对比了Qt容器与STL容器的工程选择策略;重点分析了多线程环境下COW的安全边界,指出detach操作的非原子性可能导致线程安全问题,建议对

2026-07-07 08:33:29 171

原创 RK3506 外设 bringup:搓 50 行 patch 点亮 RK3506 的 I2C×3 + UART2

本文介绍了如何通过约50行补丁代码点亮RK3506芯片的I2C和UART2外设功能。由于这些引脚通过RMIO(remappable IO)交叉开关而非标准iomux寄存器,主线Linux的pinctrl驱动无法识别。解决方案包括: 为pinctrl驱动添加RMIO支持 修改设备树配置 从厂商代码移植rockchip_set_rmio函数 补丁实现了: I2C0/1/2三总线支持 UART2串口功能 通过PMU GRF控制RMIO交叉开关 保持对其他SoC的兼容性 验证结果显示所有外设功能正常工作,为后续触摸

2026-07-06 09:43:29 317

原创 Cinux: mini-kernel 装上 PMM:位图分配器从 0 到 first-fit 全过程

Cinux PMM: 位图物理内存管理器的实现与优化 本文详细介绍了Cinux mini-kernel中物理内存管理器(PMM)的设计与实现过程。PMM通过位图管理4GB物理内存空间,每4KB页面对应一个bit位,使用128KB位图实现内存分配与回收。设计采用"先全占用再释放"的安全策略,在初始化时遍历E820内存映射,标记可用区域,并保护内核和低1MB关键区域。实现了基础的first-fit分配算法,通过alloc_page()和free_page()接口提供服务。文章还探讨了利用链接器符号获取内核大小、

2026-07-06 09:25:15 498

原创 input_report_key + input_sync:按键事件的正确报告姿势

Input子系统事件报告机制解析 本文深入讲解了Linux Input子系统中的事件报告机制,重点分析了按键事件(input_report_key)和同步事件(input_sync)的正确使用方法。 核心内容包括: 底层报告函数input_event()的参数说明和注意事项 针对按键事件的便利宏input_report_key()的使用方法 必须调用input_sync()来标记事件批处理结束的原因 标准按键代码的定义位置和使用规范 实际驱动中事件报告的完整流程和关键细节 常见错误模式:忘记设置keybit

2026-07-05 09:53:16 202

原创 使用std::optional告别魔数值语义,优雅的表达可能有效

本文介绍了C++17引入的std::optional类型,用于优雅地表达可能存在或不存在值的场景。文章首先指出传统方案(特殊值、裸指针、pair)的缺陷:类型签名无法明确表达"可能没有值"的语义,容易引发错误。随后详细讲解了optional的构造、检查与访问方法,重点推荐使用value_or()处理空值情况。文章还分析了optional的内存布局,指出其额外开销主要来自内部的bool标志位。最后对比了optional与指针的语义差异,强调optional是值语义,持有完整对象而非引用。通过使用optiona

2026-07-05 09:43:56 228

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

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

2026-07-04 08:58:27 234

原创 浅谈QString的性能话题:隐式转换、零拷贝与 Qt6 SSO

文章摘要 本文深入探讨了Qt中QString的性能优化技巧,重点分析了隐式转换、零拷贝和Qt6的SSO特性。主要观点包括: 隐式转换陷阱:字符串字面量的Latin-1转换、UTF-8转换开销和函数参数临时对象构造会带来性能损耗。 优化方案: 使用QStringLiteral实现编译期字符串优化 采用QStringView实现零拷贝字符串操作 利用QStringBuilder优化字符串拼接性能 Qt6的SSO特性:短字符串(约60字节内)直接存储在栈空间,减少堆分配和引用计数管理,提升短字符串操作性能。 常见

2026-07-03 08:43:01 231

原创 不只是 safer union!聊聊std::variant

本文介绍了C++17中引入的std::variant作为union的现代替代方案。文章首先分析了传统union的缺陷,包括类型不安全、无法自动管理对象生命周期等问题。然后详细讲解了std::variant的基本用法、构造赋值方式和三种访问值的方法。重点介绍了std::visit访问者模式,展示了如何通过重载集合处理不同类型的值,并讨论了variant在替代运行时多态方面的优势。文章通过对比传统虚函数实现的多态,展示了variant在栈上存储值、避免虚函数调用开销的特点。

2026-07-03 08:35:55 171

原创 Cinux: 加载第一个内核:从 bootloader 跳进 C++

这篇文章摘要介绍了Cinux操作系统从bootloader跳转到C++内核的关键技术实现。主要包含以下内容: 系统当前进展:已完成从MBR到64位长模式的引导,准备加载第一个C++内核。 关键技术点: 实模式下完成BIOS E820内存查询和内核ELF加载 设计BootInfo结构(824字节)作为bootloader与内核的交接数据结构 实现高半内核地址映射(0xFFFFFFFF80020000) 关键内存布局: 0x5000:物理内存图 0x7000:BootInfo交接结构 0x20000:内核ELF

2026-07-02 08:20:02 242

原创 RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设

RK-Forge项目开源,基于RK3506芯片实现主线Linux(7.1)+U-Boot启动。本文介绍外设系列开篇,聚焦Ethernet/SPI/MMC三个"纯接线"外设的移植与验证。通过三层验证(T1/T2/T3)确保外设功能完整,并强调对比vendor镜像的同板验证方法。Ethernet双口验证中发现网线插错接口问题;SPI顺利通过基础验证;MMC/SD经历-110错误排查,最终发现是SD卡接触不良导致。项目提供完整补丁库、差距报告及教程,所有资料已在GitHub开源。

2026-07-02 08:03:16 189

原创 Input 子系统架构:Core、Handler、Driver 三层是怎么协作的

这个仓库已经开源!所有教程,主线内核移植,跑新版本imx-linux/uboot都在这里,或者一起来尝试跑7.1的Linux!欢迎各位大佬观摩!喜欢的话点个⭐!这个仓库仍然在维护,只是最近在忙隔壁项目!另外,全职的H618 h618_forge也开了,一样的对齐RK-Forge,主要是HDMI的驱动,搞了好一会~仓库地址:https://github.com/Awesome-Embedded-Learning-Studio/imx-forge。

2026-07-02 07:50:14 226

原创 强类型 typedef:让编译器帮你拦截参数传反的 bug

强类型typedef:编译期类型安全 本文介绍了C++中通过"强类型typedef"技术解决参数误用问题的方法。传统typedef和using创建的类型别名无法防止语义不同但底层类型相同的数据被错误混用。 核心解决方案是Phantom Type模式,使用模板参数标记不同类型: 定义空标签结构体(如WidthTag, HeightTag) 创建StrongInt模板包装器,将标签作为模板参数 通过模板特化生成完全不同的类型 实现的关键点: 零运行时开销,仅利用编译期类型检查 支持常见运算操作但限制类型混用 提

2026-07-01 08:08:34 180

原创 深入 Qt 信号与槽机制:五种连接方式与潜在陷阱

入门篇里我们一起搞定了信号槽的基本连接姿势——新式函数指针语法、Lambda 槽函数、多槽连接、基础断开,这些够我们把代码跑起来了。说实话,单线程、UI 逻辑简单的项目,入门篇确实覆盖了 80% 的场景。但工程项目和 Demo 之间的差距就藏在剩下那 20% 里——多线程 BlockingQueuedConnection 死锁、Lambda 捕获已 deleteLater 的对象导致偶发崩溃、单元测试里信号验证不可靠……光知道 connect 和 emit 远远不够。

2026-07-01 08:03:12 206

原创 RK-Forge:为我们移植的Linux 7.1 补上那块属于我们的板级设备树

摘要: 本文记录了为RK3506芯片移植主线Linux 7.1内核的关键步骤,重点在于补全缺失的板级设备树(DT)。虽然主线内核已包含RK3506的时钟、复位等基础驱动,但缺少完整的SoC和板级设备描述。作者从厂商SDK中提取基础DT内容,适配主线内核要求,并解决了三个主要问题:SPI-NAND读取错误(通过降低频率临时解决)、内核自覆盖(调整加载地址)、串口输出异常(修正波特率配置)。最终成功实现主线Linux启动至控制台,虽然因未配置根文件系统而以panic告终,但验证了从U-Boot到内核的完整主线启

2026-06-30 09:40:37 433

原创 区别x86 OS, 我们跨进长模式!:别只抄那段汇编——顺序、页表与那些三重故障

这篇文章详细介绍了如何从32位保护模式(PM)切换到64位长模式(long mode)的过程。以下是关键要点总结: 目标:通过搭建临时分页系统,按照特定顺序设置控制寄存器,最终进入64位长模式。 准备工作: 在物理地址0x1000-0x3000搭建三级页表(PML4/PDPT/PD) 使用2MB大页进行恒等映射(虚拟地址=物理地址),覆盖前8MB空间 切换步骤: 设置CR3指向PML4基址 启用CR4.PAE(物理地址扩展) 设置EFER.LME(长模式使能) 加载64位GDT 启用CR0.PG(分页) 远

2026-06-30 09:29:04 320

原创 告别 C 风格 enum 的三宗罪:enum class 强类型枚举实战

摘要 文章深入剖析了传统C风格枚举(enum)的三大缺陷:隐式整数转换导致类型不安全、命名空间污染引发冲突、无法前向声明造成依赖问题。针对这些问题,C++11引入的强类型枚举(enum class)提供了系统解决方案:通过作用域隔离确保枚举值必须通过Enum::Value访问,禁止隐式转换强制类型安全,允许指定底层类型支持前向声明。文章还详细展示了如何为enum class实现位运算操作,包括运算符重载和辅助函数设计。这些改进使enum class成为现代C++中更安全、更模块化的枚举实现方式,特别适合嵌入

2026-06-29 09:23:49 199

原创 不止三件套:QObject 属性系统全关键字与运行时反射

摘要 本文深入解析了Qt属性系统的完整机制,重点介绍了Q_PROPERTY宏中常被忽略的关键字及其应用场景。内容包括: Q_PROPERTY的完整语法解析,包括RESET(属性重置)、STORED(持久化控制)、CONSTANT/FINAL(语义标记)、DESIGNABLE/SCRIPTABLE(可见性控制)和USER(主属性标记)等关键字的用途。 MEMBER关键字的使用方式及其适用场景,对比了与READ/WRITE模式的区别和优劣。 Q_ENUM与属性系统的联动机制,展示了枚举类型在元对象系统中的使用方

2026-06-29 09:12:59 181

原创 从零手搓一个 Qt 自定义控件:会渐变、会呼吸的 StatusLed 状态灯

本文介绍了一个自定义Qt控件StatusLED的实现过程,该控件具有以下特点: 支持四种状态(正常/警告/错误/离线)并实现平滑颜色过渡 提供三种闪烁模式(不闪烁/开关式闪烁/呼吸式闪烁) 采用三条独立的动画通道(颜色过渡、呼吸效果、开关闪烁) 实现完整的Q_PROPERTY属性系统,支持动画和Qt Designer 核心设计思路是将显示效果分解为三个独立动画:颜色过渡动画修改当前颜色,呼吸动画控制亮度因子,开关闪烁定时器控制可见性。在paintEvent中将这些效果合成最终显示效果。文章详细介绍了从绘制带

2026-06-28 13:21:55 394

原创 为什么所有输入设备都该走 Input 子系统?Linux 按键驱动统一方案入门

本文介绍了Linux输入设备驱动的标准解决方案——Input子系统。作者通过对比自研字符设备驱动的局限性(兼容性差、管理麻烦、事件格式不统一),阐明了Input子系统的优势:统一API、自动设备节点管理、标准事件格式。文章详细解析了Input子系统的三层架构(驱动层/核心层/Handler层),核心数据结构input_dev,以及从硬件中断到用户空间事件的工作流程。通过对比表格展示了Input子系统相较字符设备的优势,并提供了设备树配置示例。最后指出Input子系统是处理键盘、鼠标等输入设备的"正统"方式,

2026-06-28 12:44:16 223

原创 快步跑进 32 位保护模式——Cinux 开发日志

如果上面的内容,对您的学习和实际的开发哪怕有一丝帮助,都是笔者极大的荣幸!喜欢的话,麻烦小小的赏一个 ⭐(QAQ)。自己的知识仍不精湛,文章必然还有很多错误,还请各位大佬批评斧正!我们在实模式里把 BIOS 能蹭的服务都蹭完了:读盘、开 A20、配 VESA、存 framebuffer 参数。这一章,我们要和实模式告别——建出 Cinux 的第一张 GDT,拨动CR0上的一个开关,再用一句远跳,让 CPU 真正跨进 32 位保护模式。跨过去之后,BIOS 就再也叫不应了。

2026-06-27 10:04:03 463

原创 浅论 C++ 的函数式编程

本文探讨了C++中的函数式编程特性,重点介绍了高阶函数和函数组合两种核心模式。高阶函数通过接受或返回函数实现策略定制化,文章展示了重试机制和过滤器生成器的实现示例。函数组合部分则演示了compose和pipe操作符的实现,以及如何通过可变参数模板实现多函数组合。这些技术利用C++11/14的lambda表达式和类型推导能力,将函数式编程思想融入C++开发中,使代码更具表达力和灵活性。文章还预告了C++20 Ranges库将带来的更强大的函数式编程支持。

2026-06-27 09:42:22 311

原创 从Sprite Batching到DirectWrite纹理化 :通用GUI编程技术Windows传统部分完结篇

摘要 本文介绍了Windows平台下GUI编程中2D精灵渲染的核心技术——Sprite Batching(精灵批处理)。通过将使用相同纹理的多个精灵合并到同一顶点缓冲中,显著减少Draw Call次数,提升渲染效率。文章详细讲解了正交投影矩阵在2D渲染中的应用、动态顶点缓冲的使用技巧,以及如何通过D3D11与Direct2D/DirectWrite的互操作实现高效文字渲染。该技术是构建游戏UI、粒子系统等2D元素的基础,适用于需要高性能GUI渲染的场景。作者已开源相关教程代码库,涵盖Win32图形栈的完整实

2026-06-27 09:19:35 200

原创 std::function 到底贵在哪?类型擦除、SBO 与零开销回调设计

std::function 的性能与设计权衡 std::function 通过类型擦除实现统一存储各种可调用对象,其代价主要体现在: 类型擦除机制:基于虚函数调用实现,需要间接调用和动态分派 小对象优化(SBO):内部缓冲区减少堆分配,但增加存储空间(32-64字节) 性能权衡:相比直接调用有额外开销,但提供统一接口的便利性 设计回调系统时,需要在类型安全与性能间权衡: 需要通用性时使用 std::function 追求极致性能可用模板+lambda实现零开销回调 不同编译器实现的SBO策略差异较大,GCC

2026-06-26 10:10:32 479

原创 主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约

RK3506主线U-Boot移植实战:跨过闭源RKbin的三道坎 开源项目rk-forge成功在冷门芯片RK3506上运行主线U-Boot(2026.07-rc4),核心突破在于与闭源启动组件(rkbin)的适配过程。文章揭示了三个关键技术点: FIT镜像结构复刻:必须严格仿照厂商FIT格式(optee@0x1000 + uboot@0x200000),仅替换U-Boot二进制,否则SPL会因结构不匹配报错; 地址对齐陷阱:主线U-Boot的TEXT_BASE(0x800000)与厂商预设(0x200000

2026-06-26 09:31:18 606

原创 嵌入式Linux:按键消抖与内核同步:从消抖算法到自旋锁/等待队列一次讲透

嵌入式Linux按键驱动:消抖与同步机制详解 本文深入探讨了嵌入式Linux下按键驱动的两个核心技术:按键消抖算法和内核同步机制。文章首先介绍了消抖的核心思想——延时20ms等待机械抖动结束,然后详细分析了工作队列处理函数的实现步骤: 使用msleep_interruptible(20ms)等待抖动稳定 读取GPIO稳定状态 通过状态比较过滤无效抖动 更新状态并唤醒等待队列 统计抖动次数验证消抖效果 文章还解释了为何使用schedule_work而非schedule_delayed_work,并提供了完整的

2026-06-25 20:06:07 184

原创 Win32 桌面实战:滚轮、无边框拖拽、限制窗口与消除闪烁(4 个高频系统消息)

Win32 桌面开发实战:4个高频系统消息处理 本文深入讲解了Win32开发中四个关键系统消息的处理方法: WM_MOUSEWHEEL:处理鼠标滚轮事件,包括滚轮增量处理(WHEEL_DELTA)、坐标转换和系统滚动设置获取。 WM_NCHITTEST:实现无边框窗口的拖拽功能,通过命中测试将客户区部分区域伪装为标题栏(HTCAPTION),并支持窗口边缘缩放。 WM_GETMINMAXINFO:限制窗口最小尺寸,防止窗口被缩放到过小。 WM_ERASEBKGND:消除窗口闪烁问题,通过正确处理背景擦除消息

2026-06-25 10:35:15 372

原创 x86 上电后的第一个 512 字节:实模式引导到底在干什么

这篇文章介绍了x86计算机上电后实模式下的引导过程。主要内容包括: BIOS启动后会加载磁盘第一个扇区(512字节)的MBR代码到内存0x7C00处执行 MBR的主要任务是设置段寄存器、建立栈、加载第二阶段代码(Stage2)到0x8000并跳转 Stage2负责在进入保护模式前完成关键初始化工作: 开启A20地址线 通过BIOS VESA接口设置1024×768图形模式 保存framebuffer信息到0x6400供内核使用 这些工作必须在实模式下完成,因为BIOS服务只能在实模式下调用 最后系统会显示引

2026-06-24 09:23:54 332

原创 Qt 动画框架入门:用 QPropertyAnimation 让界面动起来

本文介绍了使用Qt动画框架(特别是QPropertyAnimation类)实现界面动画效果的方法。主要内容包括: QPropertyAnimation的基本用法:通过指定目标属性、起止值和持续时间,实现属性值的平滑过渡动画。支持所有Q_PROPERTY声明的属性,包括内置属性如geometry、pos、windowOpacity等。 关键API详解:setDuration()设置动画时长,setStartValue()/setEndValue()设置起止值,start()启动动画。可通过QAbstractA

2026-06-23 08:05:47 326

原创 从 C++14 到 C++20:泛型 Lambda 的底层机制与模板 Lambda 实战

摘要 本文系统讲解了C++14到C++20中泛型Lambda和模板Lambda的核心机制与实战应用。主要内容包括: C++14泛型Lambda通过auto参数实现模板化,底层被编译为带模板operator()的闭包类型,每个auto对应独立模板参数。 C++17的if constexpr可在Lambda内部实现编译期条件分支,根据类型特征选择不同代码路径,未满足分支会被丢弃。 C++20模板Lambda引入显式模板参数<typename T>语法,解决了泛型Lambda的类型命名、参数约束等问题,支持概念约

2026-06-22 10:25:56 296

原创 .img / .iso / .tar.gz / .ext4 到底谁是谁?一张表理清嵌入式打包与镜像格式

本文通过一张表格梳理了嵌入式开发中常见的打包与镜像格式(如.img、.iso、.tar.gz、.ext4等)之间的区别。核心观点是:能直接dd烧录整盘的只有整盘镜像(.img/.iso),其他格式需区分对待。文章将这些格式分为四类:整盘镜像(关心磁盘布局)、文件系统镜像(如ext4)、文件归档(如tar/zip)和启动专用二进制(如zImage)。重点强调了不同格式所处的层级关系及对应的操作方法,帮助开发者准确识别和使用各类文件格式。

2026-06-20 10:40:22 223

原创 SendMessage 与 PostMessage 到底差在哪?Win32 跨线程通信防死锁指南

Win32跨线程通信:SendMessage与PostMessage核心区别 执行机制不同 SendMessage:同步调用,直接执行目标窗口过程,发送方阻塞等待结果 PostMessage:异步投递,消息进入接收线程队列后立即返回 死锁风险 SendMessage跨线程使用时容易产生死锁(互相等待对方处理) PostMessage无阻塞风险,更安全适合跨线程通信 使用场景 SendMessage适合需要立即获取结果的同线程调用 PostMessage适合异步通知和跨线程UI更新 其他变体 SendNoti

2026-06-20 10:04:46 361

原创 嵌入式Linux:镜像、分区与文件系统:.img 到底是什么

本文解释了.img文件的本质与结构,它不是简单的文件夹压缩包,而是整块存储设备的完整镜像。文章通过分层结构阐述其组成:整盘设备包含分区表(如MBR),分区表下划分多个分区(如boot和rootfs分区),每个分区内建有文件系统(如ext4),文件系统里存放具体文件。重点区分了U-Boot(直接写入磁盘raw区域)与内核文件(存放在boot分区)的不同层级,并说明为何完整镜像必须写入整盘设备而非分区。最后指出理解这些层级关系对正确操作镜像文件至关重要。

2026-06-19 09:32:40 629

原创 Qt 图形视图框架入门:让图元自己管自己——现代 Qt 开发教程(新手篇)3.8

文章摘要 本文介绍了Qt图形视图框架(Graphics View Framework)的核心概念和使用方法。该框架采用三层架构设计:QGraphicsScene作为场景管理器,QGraphicsView负责渲染显示,QGraphicsItem代表可交互的图形元素。作者通过示例代码展示了如何创建场景、视图和标准图元(矩形、椭圆、文字等),并详细讲解了坐标系转换(场景坐标、视图坐标、图元坐标)和交互功能实现(拖拽、选择等)。文章强调该框架能有效管理大量复杂图形元素,避免手动处理底层交互逻辑,适合需要处理复杂图形

2026-06-19 09:22:59 375

原创 聊一下“加速键表与通用对话框”——通用GUI编程技术Win32(五十八)

本文摘要: 《加速键表与通用对话框——Win32 GUI编程技术》介绍了Win32程序中实现快捷键(加速键表)和文件对话框(通用对话框)的核心技术。文章分为两部分:第一部分详细讲解加速键表的定义方法(.rc资源语法)、加载流程(TranslateAccelerator)和消息处理机制(WM_COMMAND统一处理菜单与快捷键);第二部分将介绍通用对话框(文件打开/保存、颜色选择、字体选择等)的使用方法。教程采用C++17标准,面向Windows 10/11平台开发,强调这些基础功能对提升专业级GUI体验的重

2026-06-18 11:01:30 242

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

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

2022-09-27

空空如也

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

TA关注的人

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