自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一路往蓝-Anbo 的博客

从8位机时代至今,我曾在大湾区折腾品牌让产品出海,如今在异国品牌家电研发岗回归初心。手握烙铁与Terminal,自嘲“只会写代码”,实则是底层热爱。每一行代码都是与世界的对话,不求惊天动地,只愿在产品中留下对技术最朴素的尊重与执着。

  • 博客(165)
  • 收藏
  • 关注

原创 Anbo-MOS 微内核怎么用?从“零依赖工具库”到“全功能微内核”

Anbo-MOS 的设计初衷不是为了成为另一个“大而全”的 RTOS 负担,而是成为你手里那把顺手的瑞士军刀。

2026-04-15 06:09:22 607

原创 MCU别再“裸奔”了,开源一套能直接跑工业项目的嵌入式全栈框架:Anbo 微内核 + 自动化工程体系

嵌入式开发老兵开源工业级全栈解决方案,包含轻量级协作式微内核Anbo-MOS和工业级应用工程Anbo-L4s5-App。核心特性:1)极简内核设计,适配STM32L4S5;2)工业级功能,包括低功耗唤醒、现场回溯系统和多任务看门狗;3)一键自动化构建,摆脱环境配置困扰;4)集成TDD测试框架,支持硬件模拟测试。项目已在GitHub开源,旨在为开发者提供可靠架构支持,避免常见开发陷阱。作者呼吁开发者参与贡献和Star支持项目持续发展。

2026-04-15 05:47:12 1355

原创 【工程视角】为什么计算机可能是中国与世界顶尖水平差距最小的行业?

中国IT行业之所以能与世界顶尖水平同步甚至局部领先,关键在于其独特的历史机遇:这是中国唯一没有"历史欠账"的行业。从个人电脑普及到互联网兴起这40年,恰逢中国改革开放,使中国工程师得以与世界同行站在同一起跑线上。IT行业的开源特性、全球通用协议、中国扎实的理工教育基础以及庞大应用场景的实战锤炼,共同造就了这一奇迹。但这一成就的根本前提是持续的开放环境,证明唯有保持与世界同频共振,才能创造更多发展奇迹。

2026-03-01 06:11:01 670

原创 第九章::揭开 CANopen 的神秘面纱——它到底干什么的?

CANopen协议解析:工业自动化设备的"通用语言" CANopen协议是解决工业设备互操作性的关键方案,其核心在于建立标准化的通信规范。协议通过对象字典(Object Dictionary)为每个数据分配唯一索引,实现设备间的无缝对接。主要通信方式包括:PDO(过程数据对象)用于高速实时数据传输,SDO(服务数据对象)确保配置参数的可靠交互,以及NMT状态机管理设备生命周期。虽然协议初期学习曲线较陡,但掌握对象字典和基本通信机制后,开发者可逐步实现从基础应用到协议栈移植的进阶。CANo

2026-04-19 04:19:19 304

原创 第八章:如何让你的 STM32 快速兼容 CANopen 设备?

本文介绍了如何让设备兼容工业标准CANopen协议的核心技巧。通过分析CANopen的"社交礼仪",提出三点关键方法:1)利用预定义ID范围识别报文类型;2)使用简化的SDO快速传输模板进行参数配置;3)通过NMT指令激活从机设备。文章强调"私有协议为主+标准协议兼容"的混合架构,只需几十行代码即可实现与第三方设备的对接,为中小型工业项目提供了经济高效的解决方案。这种灵活兼容的思路,既保持了自主协议的效率,又实现了与标准设备的互通。

2026-04-19 04:09:27 389

原创 第七章:STM32 CAN 进阶:如何处理 Bus-Off 与硬件过滤器冲突

