- 博客(459)
- 资源 (1)
- 收藏
- 关注
原创 简易嵌入式日志系统设计思路!
本文介绍了一个专为嵌入式系统设计的轻量级日志系统实现方案。该系统采用环形缓冲区结构,支持同步/异步两种输出模式,异步模式下50条日志耗时仅17ms(同步模式472ms)。具备5级日志过滤(ERROR/WARN/INFO/DEBUG/VERBOSE)、格式化输出、自动时间戳和源码定位功能。核心设计遵循静态资源分配、最小接口抽象(仅需实现输出和时间戳两个平台函数)和FreeRTOS兼容性原则,在保证功能完备性的同时保持代码精简。特别适合资源受限的嵌入式环境进行调试和问题追踪。
2026-01-28 00:42:05
348
原创 嵌入式 Linux 必知:几个超实用代码小片段
本文分享了5个嵌入式Linux项目中高频使用的C语言代码片段,用于系统排障和设备信息获取。内容包括:1)通过/proc/meminfo获取内存总量和可用内存;2)从sysfs读取CPU温度;3)使用fseek/ftell获取文件大小;4)通过gettimeofday获取毫秒级时间戳;5)利用ioctl获取网卡MAC地址。这些代码遵循"选数据源→读取→解析→格式化输出"的通用思路,可快速集成到日志系统中,帮助定位内存泄漏、性能异常等问题。文中还特别标注了各方法的注意事项,如温度采样频率、时
2026-01-20 23:53:15
567
原创 嵌入式协议处理:流式解析 vs 一次性解析
本文对比了嵌入式通信开发中协议解析的两种方式:一次性解析和流式解析。一次性解析适用于完整帧数据,实现简单但无法处理数据分片;流式解析通过状态机逐字节处理,能有效应对粘包、断包和噪声场景,但实现较复杂。文章通过ITLV协议实例展示了两种方法的核心区别,并提供了代码实现示例,帮助开发者根据实际通信场景选择合适的解析策略。
2026-01-20 23:50:36
785
原创 Zephyr SMF实战:几百行代码实现轻量状态机!
本文介绍了如何从Zephyr RTOS中独立抽取状态机框架(SMF)并在裸机项目中应用。Zephyr SMF具有API简洁、零依赖、资源占用小等优势,核心代码仅需3个文件约500行。文章详细演示了抽取步骤:创建项目结构、复制核心文件、创建移植适配层、修改源文件,并通过一个命令解析器实例展示了SMF的具体实现方法。该框架采用Apache-2.0许可证,可自由用于商业项目。最终效果证明,SMF能有效简化状态机开发,提高代码结构化程度和可扩展性。
2026-01-10 11:00:00
720
原创 简易嵌入式自定义协议设计思路!
字节序一致性:跨平台通信必须明确字节序(本实现采用小端序)固定宽度类型:使用uint8_tuint16_t等固定宽度类型,确保跨平台一致性静态内存分配:嵌入式环境避免使用动态内存,防止内存碎片流式解析支持:实际通信中数据是流式到达的,需要状态机处理粘包/断包完善的错误处理:统一的错误码体系,便于问题定位字段含义典型长度说明IID/Index1~2 字节数据标识符,区分不同类型的数据TType1 字节数据类型(uint8、int32、string等)LLength1~4 字节。
2026-01-10 00:25:26
25
原创 通用嵌入式软件架构分层设计思想
嵌入式软件架构分层设计 摘要:本文介绍了嵌入式系统中常用的Arch-Platform-Target三层架构设计模式。Arch层处理CPU架构相关代码,Platform层提供硬件抽象,Target层实现业务逻辑。文章通过STM32+RTOS项目案例,展示了分层目录结构设计:Arch层负责启动和时钟,Platform层封装外设驱动,Target层实现业务功能。关键代码示例演示了SysTick驱动、LED封装和任务创建等分层实现,确保硬件更换时只需修改底层而不影响业务代码。OSAL层统一RTOS抽象接口,提高了代
2026-01-01 12:00:00
603
原创 嵌入式总线错误深度剖析
本文分享了嵌入式开发中总线错误的排查经验。通过对比段错误和总线错误的区别,分析了一个ARM平台上由非对齐访问引发的总线错误案例。文章详细解释了内存对齐原则和#pragma pack的作用,指出在紧凑布局下float类型非对齐访问会触发总线错误,而int类型则不会。最后给出了三种预防总线错误的实用技巧:调整结构体成员顺序、使用memcpy安全访问、限制#pragma pack作用范围。文章强调x86能运行不代表ARM也能运行,提醒开发者要谨慎使用#pragma pack。
2025-12-31 12:00:00
776
原创 嵌入式状态机架构,一文讲透!
本文介绍了状态机在嵌入式开发中的应用。针对if-else嵌套导致的代码复杂度问题,文章首先分析了传统串口协议解析代码的缺陷,进而阐述了状态机原理(四要素和两种类型)。通过实例展示了如何用状态机重构串口接收模块,使代码更清晰可维护。文章还分析了FreeRTOS和lwIP中的状态机实现,并对比了Zephyr SMF、QP/C和TinyFSM三种嵌入式状态机框架的特点和适用场景。状态机可有效管理复杂状态转换,提升代码可读性和可测试性,特别适合事件驱动的嵌入式系统开发。
2025-12-31 08:30:00
906
原创 嵌入式Linux多线程:从“能跑“到“稳定“的关键一步
本文深入探讨了并发编程的核心问题与解决方案。首先区分了并发与并行的概念,分析了竞态条件的根源,包括代码执行顺序不确定性、编译器/CPU优化及多核缓存问题。接着详细介绍了POSIX线程库三大同步原语:互斥锁(强调小粒度锁定)、条件变量(解决线程等待通知问题)和读写锁(优化读多写少场景)。针对死锁问题,文章剖析了其四个必要条件,提出了通过统一加锁顺序等方法来预防死锁。最后总结出并发编程三大原则:最小化共享、最小化临界区和统一加锁顺序,为开发者提供了实用的工程实践建议。
2025-12-30 08:43:18
394
原创 这几个嵌入式软件开源项目值得深度复刻!
本文推荐几个值得复刻的嵌入式开源项目(500-3000行代码量),包括MultiButton按键库、letter-shell命令行框架、EasyLogger日志系统等,通过"跑通→画图→重写"三遍阅读法学习其设计思想。这些项目展示了状态机、回调机制、自动注册、分层架构等嵌入式开发中的工程化设计模式,是提升代码设计能力的优质学习资源。文章还提供了项目筛选标准和循序渐进的学习路径,帮助开发者从模仿到掌握核心设计思想。
2025-12-30 08:42:06
495
原创 常见嵌入式软件崩溃类型:12种典型场景!
本文分析了嵌入式软件常见的四大类崩溃问题:段错误、内存问题、资源耗尽和并发问题。详细介绍了空指针访问、数组越界、栈溢出等段错误案例,以及内存泄漏、重复释放等内存问题。针对资源耗尽问题,讲解了文件描述符耗尽和OOM Killer机制。最后讨论了并发场景下的死锁问题。文章通过代码示例展示了各类崩溃的表现形式和根本原因,并提供了调试方法建议,如使用Valgrind和AddressSanitizer工具。这些分析有助于开发者快速定位和解决嵌入式系统中的崩溃问题。
2025-12-14 11:30:00
684
原创 一个轻量级 ESP-AT 命令解析库!
摘要: LwESP是一个轻量级ESP-AT命令解析库,通过封装AT指令为简洁的C API,简化嵌入式Wi-Fi开发。其核心特性包括跨平台性(C99标准)、模块化设计、事件驱动机制,并支持Netconn、HTTP Server等上层协议。架构分为应用层、中间件层、系统底层和ESP设备层,提供高效的数据流处理。相比传统AT指令开发,LwESP显著简化操作(如Wi-Fi连接、Web服务器搭建),但存在高级功能(如HTTPS、WebSocket)支持不足和社区规模较小的局限。适用于资源受限场景,平衡了易用性与性能。
2025-12-13 12:19:23
542
原创 热门嵌入式web服务器对比!
嵌入式Web服务器将传统Web服务移植到资源受限的嵌入式系统,基于HTTP协议提供标准接口。本文对比了6种主流方案:NGINX(高性能)、Boa(超轻量)、Thttpd(静态高效)、Mini_httpd(极简)、Lighttpd(功能全面)和Appweb(工业级)。通过内存占用、功能特性等维度分析,给出选择建议:低资源设备选Boa/Mini_httpd,中高端设备用NGINX/Lighttpd,工业场景适合Appweb。嵌入式Web服务器可有效解决无屏设备的交互问题,为调试和功能展示提供便利。
2025-12-13 12:17:03
931
原创 一个局部变量竟然自己变了!栈溢出实例分享
本文分享了一个栈溢出的典型案例。当某个状态码从正常的200变为500时,程序崩溃并报出栈溢出错误。通过分析发现,问题根源在于递归调用未设置终止条件,导致函数调用栈不断增长直至超出内存限制。这个例子展示了递归程序设计时设置正确终止条件的重要性,否则极易引发栈溢出这类经典错误。
2025-12-13 12:15:28
287
原创 嵌入式单元测试打桩实战指南
Unity单元测试框架本身不支持mock打桩功能,但可以结合其他工具实现。本文介绍了mock打桩在嵌入式开发中的应用场景,包括硬件未就绪时的代码调试、第三方接口联调障碍以及单元测试中的模块隔离需求。通过mock技术可以模拟依赖项的行为,解决开发过程中的常见困境,提高测试效率。文章将详细讲解如何在嵌入式项目中应用mock打桩技术。
2025-12-10 11:21:54
433
原创 嵌入式运维态内存泄漏检测方案?
嵌入式设备现场运行时常遇到偶现死机和内存泄漏问题。本文提出一种基于dlmalloc的轻量级运维态内存检测方案,通过mallinfo监控整体内存水位变化,并利用追踪表记录分配来源,实现非侵入式泄漏检测。该方法无需调试器或修改源码,可长期驻留设备,在真实负载下捕获缓慢泄漏,并通过日志记录未释放的内存块及其分配位置,为现场问题定位提供关键证据。
2025-12-10 11:20:31
384
原创 简易嵌入式优先级消息队列设计思路!
消息队列是解决任务间通信的有效方案,主要功能包括任务解耦、异步通信、流量削峰、优先级调度和数据完整性保障。常见的消息队列类型有FIFO队列(适用于日志记录等普通数据流)和优先级队列(适用于告警系统等需要优先处理的场景)。消息队列通过缓冲机制提高系统可靠性和性能,是分布式系统中重要的基础组件。
2025-12-09 09:18:26
670
原创 热门嵌入式web服务器对比!
嵌入式Web服务器是将标准Web服务器移植到嵌入式系统中的技术方案,基于HTTP协议实现通信,具有标准接口。这种方案为无显示屏的嵌入式设备提供了便捷的交互方式,可通过网页进行功能调试和展示。在实际工作中,嵌入式Web服务器为开发调试带来了便利,成为嵌入式系统交互的有效解决方案。
2025-12-09 09:09:25
534
原创 一个嵌入式系统的进程通信利器!
嵌入式Linux系统中的进程间通信方案包括:1)共享内存实现高效数据共享;2)消息队列提供异步通信机制;3)信号用于简单事件通知;4)管道实现单向数据流;5)套接字支持跨网络通信。这些方法各具特点,开发者需根据实时性、数据量等需求选择合适方案,确保系统高效稳定运行。
2025-11-25 17:30:00
500
原创 嵌入式设备通信序列化的正确打开方式!
保持 Protocol Buffers 强大功能的同时,将代码体积压缩到 3KB 以内,并且只需要不到 300 字节的栈空间。看起来不大,但考虑到:每秒上报 10 次数据、每次传输都要消耗宝贵的电量,累计下来,通信负担会很大。对于大部分传感器数据(温度、湿度、计数器),数值都很小,varint 能节省 50% 以上的空间。也不想使用太重的JSON,一个简单的传感器数据包,JSON 可能就要占用几百字节;,在保持 protobuf 强大功能的同时,将资源占用压缩到适合嵌入式系统的级别。
2025-11-25 08:30:00
470
原创 一个可应用于嵌入式C的轻量级单元测试框架!
Unity是一个专为C语言设计的轻量级单元测试框架,其核心目标是提供简单易用的测试功能。该项目采用简洁的设计理念,包含最小化的代码库,便于开发者快速上手。Unity支持跨平台运行,适用于嵌入式系统开发测试,帮助开发者提高代码质量和可靠性。
2025-11-24 08:29:52
728
原创 嵌入式中代码执行时间测量的几种方法!
嵌入式开发中常遇到代码优化效果难以评估和控制算法执行时间不确定的问题。本文针对两个典型场景展开讨论:一是如何量化代码优化后的性能提升,二是如何准确测量控制算法的单次执行时间,以判断其能否满足1kHz或4kHz等高频率控制周期的要求。文章将提供实用的解决方案,帮助开发者有效评估优化效果和算法实时性。
2025-11-24 08:28:00
664
原创 嵌入式中pthread条件变量怎么用?
嵌入式Linux开发中,线程同步是关键问题,常见痛点包括轮询导致CPU占用高、sleep导致响应延迟或资源浪费、以及多线程竞态条件。pthread条件变量是解决线程"等待-通知"场景的最佳方案,能让线程在条件不满足时休眠,条件满足时精确唤醒,既保证响应速度,又能最大化降低CPU资源占用。
2025-11-17 08:30:00
879
原创 一个面向嵌入式Linux C++的应用开发框架
AppKit是一个面向嵌入式Linux开发的C++14框架,旨在提升开发效率和应用健壮性。该框架提供了一套完整工具集,涵盖线程管理、定时器、文件IO、串口通信、网络通信、CAN总线、GPIO控制等嵌入式开发常见需求。通过预置的优化组件和标准化接口,AppKit帮助开发者快速构建稳定可靠的嵌入式应用系统,特别适合工业控制、物联网等领域的项目开发。
2025-11-14 11:36:41
951
原创 嵌入式轻量级命令行shell库!
摘要: LwSHELL是一款轻量级嵌入式命令行shell库,采用MIT协议开源。核心特点包括零动态内存分配、流式字符处理、支持引号参数和转义字符,特别适合资源受限的嵌入式系统。库仅包含2个核心文件(约360行代码),通过编译时宏配置所有功能。采用双命令表设计(静态/动态命令),argv原地解析优化内存使用。工作流程包含字符接收、解析、命令匹配和执行四个阶段,以高效处理用户输入命令。
2025-11-14 11:35:41
604
原创 一个面向STM32F4系列微控制器的开源驱动库!
STM32F4 Discovery库是Tilen Majerle开发的开源驱动库,专为STM32F4系列微控制器设计。该库包含60多个外设驱动、传感器接口和通信协议实现,并配有示例工程,帮助开发者快速构建应用。项目采用模块化设计,提供完善的文档和代码注释,适用于各类嵌入式开发需求。
2025-11-02 12:00:00
908
原创 嵌入式系统中的极简二维码生成方案!
摘要:QRCode是一个专为嵌入式系统设计的轻量级二维码生成库,解决了传统QR码库在资源受限MCU上的应用难题。该库无需复杂图形库支持,减少了动态内存占用,适用于设备配网、产品溯源等场景。其特性包括高效的内存管理和精简的实现架构,使开发者能在低功耗设备上便捷地集成二维码功能。
2025-11-02 10:30:00
863
原创 嵌入式系统内存使用的几个关键点
本文分享了嵌入式系统内存管理的几个关键要点。嵌入式系统的内存管理直接影响系统稳定性、实时性和功耗表现。文章首先展示了一个典型的嵌入式内存映射图,为后续内存使用优化提供参考基础。这些实战经验总结将帮助开发者更好地规划和使用嵌入式系统的内存资源,提高系统性能和可靠性。
2025-11-01 12:30:00
42
原创 一个被严重低估的嵌入式系统微内核!
文章摘要: 本文主要介绍LK的基本情况。第一部分简要概述LK的总体简介,第二部分详细说明LK的具体内容。通过分章节展示的方式,全面系统地呈现LK的相关信息。文章采用清晰的层级结构,使读者能够快速掌握LK的核心要点。整体内容简洁明了,便于读者理解和获取所需信息。摘要控制在150字以内,符合要求。
2025-11-01 11:30:00
599
原创 谈谈嵌入式数据的可移植性!
数据可移植性是指数据在不同硬件架构、操作系统和编译器环境下保持正确性和一致性的能力。在嵌入式系统中,数据可移植性至关重要,能确保数据跨平台迁移时不会失真或出错。该特性支持系统间的数据共享和交换,提升开发效率和应用灵活性。通过标准化数据格式和协议,可有效实现数据可移植性,减少平台依赖问题。
2025-10-31 09:11:49
143
原创 嵌入式C与C++混合编程需要注意的点?
混合编程中C与C++的互调常遇三大问题:调用类成员函数链接失败、回调函数类型转换警告、结构体内存布局不一致。根本原因是两语言的符号命名规则差异。使用extern "C"可有效解决这些互操作性问题,充当两种语言间的桥梁。
2025-10-31 09:04:22
896
原创 嵌入式工程师必学:GCC 扩展语法
嵌入式开发中GCC扩展的重要性在于弥补标准C语言在硬件操作和性能优化方面的不足。GCC扩展提供了三大关键优势:精确的硬件控制能力、高效的性能优化手段和可靠的代码质量保证。典型应用场景包括初始化函数内存定位、硬件寄存器操作时的结构体填充问题以及安全宏定义等。通过GCC的属性声明等功能,开发者能够更好地优化中断处理等关键代码,解决标准C在嵌入式开发中的局限性问题。
2025-10-10 12:00:00
377
原创 嵌入式内存踩踏监测工具!
嵌入式开发中难以察觉的内存踩踏问题常导致系统崩溃。mprotect工具能有效定位这类问题,通过监控内存访问,帮助开发者快速发现并修复内存错误,提升系统稳定性。相比传统调试方法,mprotect提供更精准的故障定位能力,是嵌入式开发调试的有力工具。
2025-10-10 08:30:00
796
原创 深圳有哪些科技方阵?
深圳作为全球消费电子创新中心,汇聚了安克创新、韶音科技、影石Insta360等一批领军企业,其产品通过嵌入式技术实现智能快充、骨传导降噪、AI防抖等创新功能。机器人领域的大疆、优必选等企业攻克了运动控制、精密驱动等核心技术,无人机飞控系统精度达厘米级。汽车电子方面,比亚迪半导体、德赛西威等企业从芯片到智能座舱全面布局,推动车规芯片、AR-HUD等技术创新。这些企业通过嵌入式技术持续引领消费电子、机器人和汽车电子三大领域的全球发展。
2025-10-09 12:00:00
1737
原创 一个专为小内存MCU设计的超轻量FIFO环形缓冲区库!
嵌入式开发中数据缓冲是常见需求,涉及串口通信、传感器数据采集和实时信号处理等场景。文章介绍了高效可靠的数据暂存机制,通过项目概览和图示说明缓冲区的设计思路。该方案可有效解决嵌入式系统中的数据暂存问题,为开发者提供实用参考。
2025-10-09 08:30:00
873
原创 一款基于FreeRTOS设计的手机操作系统!
MuditaOS是一款专为极简手机Mudita Pure设计的嵌入式操作系统,基于FreeRTOS构建,针对E Ink显示屏进行了深度优化。在智能手机功能日益复杂的背景下,这款系统以其专注简洁的设计理念脱颖而出。MuditaOS通过精简功能、优化显示效果,为用户提供了更专注、更高效的数字生活体验。
2025-10-08 19:10:21
402
原创 TinyUSB:嵌入式USB开发的精巧之道
嵌入式USB开发面临协议复杂、资源占用大的挑战。传统USB协议栈存在体积庞大、配置繁琐、移植困难三大痛点,影响开发效率和设备性能。开发者需要应对这些技术难题才能充分发挥USB接口高速通用的优势。
2025-10-08 12:00:00
801
原创 一份经典的嵌入式面试题!
本文介绍了变量作用域的概念及其在嵌入式系统中的重要性。变量作用域决定了变量的可见范围和使用周期,直接影响内存使用效率和系统稳定性。文章通过代码示例展示了全局变量(整个程序生命周期可见)和局部变量(函数栈帧内可见)的区别,强调了正确理解作用域对嵌入式开发的关键作用。
2025-10-08 09:00:00
1887
原创 嵌入式模块设计的工程实践
嵌入式系统的模块化质量直接影响其可维护性和扩展性。研究表明,模块内聚度与系统稳定性呈正相关,而模块间的耦合度则与维护成本成正比。高质量的模块化设计应注重提高模块内聚度,降低模块间耦合,从而提升系统整体性能并降低维护难度。
2025-10-07 11:46:29
595
原创 嵌入式系统内存泄漏检测利器:MTrace
程序运行72小时后突然死机,很可能是内存泄漏问题。嵌入式系统内存泄漏如同桶底小孔,难以察觉却危害巨大。MTrace是glibc自带的内存跟踪工具,轻量高效,能精准定位泄漏点。相比其他检测工具,MTrace无需额外安装,直接集成在C库中,特别适合嵌入式环境使用,帮助开发者快速发现并修复"桶底小孔"般的内存泄漏问题。
2025-10-07 11:42:23
374
JSON天气数据包解析
2018-02-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