-
谁说 C 语言不能面向对象?本文带你从"青铜"到"王者",彻底掌握工厂模式在嵌入式中的应用。---一、引言:那个凌晨两点的"换料"噩梦1.1 场景重现凌晨两点,你正准备关电脑下班。微信突然弹出消息——老板发来语音 ...
-
换个传感器要改100处代码?这篇文章教你用3个方法彻底解决模块耦合问题。---一、你是否遇到过这些问题?作为嵌入式工程师,最痛苦的莫过于: 硬件变更噩梦:项目要把DHT11温湿度传感器换成SHT30,结果发现数据采 ...
-
对象池模式实战:彻底解决内存碎片,实现 O(1) 的动态内存管理---【免费试读区】1. 那个跑了三天就死机的 Bug几年前我接手过一个项目,客户反馈说设备隔三差五就死机。具体症状是这样的:设备在测试台上跑得好好 ...
-
将"请求"封装成对象,实现功能的热插拔、宏命令(一键多操)以及高大上的 CLI 调试接口。---一、被"硬编码"绑架的工程师老张最近有点烦。他正在做一个智能家居面板项目,板子上有 4 个物理按键。产品经理最开始 ...
-
核心卖点:解决"资源抢占"和"重复初始化"问题,给硬件装上"防盗门"。---导语你有没有遇到过这样的诡异场景:明明代码逻辑没问题,串口终端却打印出一串"外星文"?或者,系统莫名其妙地 HardFault,查了半天发现是 ...
-
核心卖点: 打造像乐高积木一样的协议栈,让数据处理流程支持"热插拔"。---前言不知道你有没有遇到过这种情况:项目初期,你写了一个简洁的串口数据处理函数,几十行代码,逻辑清晰。三个月后,这个函数膨胀到了 ...
-
这是「嵌入式设计模式」系列的第 10 篇,也是最后一篇。我们将用观察者模式为这段旅程画上句号。---一、改不完的 UI 刷新逻辑老张最近有点烦。作为公司里写嵌入式写了十年的"老油条",他负责维护一个带 LCD 屏幕 ...
-
将"请求"封装成对象,实现功能的热插拔、宏命令(一键多操)以及高大上的 CLI 调试接口。---一、被"硬编码"绑架的工程师老张最近有点烦。他正在做一个智能家居面板项目,板子上有 4 个物理按键。产品经理最开始 ...
-
从恐慌到从容,掌握这些技巧让你成为HardFault猎人前言作为STM32开发者,相信你一定遇到过这样的场景:程序运行得好好的,突然就卡死了,调试器显示进入了HardFault_Handler。看着那一堆寄存器值,一脸茫然:"这 ...
-
在嵌入式系统开发中,定时器是最常用的功能之一。FreeRTOS提供的软件定时器机制,让我们可以在有限的硬件资源下实现几乎无限数量的定时任务。本文将深入分析其实现原理。一、为什么需要软件定时器?在嵌入式开发 ...
-
一、为什么嵌入式工程师容易遇到"能力瓶颈"?工作3年的小李最近很焦虑:每天写代码、调试硬件、加班熬夜,但总感觉自己在原地踏步。公司新来的应届生学东西很快,自己却感觉越来越吃力。这是很多嵌入式工程师的真 ...
-
写嵌入式代码这么多年,我见过太多"屎山"了。不是说写这些代码的人水平不行,恰恰相反,很多都是经验丰富的老工程师。问题在于,大家从学校里学的那套"面向过程"的思维,在项目越来越复杂的今天,已经有点力不 ...
-
这是「嵌入式设计模式」系列的第 10 篇,也是最后一篇。我们将用观察者模式为这段旅程画上句号。---一、改不完的 UI 刷新逻辑老张最近有点烦。作为公司里写嵌入式写了十年的"老油条",他负责维护一个带 LCD 屏幕 ...
-
谁说 C 语言不能面向对象?本文带你从"青铜"到"王者",彻底掌握工厂模式在嵌入式中的应用。---一、引言:那个凌晨两点的"换料"噩梦1.1 场景重现凌晨两点,你正准备关电脑下班。微信突然弹出消息——老板发来语音 ...
-
核心卖点:解决"资源抢占"和"重复初始化"问题,给硬件装上"防盗门"。---导语你有没有遇到过这样的诡异场景:明明代码逻辑没问题,串口终端却打印出一串"外星文"?或者,系统莫名其妙地 HardFault,查了半天发现是 ...
-
引言想象一下,当你按下开发板上的复位键,就像是发射了一枚火箭。在短短几毫秒内,STM32 芯片经历了一场精心编排的"启动之旅"——从沉睡中醒来,检查装备,选择路线,最终到达目的地:你的 main 函数。今天,让 ...
-
对象池模式实战:彻底解决内存碎片,实现 O(1) 的动态内存管理---【免费试读区】1. 那个跑了三天就死机的 Bug几年前我接手过一个项目,客户反馈说设备隔三差五就死机。具体症状是这样的:设备在测试台上跑得好好 ...
-
前言:一次凌晨的"小改动"引发的血案凌晨2点,测试团队发来紧急消息:生产环境出现严重bug。你紧急回滚代码,却发现问题的起因令人哭笑不得——只是修改了传感器驱动的一个参数校准逻辑,却导致整个设备控制系统 ...
-
核心卖点:解决"硬件依赖",实现"一套业务代码,随意切换底层硬件"。---写在前面嵌入式开发最让人头疼的事情是什么?不是调 Bug,不是看示波器,也不是啃芯片手册——而是换硬件。当你熬了三个月,终于把产品做稳 ...
-
状态机不是什么高深的理论,它本质上就是一种管理"程序当前该干什么"的方法。只不过很多嵌入式开发者习惯了用标志位和 if-else 硬扛,直到代码膨胀到自己都看不懂,才意识到该换个思路了。做嵌入式开发,你一定写 ...
-
做嵌入式开发的工程师,大多数是从写裸机代码起步的。一个 main 函数,几个中断,配合一堆全局变量,项目就跑起来了。功能少的时候,这套打法没毛病。但凡项目上了点规模——传感器多了、协议多了、需求开始频 ...
-
01要完成的功能任务(1)组态王与SQL数据库建立连接将数据存入数据库中;(2)使用组态王查询数据库中存储的数据并显示在列表中。02软件组态王7.5、SQL server 201603实现方法1、组态王新建工程,然后新建记录体( ...
-
嵌入式开发做久了,你一定遇到过这种场景:中断里收到一包数据,但处理逻辑又臭又长,放在中断里怕影响实时性,放在主循环里又怕丢数据。怎么办?很多人的第一反应是加个标志位,主循环里轮询处理。这招能用,但 ...
-
做嵌入式开发的朋友,大概都经历过这么一个场景:串口中断里收数据,主循环里解析协议。测试的时候一切正常,一上量产板子,数据就开始莫名其妙地丢。加了printf调试,反而更丢了。你盯着逻辑分析仪的波形,确 ...
-
写了几年嵌入式,你有没有遇到过这种情况:项目里要支持好几种传感器,每加一个新型号,就得在一堆 if-else 里再塞一段初始化代码,改到最后自己都不想看了。今天就来聊聊,工厂模式怎么帮你把这些乱糟糟的代码 ...
-
嵌入式GUI开发做到后面,拼的不是画界面的能力,而是怎么把页面组织好、让数据干净地流动起来。今天聊聊链表在这件事上能发挥的作用。写在前面做嵌入式带屏项目的朋友应该都有体会:项目初期两三个页面,随便用几 ...
-
嵌入式开发做到一定复杂度,状态管理就会成为绕不过去的坎。按键长短按、通信协议解析、电机运行控制、菜单界面切换——这些场景本质上都是状态机问题。多数人的起点是 switch-case,简单直接,但项目规模一上来 ...
-
全局变量就像公共厕所——谁都能用,但出了问题谁都不想负责。前言做嵌入式开发的朋友,多少都写过这样的代码:在某个 .c 文件里定义一个全局变量,然后在 .h 里用 extern 声明一下,哪个模块想用就 inclu ...
-
本文适合人群:嵌入式开发入门到中级工程师、对代码质量有追求的固件开发者---从一段"祖传代码"说起相信很多做嵌入式的朋友都经历过这种情况:接手一个老项目,打开 main.c,迎面而来的是一个三四百行的 while(1 ...
-
聊聊函数指针和回调机制,怎么让嵌入式代码从"牵一发动全身"变得灵活可维护。---写在前面不知道你有没有遇到过这种情况:产品经理说"把按键的功能改一下",你打开代码一看——按键处理函数里直接调了LED控制、蜂 ...
-
模块之间互相调用,改一处牵一发动全身?是时候换个思路了。写在前面做嵌入式开发的朋友,大概都经历过这样的场景:传感器采集模块拿到数据后,要通知显示模块刷新屏幕,通知存储模块写入 Flash,还要通知通信模 ...
-
二级指针大概是 C 语言里"劝退率"最高的语法之一。很多人看到 **pp 就头疼,要么完全不敢碰,要么到处乱用。这篇文章不讲教科书理论,只聊嵌入式开发中,二级指针到底什么场景下该用、什么场景下纯属自找麻烦。 ...
-
如果让你设计一个 RTOS,线程要管、定时器要管、IPC对象也要管——你怎么用一套统一的方式把它们全串起来?---RT-Thread 源码里随处可见的 rt_list_t翻开 RT-Thread 的源码,你会发现一个出镜率极高的结构体:str ...
-
状态机不是什么高深的理论,它本质上就是一种管理"程序当前该干什么"的方法。只不过很多嵌入式开发者习惯了用标志位和 if-else 硬扛,直到代码膨胀到自己都看不懂,才意识到该换个思路了。做嵌入式开发,你一定写 ...
-
在Linux内核源码中搜索rb_node,你能找到上千处引用。CFS进程调度、高精度定时器(hrtimer)、虚拟内存区域管理(VMA)、ext4文件系统的extent管理——这些核心模块无一例外地选择了红黑树。很多嵌入式工程师对红 ...
-
每次换芯片就重写驱动,这日子什么时候是个头?---一、又双叒叕换芯片了最近老朋友李工有点上火。作为干了十二年嵌入式的"老炮儿",他带的项目不下二十个,从 51 单片机到 ARM Cortex-M,从裸机到 RTOS,什么场面 ...
-
今天我们来聊聊这个话题:在嵌入式软件里,模块接口的封装到底该怎么设计?封装的核心到底是什么很多人一提封装,脑子里蹦出来的就是C++的 class、private、public。但在嵌入式C语言的世界里,我们没有这些语法 ...
-
---一、那些"改一行代码、全局崩溃"的日子做嵌入式的朋友大概都经历过这种情况:项目初期代码还算清晰,跑了几个版本迭代之后,打开 main.c 或者某个 UI 处理文件,发现里面塞满了传感器读值、状态判断、显示刷 ...
-
很多嵌入式工程师的开发流程是这样的:看完需求 → 打开编辑器 → 开始写代码。写到一半发现逻辑不对,改;改完又发现漏了个分支,再改。最后代码能跑了,但自己都看不懂了。问题出在哪?---一个让我印象深刻的教 ...
-
如果你用过RT-Thread,一定对 rt_device_find()、rt_device_read() 这些接口不陌生。不管底层是UART、SPI还是一颗ADC,上层代码写起来几乎长一个样。这背后到底藏着什么样的设计?今天我们就来一层一层拆开RT-T ...
-
做嵌入式开发这些年,有个问题几乎每个项目都会遇到:底层硬件状态变了,应用层怎么知道?---一个真实的场景假设你在做一个温控系统。底层有个温度传感器驱动,每隔一段时间采集一次温度值。应用层需要根据温度来 ...
-
很多嵌入式工程师写了好几年C语言,代码量上去了,但总觉得哪里不对——功能越加越多,代码却越来越难改。今天聊聊一个我认为嵌入式开发中最值得掌握的编程思维。---从一个真实场景说起你有没有遇到过这种情况? ...
-
嵌入式开发这些年,我见过太多项目一开始用全局变量"怎么方便怎么来",结果越写越乱,最后改一个变量牵一发动全身。今天就聊聊这个话题——数据在模块之间到底该怎么传递。从一个真实的翻车现场说起前阵子饭搭子 ...
-
第一部分:引言 —— 一个真实的"缺芯"故事假设你正在开发一款智能手表,项目进展顺利,硬件选型确定使用 A 厂家的加速度计 MPU6050。代码写得飞起,功能调试完美,眼看就要量产了。突发状况来了:供应链传来噩耗 ...
-
一个按键中断里刷了下屏幕,系统就死了。这个坑,你踩过吗?从一个"诡异"的 Bug 说起前段时间帮一个朋友排查问题。他做的是一个带触摸屏的嵌入式设备,功能很简单:按下按键,屏幕显示对应的状态信息。代码也写得 ...
-
引言在嵌入式开发中,你是否写过这样的代码:根据不同的硬件配置创建不同的对象,结果代码中充满了复杂的条件判断?// 令人困扰的对象创建逻辑void* create_sensor(int sensor_type) { if (sensor_type ...
-
一、引言:一个真实的技术困惑上周的代码评审会上,团队为一个看似简单的问题争论了半小时:"这个UART接收完成后的处理逻辑,应该用callback还是hook?"小李坚持用callback,理由是"灵活,可以随时换";老王主张 ...
-
在资源受限的MCU上,如何优雅地解耦硬件驱动与业务逻辑?本文将带你深入理解观察者模式在嵌入式系统中的实战应用。引言:当"意大利面条代码"成为噩梦相信做过嵌入式开发的工程师都有过这样的经历:项目初期,代码 ...
-
嵌入式开发圈有句老话:"能跑就行,别碰。" 但项目越做越大之后,你会发现——跑是能跑,就是谁都不敢碰了。做嵌入式的朋友应该都遇到过这样的场景:接手一个老项目,打开代码一看——满屏的位操作、宏嵌套、全局 ...
-
换个传感器要改100处代码?这篇文章教你用3个方法彻底解决模块耦合问题。---一、你是否遇到过这些问题?作为嵌入式工程师,最痛苦的莫过于: 硬件变更噩梦:项目要把DHT11温湿度传感器换成SHT30,结果发现数据采 ...