走到这一章,你已经不再是那个“只会调库”的初学者了。物理层的抗干扰与匹配(第一章)硬件控制器的时序精调(第二章)硬件过滤器的性能优化(第三章)异步中断驱动架构(第四章)应用层协议的科学规划(第五章)多节点布网与心跳监控(第六章)异常处理与离线自愈(第七章)CAN 总线编程从来不只是关于代码的编写,它更多关于对物理确定性的追求。在工业现场,每一帧数据的丢失都可能意味着昂贵的损失。希望通过这七章的深度讲解,能帮你建立起一套完整的工控思维体系,去设计那些真正能够在工厂里稳健运行的设备。

2026-04-19 03:53:48 388

原创 第六章:多节点布网实战:心跳监控与冲突处理

本文介绍了工业CAN总线系统中保障节点可靠性的关键技术。针对节点"静默失效"风险,提出主机端节点状态监控方案:1)建立节点状态表,通过心跳机制维护在线状态;2)采用TTL计数器实现100ms周期的存活检测;3)设置ID优先级策略,确保紧急报文优先传输;4)实施分时调度避免总线过载。同时给出调试建议:使用逻辑分析仪检查ACK位、测量终端电阻、处理地线干扰等。这些措施共同构建了稳定可控的多节点网络环境。

2026-04-18 03:27:58 177

原创 第五章:设计自己的轻量级工业协议:ID 与数据结构定义

本文提出了一种名为Mini-CAN-Protocol的CAN总线通信协议,旨在解决无协议状态下总线通信混乱的问题。协议核心设计包括:1) 采用11位ID划分功能码(4位)和节点ID(7位),实现优先级管理;2) 定义五种功能码类型(紧急广播、心跳帧等)及其数据帧格式;3) 通过结构体和共用体实现数据高效组织与内存安全访问;4) 引入应用层确认机制和心跳监控,确保通信可靠性。该设计解决了节点动态管理、优先级控制和系统扩展性问题,为工业应用提供了规范的通信框架。

2026-04-18 03:22:51 340

原创 第四章:STM32 CAN基础收发编程

本文详细介绍了STM32 HAL库中CAN通信的工业级优化方案。针对发送阻塞问题,提出使用发送中断和软件FIFO队列;对于接收处理,强调必须采用中断方式配合环形缓冲区来避免数据丢失。文章还包含错误处理机制和自动恢复功能的设计要点,并总结出CAN通信的三个核心原则:配置过滤器、中断接收加环形缓冲、发送超时判断。这些方法能确保CAN总线在高负载下的可靠通信,特别适合工业应用场景。

2026-04-17 04:15:33 287

原创 第三章:过滤器(Filter)深度实战:多节点组网的“安检员”

摘要: STM32的CAN验收筛选器通过硬件过滤总线报文,提升多节点工业控制网络的效率。过滤器支持两种模式:精准匹配的列表模式和灵活的范围掩码模式。掩码模式下,通过ID与屏蔽位组合,可批量筛选特定功能码或节点ID的报文。配置时需注意ID左移5位、过滤器激活顺序等关键细节,避免全放行模式导致CPU过载。合理设计分层过滤策略(如广播指令+私有数据分离),能显著降低CPU负载,保障系统实时性。

2026-04-17 04:03:06 338

原创 第二章:STM32 bxCAN 控制器详解:从内存到总线的“中转站”

摘要: STM32的bxCAN控制器通过三大核心组件(发送邮箱、接收FIFO、验收筛选器)实现高效报文处理。发送邮箱支持3条报文缓存,优先级由ID或FIFO顺序决定;接收FIFO提供双缓冲(各3级深度),需及时读取避免溢出。波特率配置需精确计算时间份额(Tq),采样点建议75%~80%以确保稳定性。bxCAN支持四种工作模式(正常、回环、静默等),调试时可通过模式切换定位问题。初始化时需注意时钟源、启动CAN及滤波器配置(未激活过滤器将拦截所有报文)。关键参数如AutoBusOff(自动恢复)可提升系统鲁棒

2026-04-16 04:47:43 392

原创 第一章:CAN 总线的“硬核”物理层:为什么它是工业现场的定海神针?

