一个用纯 C99 写的小型高效日志库,只有两个文件,不需要任何第三方依赖
log.c是一款仅含log.c和log.h两个文件的纯C99日志库,无需任何第三方依赖即可快速集成到嵌入式项目中。它提供六种日志级别、多输出目标(stderr/文件/回调)、线程安全锁机制等核心功能,完美解决printf混乱、错误码映射繁琐等痛点。支持彩色输出、自定义回调对接RTOS队列,虽无内置日志滚动功能,但可通过源码扩展满足需求。几十KB体积、零学习成本,是嵌入式开发者告别日志烦恼的首选方案。
最流行的开源硬件平台
log.c是一款仅含log.c和log.h两个文件的纯C99日志库,无需任何第三方依赖即可快速集成到嵌入式项目中。它提供六种日志级别、多输出目标(stderr/文件/回调)、线程安全锁机制等核心功能,完美解决printf混乱、错误码映射繁琐等痛点。支持彩色输出、自定义回调对接RTOS队列,虽无内置日志滚动功能,但可通过源码扩展满足需求。几十KB体积、零学习成本,是嵌入式开发者告别日志烦恼的首选方案。
写了多年C语言,从满屏printf到各种臃肿的日志框架,直到遇见log.c才找到最佳答案。这个纯C99实现的日志库只有两个文件,零第三方依赖,却提供了时间戳、文件行号、颜色区分、日志分级、文件输出、回调扩展等完整功能。支持多线程安全,可一键静音,生产环境调高日志级别即可节省磁盘和性能。简单到扔进项目就能用,强大到覆盖99%的日志需求,是嵌入式和小型项目的理想选择。在这个动不动就搞几百兆框架的年代,这种几百行代码解决核心问题的小而美,简直就是一股清流。
nanoprintf是一个专为嵌入式设计的超轻量级snprintf/vsnprintf实现,纯C99单头文件,无malloc,栈空间仅需100字节。针对Cortex-M0编译仅580-2800字节。它解决了嵌入式开发中stdio.h带来的syscall和文件描述符累赘问题,支持通过回调函数直接将字符发送到串口、I2C、CAN等总线。可按需禁用浮点、二进制等功能进一步压缩体积,兼容Clang/GCC/MSVC。适合Bootloader、固件日志等空间极度紧张又需要基本格式化输出能力的场景。
lwbtn是一款专为嵌入式开发者设计的C11按钮库,完美解决按键去抖、单击、双击、长按等常见需求。它不依赖任何操作系统,无需动态内存分配,在资源紧张的MCU上也能稳定运行。开发者只需实现两个回调函数即可快速集成,库内部自动维护状态机,彻底告别手写状态机的繁琐与易错问题。
lwrb是一个超轻量级的C11实现FIFO环形缓冲区库,专为资源受限的嵌入式场景设计。它采用静态数组完全避免动态内存分配,支持单写单读模式下的线程/中断安全,零拷贝特性使其完美适配DMA传输。代码简洁高效,跨平台兼容性好,MIT开源许可可随意商用。无论是MCU、DSP还是AVR项目,lwrb都能帮你快速实现可靠的数据队列,是嵌入式开发中数据搬运的利器。
log.c是一个纯C99编写的轻量级日志库,仅包含log.c和log.h两个文件,无需任何第三方依赖。它统一了嵌入式开发中的日志接口,提供TRACE到FATAL六个日志级别,支持多输出目标(串口、文件、回调),并具备线程安全特性。文章详细介绍了其安装使用方法、核心API及优缺点对比,是嵌入式项目日志管理的理想选择。
lwbtn是一个超轻量级的C11按键管理库,专为嵌入式设备设计。它不依赖任何操作系统,无需动态内存分配,只需提供毫秒级时间源即可工作。支持单击、多击、长按、保活等多种事件,内置软件防抖功能,兼容STM32、Arduino、Win32等平台。这个库把复杂的按键状态机封装成简单易用的API,让开发者告别手写繁琐的按键逻辑,非常适合资源受限的MCU项目使用。
uLog是一款专为资源受限嵌入式设备设计的超轻量级结构化日志库,采用纯C语言实现,仅需一个.h和一个.c文件即可使用。它支持CRITICAL、ERROR、WARNING、INFO、DEBUG、TRACE六档日志级别,可实现多路输出(console、文件、内存buffer),每个输出通道独立设置阈值。最核心的特性是编译期开关,定义ULOG_ENABLED时生成日志代码,未定义时完全零开销、零占用。无需任何外部依赖,适合各种裸机或RTOS环境,是嵌入式开发者的理想日志解决方案。
c-periphery是一个纯C语言编写的Linux用户态外设访问库,完美支持GPIO、LED、PWM、SPI、I²C、MMIO、Serial等接口。它将散落在/sys、/dev、mmap等处的复杂调用统一封装为简洁API,让开发者告别繁琐的底层操作。该库具有重入安全、零额外依赖、静态/共享库可选等优势,一套API通吃树莓派、BeagleBone等嵌入式平台,大幅降低开发成本,提升项目效率。