嵌入式C语言高级编程之异步日志

核心设计原理:生产者-消费者模型

这套代码的核心在于**“异步”**。

  • 同步日志(旧方案):业务线程写日志 -> 加锁 -> 写磁盘(慢) -> 解锁。业务线程会被卡住。
  • 异步日志(新方案):业务线程写日志 -> 扔进内存队列(快) -> 继续干活。后台线程负责慢慢写磁盘。

1. 头文件 (logger.h)

这个文件定义了系统的“骨架”。

关键设计点:

  1. LogNode:这是日志消息的载体。注意这里使用了链表结构,方便在队列中快速插入和取出。
  2. LogQueue:这是连接业务线程和后台线程的桥梁。它包含了互斥锁和条件变量,这是实现线程安全的关键。
  3. Logger 基类:采用了面向对象的“多态”思想。基类只定义接口,具体的实现(是写文件还是写屏幕)由子类决定。
sensomy-log:嵌入式C轻量日志库深度解析 嵌入式日志系统是资源受限MCU开发中保障调试可见性与运行可靠性的基础能力。其核心原理在于平衡格式化开销、内存占用与实时性约束,通过编译期裁剪、零动态内存分配和环形缓冲区原子操作实现确定性低延迟。技术价值体现在对Flash/RAM的极致压缩、多任务线程安全支持,以及UART/ITM/SWO等异构后端的灵活适配。典型应用场景覆盖STM32、nRF52840、ESP32等主流MCU平台,在FreeRTOS任务、HAL驱动乃至中断服务程序中无缝集成。本文围绕sensomy-log这一专为嵌入式设计的C语言日志库,深 阅读详情

相关推荐

LVGL v8.3 图片显示与解码缓存实战:PNG 上屏、C 数组与文件双方案

LVGL v8.3 图片两种存储方式、PNG/JPG 上屏解码器挂载、LV_IMG_CACHE_DEF_SIZE 缓存调优、手动预解码头像有效性判断,及"缓存被动画清空"真实踩坑。

汪同学的博客 408

嵌入式C语言高级编程之异步日志重构覆盖日志

这篇文章展示了一套非常经典的嵌入式C语言异步日志系统。它不仅仅实现了基础的日志记录,更在代码架构中融入了面向对象思想(多态)、生产者-消费者模型以及防御性编程,最后通过极度严谨的测试用例证明了“日志文件大小限制与循环覆盖”这一核心诉求。

CPUOS2010的博客 75

嵌入式C语言高级编程之日志模块zlog

`zlog` 是由国内大佬 HardySimpson 开发的一款纯 C 语言日志库,在嵌入式、物联网、游戏服务器等领域具有统治地位。它的核心设计目标只有一个:**在极高并发下,追求极致的落盘性能,同时保证程序崩溃时日志不丢失。本文将从底层设计原理、应用场景以及配套的多线程压测代码三个维度为你深度拆解 zlog。

CPUOS2010的博客 400

嵌入式C语言高级编程之日志模块重构2

文章摘要 本文介绍了在Linux平台下实现多线程安全的日志系统解决方案。该方案有效防止了日志内容交错和资源竞争问题,适用于高并发环境下的日志记录需求。

CPUOS2010的博客 71

推荐一个极致简约的嵌入式日志库

并非万能,但在以下场景中,它是近乎完美的选择,比如Flash仅有几十KB的Cortex-M0/M3内核MCU,或者是功能简单的小型项目,不需要按模块过滤、不需要异步日志等高级功能。在终端中,颜色可以高亮关键信息,但颜色转义字符会占用额外的字节,如果你的输出环境不支持颜色(如单纯的串口助手),或者你想节省每一个字节,可以通过。在资源受限环境下的核心竞争力,它通过预编译宏提供了精细的控制,让你可以在编译阶段彻底掌控日志的最终形态。是一个用C语言编写的、极其简约的日志库。来禁用此功能,实现代码体积的进一步缩减。

李肖遥的专栏 585

Linux高级--3.3.1 C++ spdlog 开源异步日志方案

spdlog是由Gustav S.在 2015 年开发的一个高性能 C++ 日志库。开发这个库的主要目的是为了提供一个非常快速、轻量、易于使用的日志工具,特别适合需要高性能、低延迟日志记录的 C++ 应用程序。开发者:Gustav S.,2015 年开发目标:提供一个高性能、低开销、易用的 C++ 日志库,专为需要高吞吐量和多线程支持的应用设计。适用项目高性能应用(如游戏、金融服务等)多线程或并发系统(如 Web 服务器、分布式系统等)嵌入式系统和 IoT 设备实时数据处理和流处理。