摘要:本文深入解析CAN总线的物理层特性及其在工业应用中的优势。重点探讨了差分信号的抗干扰原理、显性与隐性状态机制,以及120Ω终端电阻的必要性。针对工业环境中的地电位差、电磁干扰等问题,文章提供了硬件选型建议和拓扑设计规范,强调物理层理解对构建稳健CAN系统的重要性。通过剖析底层原理,为后续协议设计与实战应用奠定基础。

2026-04-16 04:40:26 324

原创 第 13 章:GUI 实战——LVGL 在 STM32MP257 上的硬件加速

摘要:本章介绍如何利用STM32MP257的显示子系统将IMU数据可视化。采用轻量级LVGL图形库,通过DRM/KMS框架实现高效显示。重点包括:搭建LVGL编译环境,使用Chart组件创建实时波形图,实现IPC数据与GUI联动,以及利用VGLite API进行GPU硬件加速优化。同时提供线程安全、设备权限和刷新同步等关键问题的解决方案,最终实现低延迟、流畅的IMU数据动态可视化效果。

2026-03-01 06:15:17 745

原创 第 12 章:Linux 侧 RPMsg 用户态驱动与数据接口

本文介绍了如何在Linux应用层通过RPMsg字符设备框架获取M33处理器的数据。首先说明了rpmsg_char驱动可将M33的rpmsg-raw服务映射为/dev/rpmsg0设备节点,并给出了手动激活端点的操作步骤。随后详细展示了Linux C程序读取IMU数据的实现方法,包括打开设备、阻塞读取等关键代码。针对性能优化,提出了二进制结构体传输方案和异步poll监听方法。最后总结了常见问题如权限设置、缓冲区限制和端点冲突的解决方案,实现了从M33到Linux应用层的高效数据传输。

2026-02-23 02:14:59 828

原创 第 11 章:HSEM 硬件信号量与无锁队列——解决优先级反转

本文介绍了在STM32MP257多核系统中实现高效实时数据通信的硬件级解决方案。针对OpenAMP在高频数据传输中的性能瓶颈,重点阐述了HSEM(硬件信号量)的应用优势,包括总线级仲裁、避免优先级反转等特性。详细展示了HSEM的原子操作实现和无锁环形队列(SPSC模型)的设计方法,强调了volatile关键字、内存屏障(__DSB)和对齐要求等关键实现细节。通过硬件信号量与无锁队列的结合,实现了M33与A35核间的高效零拷贝通信,为工业级实时控制系统提供了高性能解决方案。

2026-02-23 02:13:30 532

原创 第 10 章:OpenAMP 实战——构建 M33 与 Linux 的 RPMsg 消息隧道

本文介绍了在多核系统中使用OpenAMP实现异构核间通信的方案。通过RPMsg总线协议和共享内存机制,M33核可以异步非阻塞地将IMU数据发送给A35核,避免了传统读写锁的性能瓶颈。具体实现包括:M33侧移植OpenAMP库、初始化通信端点、数据格式化发送;Linux侧配置内核驱动支持,通过设备节点接收数据。文中还指出了调试中的关键注意事项,如资源释放顺序、内存属性匹配和地址对齐要求。该方案成功建立了M33采集数据与A35处理显示之间的高效通信通道。

2026-02-22 03:45:41 654

原创 第 9 章:Linux 设备树 (DTS) ——屏蔽与独占外设

本文介绍了在异构系统中如何通过修改Linux设备树实现A35与M33处理器的协同工作。主要内容包括:1)设备树裁剪三步骤:屏蔽、预留和引用;2)实战操作:定义保留内存区域,禁用冲突外设节点(UART7、I2C2等),配置远程处理器节点;3)编译部署及验证方法;4)常见问题规避指南,如引脚冲突和时钟关闭问题。通过精确的设备树配置,确保Linux内核不会干扰M33控制的硬件资源,为后续核间通信奠定基础。

