共 23 篇
本文介绍一套 1989 年 DEC 出品的 C 语言异常处理库,利用 setjmp/longjmp 模拟 try-except-finally 语义。适合想理解 C 中非局部跳转原理、或需要在无异常机制的 C 项目中做错误传播的开发者阅读。
本文介绍在纯 C 项目中用 operatorNew / operatorDelete 函数模拟 C++ new / delete 的分配与释放语义,并通过 NewHandler 回调在分配失败时回收内存后重试。适合需要在 C 代码库中引入统一内存管理入口、或希望了解 C++ 全局 operator new 底层行为的嵌入式与桌面 C 开发者阅读。
本文用 C 语言给出一个最简 LZ77 压缩与解压缩的完整示例,覆盖滑动窗口匹配、编码单元结构和窗口更新逻辑,适合想理解 LZ77 原理并动手实践的嵌入式或系统编程初学者阅读。
本文介绍 C 语言中模拟泛型模板的两种手段——基于宏 token 拼接的类型名组合,以及 C11 的 _Generic 关键字。适合需要理解 C 语言类型分发机制、或想在 C 项目中实现轻量级多类型支持的开发者阅读。
本文介绍如何在 C 语言中通过结构体嵌套和函数指针表(vtable)模拟面向对象的多态调用,适合想理解 C++ 虚函数底层机制、或在无 C++ 运行时的嵌入式项目中实现类似多态行为的开发者阅读。
本文用 IS A 和 HAS A 两个问句,帮助开发者快速区分面向对象中的继承关系与组合或属性关系,适合刚接触 OOP 设计、经常在继承和组合之间犹豫的读者。
本文介绍 Cortex-M 处理器在发生 HardFault 时,如何将异常现场(PC、LR、栈帧等)保存到 Flash 或 EEPROM,以便在难以复现的死机问题中事后定位根因。适合嵌入式开发者在工控、车载等不允许随意重启的场景下参考。
本文介绍如何利用 KEIL 分散加载文件中的 UNINIT 关键字,在 RAM 中划出一块不经过启动代码初始化的区域,使软件复位后该区域内的变量保留复位前的值。适合需要在复位后快速恢复状态、且对实时性有要求的嵌入式开发者阅读。
本文介绍在 MCU 不支持 XIP 时,如何通过 Keil 分散加载文件规划 RAM 区域,将外部 Flash 中的程序搬运到 RAM 执行,并以函数指针数组向外部程序暴露 API 接口。适合使用 ARM Cortex-M 和 Keil MDK 开发、需要加载第三方或可更新代码的嵌入式工程师参考。
介绍在嵌入式平台上将 BMP 图片存储在外部 SPI Flash 中,并通过 LVGL 的 lv_img_dsc_t 结构在运行时加载显示的完整思路,包含分块读取、BMP 头解析和常见边界问题,适合使用 LVGL 且需要节省片上 RAM 的开发者参考。