- 博客(475)
- 资源 (1)
- 收藏
- 关注
原创 RTEdbg —— 嵌入式实时调试的“瑞士军刀“
RTEdbg:嵌入式系统的轻量级实时调试方案 RTEdbg是一款开源的嵌入式实时调试工具,解决了传统调试方法在实时系统中的痛点。相比printf调试和断点调试,RTEdbg具有三大核心优势:极低开销(仅需35个CPU周期和4字节栈空间)、真正的可重入设计(支持中断和异常处理)、灵活的数据导出(支持多种格式输出)。其工作原理是将原始数据写入RAM缓冲区,所有格式化工作由主机完成,对嵌入式系统影响极小。工具套件包含目标端采集库、主机解码器和数据传输工具,特别适合资源受限的MCU开发。通过定义格式文件和使用简单A
2026-04-02 10:36:52
443
原创 FreeRTOS 工程化要点:任务划分、优先级设计与 CPU 占用率监控
本文分享了FreeRTOS任务设计的核心要点:任务划分应遵循单一职责原则,拆分为独立任务并通过队列通信,建议5-8个任务为宜;优先级设置中数字越大优先级越高,实时任务应分配高优先级;CPU占用率监控可通过内核运行时统计功能实现,需配置高精度计数器。合理的设计应使CPU占用率保持在30%-70%之间,避免任务长时间占用CPU影响系统性能。
2026-04-02 10:19:28
408
原创 设备断网了?嵌入式网络状态检测咋整?
嵌入式Linux网络状态检测的三种方法: Socket连接探测:通过尝试连接公网服务器(如114.114.114.114)检测网络可达性,适合确认外网访问能力,但存在秒级延迟。 Sysfs文件读取:直接读取/sys/class/net/下网卡状态文件(如operstate),检测链路层物理连接状态,轻量高效但仅反映本地连接。 Netlink监听:通过订阅内核网络事件实时获取状态变化,实现零延迟检测,适合对实时性要求高的场景。 三种方法分别对应不同需求:外网连通性检测、物理连接状态监控和实时事件响应。开发者应
2026-03-25 09:00:00
423
原创 一个数组越界,竟让我排查了几天——嵌入式段错误定位实录
本文记录了一个隐蔽的段错误排查过程。程序在特定位置崩溃,屏蔽两行三角函数代码后正常,但问题根源却是一个"隔山打牛"式的数组越界。作者通过远程GDB定位到fd值被篡改,发现static变量不在map文件中,最终找到相邻数组越界写入的真凶。文章分享了-fdata-sections编译参数的使用技巧,并总结了调试经验:表象不等于根因、选对工具事半功倍、善用现代化调试工具。整个过程展示了嵌入式Linux开发中内存类bug的典型排查思路。
2026-03-24 09:00:00
404
原创 嵌入式开发的时间 “陷阱”:UTC、时区这些你真懂?
嵌入式设备时区处理问题解析 文章分析了嵌入式开发中常见的时区处理问题,指出直接写死时区会导致设备在海外使用时出现时间错误。文章系统介绍了时间处理的基础概念(UTC/GMT)和标准库函数(time()、gmtime_r()、localtime_r()),详细解释了时区划分原理(24个时区,各15度经度对应1小时时差),并提供了通过GPS经度计算理论时区的代码实现。最后指出该方法存在局限性(政治因素可能导致时区与理论值不符),建议作为兜底方案使用。全文为嵌入式开发者提供了完整的时区处理知识框架和实践指导。
2026-03-23 11:30:00
416
原创 FreeRTOS 的 5 种堆方案,如何理解?
FreeRTOS提供了5种堆管理方案(heap_1~heap_5),各有特点:heap_1最简单但不支持释放;heap_2支持释放但会产生碎片;heap_3依赖系统malloc/free;heap_4支持合并空闲块减少碎片,是官方推荐方案;heap_5扩展支持多块不连续RAM。选择时需根据应用场景考虑:固定分配大小可选heap_2,通用场景推荐heap_4,多RAM区域管理用heap_5。注意heap_1不能释放内存,heap_3中断不可用,heap_2在变长分配时碎片严重。合理配置堆大小并预留足够空间是关
2026-03-23 09:00:00
453
原创 嵌入式 Linux 多进程 IPC 通信方式很多,如何选择?
本文介绍了嵌入式Linux开发中六种进程间通信(IPC)机制及其适用场景。通过对比表展示了消息队列、共享内存、UNIX域套接字、管道、信号量和信号的特点,重点分析了消息队列和共享内存的实现原理。消息队列通过内核优先级队列实现结构化消息传递,而共享内存通过映射同一物理内存实现零拷贝高速通信。文章还提供了POSIX消息队列的完整代码示例,演示了发送和接收进程的通信流程。这些IPC机制为嵌入式系统提供了模块化开发、资源优化和性能提升的有效手段。
2026-03-21 17:00:00
627
原创 搞嵌入式,谁不想拥有一组拿来就用的实用代码?
本文分享了四个嵌入式Linux开发中的实用代码片段:1)终端进度条实现,利用回车符和缓冲区刷新实现动态显示;2)结构体成员偏移量和大小的获取方法,通过0地址转换技巧和sizeof计算;3)文件读写操作的通用封装,简化配置存储和日志落盘等常见操作;4)core dump调试技巧(未展示完整代码)。这些代码片段涉及内存布局、终端交互、文件操作等嵌入式开发高频场景,基于Linux+GCC环境验证,可直接应用于实际项目开发。
2026-03-21 11:00:00
341
原创 嵌入式 Linux | 进程内线程资源占用排查方法!
本文介绍了在嵌入式Linux开发中定位多线程进程资源占用的几种方法:1)使用top -H命令实时查看线程CPU占用;2)ps -T命令获取线程状态快照;3)pidstat工具进行线程级CPU采样分析;4)直接读取/proc文件系统获取线程信息。文章重点强调了给线程命名的重要性,并给出了pthread_setname_np的使用建议。这些方法各具特点,可根据实际场景灵活选用,帮助开发者快速定位线程级性能问题。
2026-03-20 11:00:00
385
原创 写 FreeRTOS 任务通信,不用队列 Queue,你还有更好的选择?
本文介绍了FreeRTOS中的队列(Queue)机制。队列是一块连续内存,采用FIFO方式存储数据单元,支持任务间传递数据。文章对比了队列与信号量的区别,并通过3个实例展示了队列的典型应用:传递指针实现零拷贝、结构体数据传输和中断到任务通信。详细解析了队列的内存结构和工作原理,包括阻塞模式下的不同等待策略。最后列出了核心API的使用方法,包括动态和静态两种队列创建方式,以及数据发送函数的参数说明。全文深入浅出地讲解了FreeRTOS队列的实用技巧和底层机制。
2026-03-20 09:00:00
395
原创 FreeRTOS 任务栈:翻车原因、定位方法与防范技巧
本文探讨了FreeRTOS任务栈管理的核心问题。首先分析了任务栈的两个作用:运行时工作区和上下文保存区。通过栈布局示意图解释了溢出原理,指出栈溢出会覆盖相邻内存导致系统故障。文章提出了栈大小科学计算的4步法:计算上下文切换固定开销(64字节)、函数调用动态开销(取最深嵌套路径峰值)、中断嵌套预留空间(无独立栈时需考虑),并建议增加20%-50%安全余量。针对栈溢出问题,介绍了4种表现和4种检测手段,重点讲解了FreeRTOS内置检测(推荐方法2)和水位线查询方法,通过填充特定值和检查剩余空间来量化栈使用情况
2026-03-19 09:34:33
700
原创 FreeRTOS调度器:抢占与轮转机制
本文介绍了FreeRTOS调度器的核心机制。FreeRTOS默认采用抢占式调度和时间片轮转相结合的策略,通过优先级决定任务执行顺序,同优先级任务则按时间片轮转执行。调度器依靠SysTick中断作为心跳,每次中断检查任务状态并触发切换。文章详细解析了调度触发时机、上下文切换过程,以及空闲任务的作用,并指出常见问题如高优先级任务死循环、共享资源未保护等。最后强调应根据实际场景平衡时间片大小,避免调度性能问题。
2026-03-19 08:54:20
400
原创 ESP32 的宝藏开源项目:ESP32 - Bus - Pirate 打造硬件调试瑞士军刀
ESP32 Bus Pirate是一款基于开源固件的硬件调试工具,它彻底改变了传统Bus Pirate的使用体验。Github链接:https://github.com/geo-tp/ESP32-Bus-Pirate开源协议:MIT license作为一款支持多种协议的硬件工具,它不仅兼容传统Bus Pirate的核心功能,还通过Wi-Fi连接、Web CLI界面和丰富的扩展协议,为硬件开发者和电子爱好者提供了更强大、更灵活的调试解决方案。
2026-02-08 22:28:39
1239
原创 Hook 机制在嵌入式中的应用解析!
本文深入解析了evhtp HTTP服务器中的Hook机制。Hook是一种在程序关键节点插入自定义处理函数的技术,具有低耦合、可扩展等优点。文章通过一个完整示例展示了如何在evhtp中设置Hook来监控请求处理流程,包括请求头解析、body接收等关键节点。同时分析了evhtp的Hook实现原理,包括数据结构设计、调用机制和设置方法。这种机制使开发者无需修改核心代码就能扩展功能,特别适合嵌入式系统开发场景。
2026-02-07 23:00:25
899
原创 不用再到处找资源|嵌入式软件全领域实用资源汇总(建议收藏)
《Awesome-Embedded》是一个开源嵌入式开发资源合集,涵盖面试准备、MCU开发、RTOS、Linux驱动等核心领域。项目提供系统化的面试题库、STM32/MSP430等MCU开发模板、FreeRTOS/RT-Thread实战案例,以及Linux内核/驱动开发教程。还包括Yocto/Buildroot系统构建、GCC工具链使用、Bootloader实现等实用资源,并推荐了经典技术书籍和开源项目。该资源库采用CC-BY-SA-4.0协议,为嵌入式开发者提供从入门到进阶的一站式学习资料。
2026-02-05 08:52:21
756
原创 简易嵌入式错误码模块设计!
本文介绍了嵌入式系统中错误码设计的三种实用方案。针对不同项目规模,建议:小型项目采用极简整型错误码(0成功,负数致命错误);中型项目使用枚举型错误码,按模块划分码段避免冲突;大型项目推荐结构化方案,包含模块ID、错误类型等字段,便于跨系统调试。文章详细分析了各方案的适用场景、代码实现及使用示例,帮助开发者根据实际需求选择合适方案,提升错误排查效率。
2026-02-01 19:06:33
985
原创 简易嵌入式日志系统设计思路!
本文介绍了一个专为嵌入式系统设计的轻量级日志系统实现方案。该系统采用环形缓冲区结构,支持同步/异步两种输出模式,异步模式下50条日志耗时仅17ms(同步模式472ms)。具备5级日志过滤(ERROR/WARN/INFO/DEBUG/VERBOSE)、格式化输出、自动时间戳和源码定位功能。核心设计遵循静态资源分配、最小接口抽象(仅需实现输出和时间戳两个平台函数)和FreeRTOS兼容性原则,在保证功能完备性的同时保持代码精简。特别适合资源受限的嵌入式环境进行调试和问题追踪。
2026-01-28 00:42:05
438
原创 嵌入式 Linux 必知:几个超实用代码小片段
本文分享了5个嵌入式Linux项目中高频使用的C语言代码片段,用于系统排障和设备信息获取。内容包括:1)通过/proc/meminfo获取内存总量和可用内存;2)从sysfs读取CPU温度;3)使用fseek/ftell获取文件大小;4)通过gettimeofday获取毫秒级时间戳;5)利用ioctl获取网卡MAC地址。这些代码遵循"选数据源→读取→解析→格式化输出"的通用思路,可快速集成到日志系统中,帮助定位内存泄漏、性能异常等问题。文中还特别标注了各方法的注意事项,如温度采样频率、时
2026-01-20 23:53:15
615
原创 嵌入式协议处理:流式解析 vs 一次性解析
本文对比了嵌入式通信开发中协议解析的两种方式:一次性解析和流式解析。一次性解析适用于完整帧数据,实现简单但无法处理数据分片;流式解析通过状态机逐字节处理,能有效应对粘包、断包和噪声场景,但实现较复杂。文章通过ITLV协议实例展示了两种方法的核心区别,并提供了代码实现示例,帮助开发者根据实际通信场景选择合适的解析策略。
2026-01-20 23:50:36
886
原创 Zephyr SMF实战:几百行代码实现轻量状态机!
本文介绍了如何从Zephyr RTOS中独立抽取状态机框架(SMF)并在裸机项目中应用。Zephyr SMF具有API简洁、零依赖、资源占用小等优势,核心代码仅需3个文件约500行。文章详细演示了抽取步骤:创建项目结构、复制核心文件、创建移植适配层、修改源文件,并通过一个命令解析器实例展示了SMF的具体实现方法。该框架采用Apache-2.0许可证,可自由用于商业项目。最终效果证明,SMF能有效简化状态机开发,提高代码结构化程度和可扩展性。
2026-01-10 11:00:00
823
原创 简易嵌入式自定义协议设计思路!
字节序一致性:跨平台通信必须明确字节序(本实现采用小端序)固定宽度类型:使用uint8_tuint16_t等固定宽度类型,确保跨平台一致性静态内存分配:嵌入式环境避免使用动态内存,防止内存碎片流式解析支持:实际通信中数据是流式到达的,需要状态机处理粘包/断包完善的错误处理:统一的错误码体系,便于问题定位字段含义典型长度说明IID/Index1~2 字节数据标识符,区分不同类型的数据TType1 字节数据类型(uint8、int32、string等)LLength1~4 字节。
2026-01-10 00:25:26
76
原创 通用嵌入式软件架构分层设计思想
嵌入式软件架构分层设计 摘要:本文介绍了嵌入式系统中常用的Arch-Platform-Target三层架构设计模式。Arch层处理CPU架构相关代码,Platform层提供硬件抽象,Target层实现业务逻辑。文章通过STM32+RTOS项目案例,展示了分层目录结构设计:Arch层负责启动和时钟,Platform层封装外设驱动,Target层实现业务功能。关键代码示例演示了SysTick驱动、LED封装和任务创建等分层实现,确保硬件更换时只需修改底层而不影响业务代码。OSAL层统一RTOS抽象接口,提高了代
2026-01-01 12:00:00
678
原创 嵌入式总线错误深度剖析
本文分享了嵌入式开发中总线错误的排查经验。通过对比段错误和总线错误的区别,分析了一个ARM平台上由非对齐访问引发的总线错误案例。文章详细解释了内存对齐原则和#pragma pack的作用,指出在紧凑布局下float类型非对齐访问会触发总线错误,而int类型则不会。最后给出了三种预防总线错误的实用技巧:调整结构体成员顺序、使用memcpy安全访问、限制#pragma pack作用范围。文章强调x86能运行不代表ARM也能运行,提醒开发者要谨慎使用#pragma pack。
2025-12-31 12:00:00
815
原创 嵌入式状态机架构,一文讲透!
本文介绍了状态机在嵌入式开发中的应用。针对if-else嵌套导致的代码复杂度问题,文章首先分析了传统串口协议解析代码的缺陷,进而阐述了状态机原理(四要素和两种类型)。通过实例展示了如何用状态机重构串口接收模块,使代码更清晰可维护。文章还分析了FreeRTOS和lwIP中的状态机实现,并对比了Zephyr SMF、QP/C和TinyFSM三种嵌入式状态机框架的特点和适用场景。状态机可有效管理复杂状态转换,提升代码可读性和可测试性,特别适合事件驱动的嵌入式系统开发。
2025-12-31 08:30:00
1083
原创 嵌入式Linux多线程:从“能跑“到“稳定“的关键一步
本文深入探讨了并发编程的核心问题与解决方案。首先区分了并发与并行的概念,分析了竞态条件的根源,包括代码执行顺序不确定性、编译器/CPU优化及多核缓存问题。接着详细介绍了POSIX线程库三大同步原语:互斥锁(强调小粒度锁定)、条件变量(解决线程等待通知问题)和读写锁(优化读多写少场景)。针对死锁问题,文章剖析了其四个必要条件,提出了通过统一加锁顺序等方法来预防死锁。最后总结出并发编程三大原则:最小化共享、最小化临界区和统一加锁顺序,为开发者提供了实用的工程实践建议。
2025-12-30 08:43:18
431
原创 这几个嵌入式软件开源项目值得深度复刻!
本文推荐几个值得复刻的嵌入式开源项目(500-3000行代码量),包括MultiButton按键库、letter-shell命令行框架、EasyLogger日志系统等,通过"跑通→画图→重写"三遍阅读法学习其设计思想。这些项目展示了状态机、回调机制、自动注册、分层架构等嵌入式开发中的工程化设计模式,是提升代码设计能力的优质学习资源。文章还提供了项目筛选标准和循序渐进的学习路径,帮助开发者从模仿到掌握核心设计思想。
2025-12-30 08:42:06
907
原创 常见嵌入式软件崩溃类型:12种典型场景!
本文分析了嵌入式软件常见的四大类崩溃问题:段错误、内存问题、资源耗尽和并发问题。详细介绍了空指针访问、数组越界、栈溢出等段错误案例,以及内存泄漏、重复释放等内存问题。针对资源耗尽问题,讲解了文件描述符耗尽和OOM Killer机制。最后讨论了并发场景下的死锁问题。文章通过代码示例展示了各类崩溃的表现形式和根本原因,并提供了调试方法建议,如使用Valgrind和AddressSanitizer工具。这些分析有助于开发者快速定位和解决嵌入式系统中的崩溃问题。
2025-12-14 11:30:00
758
原创 一个轻量级 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
610
原创 热门嵌入式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
1050
原创 一个局部变量竟然自己变了!栈溢出实例分享
本文分享了一个栈溢出的典型案例。当某个状态码从正常的200变为500时,程序崩溃并报出栈溢出错误。通过分析发现,问题根源在于递归调用未设置终止条件,导致函数调用栈不断增长直至超出内存限制。这个例子展示了递归程序设计时设置正确终止条件的重要性,否则极易引发栈溢出这类经典错误。
2025-12-13 12:15:28
322
原创 嵌入式单元测试打桩实战指南
Unity单元测试框架本身不支持mock打桩功能,但可以结合其他工具实现。本文介绍了mock打桩在嵌入式开发中的应用场景,包括硬件未就绪时的代码调试、第三方接口联调障碍以及单元测试中的模块隔离需求。通过mock技术可以模拟依赖项的行为,解决开发过程中的常见困境,提高测试效率。文章将详细讲解如何在嵌入式项目中应用mock打桩技术。
2025-12-10 11:21:54
543
原创 嵌入式运维态内存泄漏检测方案?
嵌入式设备现场运行时常遇到偶现死机和内存泄漏问题。本文提出一种基于dlmalloc的轻量级运维态内存检测方案,通过mallinfo监控整体内存水位变化,并利用追踪表记录分配来源,实现非侵入式泄漏检测。该方法无需调试器或修改源码,可长期驻留设备,在真实负载下捕获缓慢泄漏,并通过日志记录未释放的内存块及其分配位置,为现场问题定位提供关键证据。
2025-12-10 11:20:31
434
原创 简易嵌入式优先级消息队列设计思路!
消息队列是解决任务间通信的有效方案,主要功能包括任务解耦、异步通信、流量削峰、优先级调度和数据完整性保障。常见的消息队列类型有FIFO队列(适用于日志记录等普通数据流)和优先级队列(适用于告警系统等需要优先处理的场景)。消息队列通过缓冲机制提高系统可靠性和性能,是分布式系统中重要的基础组件。
2025-12-09 09:18:26
704
原创 热门嵌入式web服务器对比!
嵌入式Web服务器是将标准Web服务器移植到嵌入式系统中的技术方案,基于HTTP协议实现通信,具有标准接口。这种方案为无显示屏的嵌入式设备提供了便捷的交互方式,可通过网页进行功能调试和展示。在实际工作中,嵌入式Web服务器为开发调试带来了便利,成为嵌入式系统交互的有效解决方案。
2025-12-09 09:09:25
619
原创 一个嵌入式系统的进程通信利器!
嵌入式Linux系统中的进程间通信方案包括:1)共享内存实现高效数据共享;2)消息队列提供异步通信机制;3)信号用于简单事件通知;4)管道实现单向数据流;5)套接字支持跨网络通信。这些方法各具特点,开发者需根据实时性、数据量等需求选择合适方案,确保系统高效稳定运行。
2025-11-25 17:30:00
619
原创 嵌入式设备通信序列化的正确打开方式!
保持 Protocol Buffers 强大功能的同时,将代码体积压缩到 3KB 以内,并且只需要不到 300 字节的栈空间。看起来不大,但考虑到:每秒上报 10 次数据、每次传输都要消耗宝贵的电量,累计下来,通信负担会很大。对于大部分传感器数据(温度、湿度、计数器),数值都很小,varint 能节省 50% 以上的空间。也不想使用太重的JSON,一个简单的传感器数据包,JSON 可能就要占用几百字节;,在保持 protobuf 强大功能的同时,将资源占用压缩到适合嵌入式系统的级别。
2025-11-25 08:30:00
514
原创 一个可应用于嵌入式C的轻量级单元测试框架!
Unity是一个专为C语言设计的轻量级单元测试框架,其核心目标是提供简单易用的测试功能。该项目采用简洁的设计理念,包含最小化的代码库,便于开发者快速上手。Unity支持跨平台运行,适用于嵌入式系统开发测试,帮助开发者提高代码质量和可靠性。
2025-11-24 08:29:52
872
原创 嵌入式中代码执行时间测量的几种方法!
嵌入式开发中常遇到代码优化效果难以评估和控制算法执行时间不确定的问题。本文针对两个典型场景展开讨论:一是如何量化代码优化后的性能提升,二是如何准确测量控制算法的单次执行时间,以判断其能否满足1kHz或4kHz等高频率控制周期的要求。文章将提供实用的解决方案,帮助开发者有效评估优化效果和算法实时性。
2025-11-24 08:28:00
759
原创 嵌入式中pthread条件变量怎么用?
嵌入式Linux开发中,线程同步是关键问题,常见痛点包括轮询导致CPU占用高、sleep导致响应延迟或资源浪费、以及多线程竞态条件。pthread条件变量是解决线程"等待-通知"场景的最佳方案,能让线程在条件不满足时休眠,条件满足时精确唤醒,既保证响应速度,又能最大化降低CPU资源占用。
2025-11-17 08:30:00
908
原创 一个面向嵌入式Linux C++的应用开发框架
AppKit是一个面向嵌入式Linux开发的C++14框架,旨在提升开发效率和应用健壮性。该框架提供了一套完整工具集,涵盖线程管理、定时器、文件IO、串口通信、网络通信、CAN总线、GPIO控制等嵌入式开发常见需求。通过预置的优化组件和标准化接口,AppKit帮助开发者快速构建稳定可靠的嵌入式应用系统,特别适合工业控制、物联网等领域的项目开发。
2025-11-14 11:36:41
1034
JSON天气数据包解析
2018-02-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