2026-02-22 03:43:58 803

原创 第 8 章:M33 领航——引导 A35 加载 U-Boot 与 Linux 内核

本文详细介绍了在STM32MP257F-DK开发板上由M33核心引导A35核心启动Linux系统的关键步骤。主要内容包括:1)M33需要完成镜像加载、设置启动向量和释放复位信号的"三部曲";2)通过配置SYSCON寄存器设置A35启动地址,操作RCC寄存器释放复位;3)实现跨核握手机制确保启动同步;4)提供DDR就绪检查、中断向量配置等常见问题的调试技巧。该流程展示了异构多核系统中安全启动的实现方法,最终实现M33和A35双核协同工作的目标。

2026-02-21 03:25:57 615

原创 第 7 章:内存地图 (Memory Map) 深度设计——DDR 与 SRAM

如果说 RIF 是外设所有权的“物权法”,那么就是多核系统的“领土疆域图”。在 STM32MP257 这种异构系统中,M33 核和 A35 核共享物理内存地址空间,但如果不划清界限,就会发生“踩踏事件”,导致系统随机崩溃或内核死锁。本章我们将手把手编写链接脚本(Linker Script),并在物理层面上彻底完成内存的割裂。

2026-02-21 03:24:24 852

原创 第 6 章:GPIO 与外部中断——M33 掌控下的 LED 与按键响应

本文探讨了STM32MP257F-DK异构多核架构中GPIO所有权与中断抢占的关键问题。通过RIF和EXTI实现M33核的硬实时控制,确保LED和按键的毫秒级响应不受Linux(A35)影响。详细介绍了硬件资源分配、RIF锁定GPIO控制权、LED初始化、EXTI中断配置及消抖逻辑实现,并分析了多核GPIO冲突的解决方案。最终建立了一个在RIF保护下、具有确定性响应的基础实时交互系统,即使Linux侧出现异常也能保证M33核的可靠运行。

2026-02-20 02:13:10 736

原创 第 5 章:I2C 深度实战——M33 接管 ST 六轴 IMU (LSM6DS3TR)

本文详细介绍了如何在STM32MP257F-DK开发板上通过M33核控制LSM6DS3TR-C六轴惯性传感器。主要内容包括:硬件链路解析(I2C2总线配置)、I2C核心设置(400KHz快速模式)、IMU驱动层实现(寄存器定义、初始化及数据读取)、高效数据采集方案(12字节连读)以及原始数据处理方法。重点解决了I2C总线锁死、RIF权限错误等常见问题,并提供了完整的调试验证流程。通过M33核独立控制传感器,确保了在Linux负载过高时仍能实现微秒级精度的运动数据采集。

2026-02-20 02:11:27 568

原创 第 4 章:串口驱动进阶——GPDMA + Idle 中断实现变长数据流接收

本文介绍了在STM32MP257上实现工业级串口驱动的方案。针对传统HAL_UART_Receive_IT在多核通讯和变长数据接收时的不足,提出了结合GPDMA和UART空闲中断的创新方法。通过配置GPDMA接收通道和UART7的IDLE中断,实现了零拷贝、非阻塞的变长数据接收。文章详细阐述了中断服务函数的实现逻辑,并提供了双缓冲区优化和避坑指南等实用技巧。该方案显著提升了M33核的实时性能,为多核通讯提供了可靠的数据传输基础。

2026-02-19 02:07:28 618

原创 第 3 章:RIF 资源隔离框架实战——划分多核“领土”

摘要:本文介绍了STM32MP257芯片中RIF(资源隔离框架)的核心机制及其配置方法。RIF通过RISCF、RIMC和RISAF三个子模块实现对硬件资源的严格划分,防止多核环境下的非法访问。文章详细说明了如何为M33核配置外设所有权(如UART7、I2C2)和总线主设备(DMA通道),以及内存隔离设置。重点阐述了关键寄存器的配置方法、初始化函数实现和常见调试技巧,强调RIF配置的"先入为主"特性,必须在系统启动早期完成资源分配。通过正确配置RIF可确保M33核合法访问其分配的资源,提高