weixin_44209111的博客 2063

MATLAB实战:蓝牙GFSK调制解调全流程解析(附误码率优化技巧)

本文深入解析了蓝牙GFSK调制解调在MATLAB中的全流程实现,包括高斯滤波器设计、调制解调技术及误码率优化技巧。通过实战案例和代码示例,帮助工程师提升蓝牙通信系统的性能表现,特别是在降低误码率方面的有效方法。

weixin_29046035的博客 277

ESP-CSI:使用ESP32进行CSI(信道状态信息)采集

使用esp32进行csi(信道状态信息)采集和处理

capsize的博客 8280

告别玄学调参:手把手教你用20元件模型搞定GaN HEMT高频仿真(附S参数提取避坑指南)

本文详细介绍了如何使用20元件模型优化GaN HEMT高频仿真,解决传统16元件模型在10GHz以上频段的误差问题。通过S参数提取避坑指南和实战案例,帮助工程师精准建模分布式电极效应和寄生反馈路径,提升射频电路设计效率。

weixin_42523693的博客 441

用户行为数据分析 User Behavior Data from Taobao for Recommendation

一、提出问题 二、理解数据 数据来源 阿里云天池数据集:(https://tianchi.aliyun.com/dataset/dataDetail?dataId=649) 本文选取的数据集为UserBehavior.csv,共有5242880条数据。数据的具体类别如下表所示: 用户行为种类有四种,如下表所示 对于数据维度的说明如下: 在本文选取的2017年11月25日到2017年12月3日的时间范围内,不重复的用户数量为10202,不重复的商品ID数为412369,不重复的商品类目ID数为5859,

cccxxxqq的博客 5205

Unity线性空间下PSD透明贴图黑边问题:原理分析与三种解决方案

在计算机图形学中,颜色空间转换与Alpha混合是渲染管线的基础环节。伽马空间与线性空间的差异源于显示设备与人眼感知的特性,现代渲染引擎采用线性工作流以实现更真实的光照计算。然而,当图像处理软件(如Photoshop)导出的纹理数据与游戏引擎(如Unity)的预期格式不匹配时,就会引发技术问题,影响视觉保真度与开发效率。具体表现为,在线性空间下进行Alpha Blend混合时,带透明通道的纹理边缘常出现异常黑边或颜色失真,其核心根源在于纹理数据是否经过“预乘”处理与sRGB标记的解读冲突。这一问题的解决对于提

weixin_34198762的博客 379

Linux ELF文件解析:从file到readelf的完整工具链指南

ELF(可执行与可链接格式)是Linux系统中二进制文件的标准格式,定义了程序加载、内存布局和元数据组织方式。其核心原理在于通过程序头表描述执行视图、节区头表描述链接视图,实现代码与数据的结构化存储。这一格式的技术价值在于为程序调试、安全审计和性能优化提供了底层支持,尤其在动态链接、符号解析和内存保护机制中发挥关键作用。在应用场景上,系统管理员依赖ELF分析工具解决库依赖问题,安全研究员通过检查安全属性评估漏洞风险,开发者则利用反汇编进行代码调试。本文聚焦于file、readelf、objdump等工具链的

weixin_42691065的博客 635

DICOM标准:DICOM医学影像中的覆盖层(Overlay)概念详解

DICOM标准:深入详解DICOM医学影像中的覆盖层(Overlay)

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1562

【DDR3 控制器设计】(1)MIG IP 核的详解与配置

2:1 比例的用户接口数据总线宽度是 MIG 内存接口宽度的 4 倍,比如 MIG 中配置的数据位宽是 16 位,而 DDR 双边采样,所以用户接口是 MIG 内存接口的 4 倍即数据位宽为 64 位,同理可以得到如果设置为 4:1 则是 8 倍的数据位宽即数据位宽为 128 位。这里选择不使用OFF。以下为 MIG 和 DDR 之间的连接框图,可以看到框图的左边是用户接口,中间是 MIG 核,右边是需要控制的 DDR 接口,用户只需要去配置使用 MIG 核,就可以对 DDR 进行控制读写等操作。

记录学习历程 5359

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 嵌入式C语言高级编程之日志模块重构2
下一篇: 嵌入式C语言高级编程之异步日志重构覆盖日志
CPUOS2010
博客等级 码龄5年 88粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CPUOS2010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值