2026-02-19 02:05:32 822

原创 第 2 章:全能开发环境与交叉编译工具链构建

本文详细介绍了搭建STM32MP257异构芯片开发环境的关键步骤。首先强调必须使用Linux系统(推荐Ubuntu 22.04),并安装基础构建工具。重点说明需要配置两套编译器:arm-none-eabi-gcc用于M33核心开发,aarch64-linux-gnu-gcc用于A35核心开发。文章还介绍了获取官方SDK、编写通用Makefile模板、使用STM32ImageAdd.py工具为镜像添加头部签名等核心操作。最后提供了固件部署方法和常见问题解决方案,帮助开发者建立完整的开发环境。

2026-02-18 06:30:34 656

原创 第 1 章:M33 领航——STM32MP257F-DK 硬件解密与启动逻辑重构

本文介绍了STM32MP257F-DK开发板的异构多核启动新范式,重点阐述了让Cortex-M33核心先于A35核心启动的技术方案。文章详细解析了硬件BootPin配置方法、RIF资源隔离框架的概念,并提供了完整的开发环境搭建指南。通过实战演示了如何编写M33核心的启动代码,包括汇编启动、RIF权限配置、串口初始化等关键步骤,最终实现M33独立运行并输出调试信息。这种启动模式的优势在于能快速初始化实时外设,无需等待Linux系统加载。文中还包含常见问题排查指南,为开发者提供实用的参考。

2026-02-18 06:26:25 865

原创 【工程视角】人形机器人从春晚跳舞到废墟救援:除了掌声,它们还需要一颗“心”

所以,当我们为春晚机器人的舞姿鼓掌时,请不要吝啬赞美,因为那是我们造出了强壮、平衡、且听话的“四肢”。但如果问它们离救灾还有多远,我的个人理解是:还需要蛮长的时间。我们需要给它装上一双能看穿迷雾的“眼睛”(感知),一颗能独立思考的“大脑”(决策),以及一颗持久跳动的“心脏”(电池)。这条路很难,但我相信,终有一天,它们会从“表演者”变成真正的“守护者”。不再只是为了博我们一笑,而是为了带我们回家。

2026-02-18 03:57:48 1114

原创 【工程视角】AI 会干掉软件工程师吗?

AI时代下,程序员不必恐慌。历史经验表明,从手工汇编到高级语言,从算盘到电算化,技术进步从未消灭职业,而是推动从业者向更高层次发展。AI将代码编写变得廉价,但系统复杂度将指数级增长,需要更专业的架构设计和底层把控。特别是嵌入式领域,物理世界的调试和软硬结合仍是AI盲区。工程师应专注于提升架构思维和原理理解,成为AI的"指挥官"。当前关键是从代码实现转向系统设计,这正是人类不可替代的优势所在。

2026-02-14 04:12:49 600

原创 【工程视角】给所有“不敢停”的工程师:有一种高级的进阶,叫“主动降频”

摘要:本文反思了IT行业普遍存在的"暴力超频"工作模式,指出盲目追求速度会透支健康和技术热情。作者分享个人经验,强调真正的成长源于留白时光而非持续忙碌,建议工程师要学会"主动降频",通过休息和爱好来积蓄力量。资深工程师的竞争力不在于手速,而在于经验厚度和系统思维。文章呼吁在快节奏中保持清醒,通过培养生活爱好来获得持久动力,做一个有思想的工程师而非代码机器。(149字)

2026-02-14 04:10:59 459

原创 第 10 篇:装饰器模式 (Decorator) —— 给数据流“加特技”

嵌入式C语言中的装饰器模式应用 本文介绍了装饰器模式在嵌入式C语言中的实现方法。通过构建IStream标准接口,实现了UART基础组件与加密、日志等装饰器的分层组合。装饰器模式避免了直接修改底层代码,通过包裹(wrap)方式动态添加功能,提高了代码复用性和扩展性。文章详细展示了接口定义、基础组件实现、装饰器编写以及自由组合的完整流程,并分析了内存与性能开销。该模式适用于协议栈、中间件等需要分层处理的场景,能够实现类似Java I/O流式的数据处理管道。

2026-02-02 13:00:42 246

原创 第 9 篇:代理模式 (Proxy) —— 硬件的“防火墙”

/ 强制把缓存刷入硬件} IStorage;

2026-02-01 04:00:59 411

原创 第 8 篇:适配器模式 (Adapter) —— 换芯片不换代码

本文介绍了适配器模式在嵌入式UI开发中的应用。适配器模式通过引入中间层,解决了UI业务代码与硬件驱动之间的接口不兼容问题。文章以OLED和LCD屏幕驱动为例,展示了如何定义标准图形接口(IGraphics),并编写适配器将不同厂商的硬件API转换为统一接口。这种方法提高了代码的可移植性,使UI库可以独立于具体硬件实现。文章还分析了适配器的性能开销,并探讨了优化技巧及变种应用,如默认适配器和硬件抽象层(HAL)。适配器模式就像电源转换插头,实现了业务逻辑与硬件细节的解耦。

2026-02-01 03:58:45 529

原创 第 7 篇:命令模式 (Command) —— 操作的“录像带”

本文介绍了C语言中命令模式的实现方法,通过将函数调用封装为结构体对象,解决了硬编码耦合、功能复用等问题。核心是将"动作"抽象为包含函数指针和参数的Command结构体,配合命令队列实现异步执行、宏录制等功能。文章详细展示了命令模式的三要素:命令对象、调用者队列和接收者模块,并提供了完整代码示例。此外,还分析了内存管理策略和性能影响,并延伸讨论了撤销操作、序列化存储和定时执行等高级应用场景。这种设计显著提升了代码灵活性,特别适用于需要解耦、异步处理或支持复杂交互的系统。

2026-01-31 05:11:56 240

原创 从35岁危机到32岁离世: 写给所有正在“过热运行”的IT工程师

《32岁工程师猝死引发的反思》摘要:一位32岁工程师猝死,临终前仍惦记工作。这起悲剧引发了行业对过度工作的深刻反思。文章指出,当代职场环境如同"暴力超频",将人置于"狂暴模式",导致健康优先级被篡改。作者呼吁工程师们要为自己安装"散热器"——通过适当休息、培养爱好来保护身心健康。真正的技术突破往往发生在放松时刻,而生活爱好则是生命的"恢复分区"。文章强调,人不应沦为"耗材",而要做"有思想的

2026-01-31 05:07:54 663

原创 第 6 篇:模板方法模式 (Template Method) —— 万能驱动骨架

本文介绍了模板方法模式在传感器驱动开发中的应用。该模式通过定义标准流程框架(上电-延时-读取-断电),将具体操作交由子类实现,解决了代码重复、维护困难等问题。以温湿度传感器SHT30为例,展示了如何通过虚表结构实现硬件操作与标准流程的解耦。该模式显著减少了代码量,提升了安全性(如自动断电机制),同时分析了其内存开销和可能的优化方向(如异步非阻塞改造)。这种架构设计在嵌入式开发中具有广泛适用性,特别适合需要统一管理多个传感器的场景。

2026-01-30 14:32:42 79

原创 第 5 篇:责任链模式 (Chain of Responsibility) —— 协议栈的流水线

本文介绍了责任链模式在嵌入式通信协议解析中的应用。针对传统"面条式"代码维护困难的问题,提出将各协议解析器解耦为独立处理单元,通过链表形式串联。文章详细展示了模式实现:定义抽象处理者接口、实现具体协议处理器、构建链表管理器。该方案具有内存占用低(O(1)栈空间)、可动态扩展、支持优先级调整等优势,并探讨了性能优化策略及动态插件系统等扩展应用,为嵌入式通信协议处理提供了清晰的架构方案。

2026-01-30 14:30:56 108

原创 第 4 篇:策略模式 (Strategy) —— 算法的热插拔艺术

本文介绍了策略模式在C语言中的实现方法,通过函数指针和结构体模拟面向对象的多态特性。针对嵌入式开发中常见的协议适配问题,提出将算法封装为独立模块,利用虚表机制实现动态切换。文章详细展示了从传统条件判断到策略模式的改造过程,包括接口定义、具体策略实现和业务调用方式,并分析了内存占用和性能影响。这种设计提高了代码的可扩展性和可维护性,支持运行时动态切换算法,同时便于单元测试的模拟实现。策略模式特别适合嵌入式系统中需要灵活应对不同客户需求的场景。

2026-01-29 15:22:44 244

原创 第 3 篇:双缓冲模式 (Double Buffering) —— 榨干 DMA 的性能

摘要:本文探讨嵌入式开发中高速数据传输的解决方案——双缓冲模式(Ping-Pong Buffer)。当ADC采样率或波特率过高时,传统单缓冲方式会导致数据丢失或CPU过载。双缓冲通过两个缓冲区交替工作,实现DMA传输与CPU处理的并行操作,解决了数据覆盖和撕裂问题。文章详细介绍了双缓冲的工作原理、代码实现(包括数据结构、中断处理和主循环逻辑),并分析了其内存开销与性能约束。同时延伸讨论了环形缓冲区、三缓冲等变种方案,以及零拷贝技术在高级协议栈中的应用。该模式以空间换时间,是处理高速数据流的有效方法。

2026-01-29 15:20:31 170

原创 第 2 篇:单例模式 (Singleton) 与 懒汉式硬件初始化

本文介绍了在嵌入式开发中使用C语言实现单例模式的方法。通过将全局变量封装为静态变量并仅暴露访问接口,解决了裸奔全局变量带来的安全隐患和初始化顺序问题。重点讲解了"懒汉式"单例的实现技巧,包括使用不透明指针隐藏结构体细节、双重检查锁定防止并发初始化,以及如何通过延迟加载加速系统启动。文章还对比了懒汉式和饿汉式的适用场景,并延伸讨论了硬件寄存器封装和多例模式的应用。这种实现方式在保证资源唯一性的同时,兼顾了代码安全性和系统性能。

2026-01-28 15:45:22 126

原创 第 1 篇:对象池模式 (Object Pool) —— 裸机下的动态内存革命

摘要:嵌入式开发中频繁malloc/free会导致内存碎片和性能问题。对象池模式通过预分配固定大小内存块和位图管理,实现O(1)时间复杂度的内存分配/释放。相比malloc,对象池具有无碎片、确定性执行时间、更低内存开销等优势,尤其适合实时系统。文章详细解析了基于位图的对象池实现原理,包括核心数据结构、高性能索引算法和关键API设计,并对比了空间/时间开销,最后讨论了零拷贝队列、调试水印等进阶用法。该模式能显著提升嵌入式系统的内存使用效率和稳定性。

2026-01-28 15:42:25 333 1

原创 第九章:数据持久化篇 —— 带磨损均衡的 Flash 存储管理

本文介绍了一种高可靠、长寿命的Flash参数存储系统设计方案。针对Flash擦写寿命有限的痛点,采用日志追加模式(Log-structured Append)将Flash页视为笔记本,通过顺序写入而非原地覆盖的方式,将STM32G0的Flash寿命从1万次提升至64万次。系统包含三层架构:定义8字节对齐的配置对象、实现智能读写驱动的底层操作,以及管理出厂默认值和保存防抖的业务逻辑。最终将该方案应用于温控器系统,实现了断电不丢失的参数记忆功能,使代码具备商业级产品的核心素质。

2026-01-27 15:24:43 202

空空如也

空空如也

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

TA关注的人

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