适用于嵌入式开发的纯C工具库nx-c-util
前言
最近换工作,新公司中目前嵌入式方向的需求还未定型,目前来说就是任何嵌入式方向都会有需求。以前工作用的一些轮子不太适合当下的环境,所以这段时间重新造了一些轮子。
目前来说我对于轮子的需求主要有下面几点:
- 可以在主流的各类处理器平台上使用;
- 不管是裸机、RTOS、还是Windows、Linux等平台上都可以使用;
- 没有任何外部依赖;
- 对于简单的组件,可以单独拿出来独立使用;
- 基于这些组件开发的项目耦合度也尽量小;
基于上面的一些需求,设计了纯C开发的工具库 nx-c-util ,适用于裸机及操作系统环境,无任何依赖。
项目地址:https://github.com/NaisuXu/nx-c-util
目前设计上最核心设计点如下:
- 分级静态内存池(提供无碎片的alloc/free功能);
- 适用于任何数据类型的队列;
- 一个基于引用计数的消息组件;
- 这个是基于上面两个的,是这个库的核心组件;
- 目前实际项目中各个业务间通讯主要就是基于这个组件的,靠消息来驱动业务,而不是通过函数调用;
目前整个库还在不停迭代中,不过核心的组件应该不会特别大的改动了,更多的是扩展各种独立功能件、中间件、设备驱动等。目前已经在多个项目中使用,开发效率整体还是非常不错的。
更多内容可以直接看项目,或者参考下面介绍。
nx-c-util
简介
一个用纯 C 实现的工具库,为嵌入式开发提供简单、便捷的基础构件。
每个组件都遵循同样的设计理念:
- 纯静态 —— 所有存储都由调用者提供;库不使用任何动态内存,也不依赖
malloc/free,适用于无堆的目标平台。 - 确定性 —— 操作可预测、恒定耗时、无隐藏开销,非常适合实时系统。
- 可移植 —— 标准 C11,无平台相关依赖;在 Windows、Linux、macOS 上都能构建
和运行。
目录结构
nx-c-util/
├── src/
│ ├── core/ # 核心构件(list, queue, ringbuf, timer, coro, ref_msg, mem_pool, lock)
│ ├── middleware/ # 协议解析器和协议栈(modbus_rtu, modbus_rtu_slave, can_bus,未来:can_isotp)
│ ├── algo/ # 算法(crc, sha256)
│ └── device/ # 平台无关的设备驱动(ws2812)
└── examples/
├── core/ # 核心模块使用示例
├── middleware/ # 中间件模块使用示例
├── algo/ # 算法模块使用示例
└── device/ # 设备驱动使用示例
每个模块都设计为可独立使用。在你的项目中集成时,只需拷贝所需的 .c 和 .h
文件即可。头文件使用单层 include(如 #include "nx_list.h")无子目录前缀,
因此把拷贝文件所在的目录加入你的 include 路径即可。
模块
核心模块
- nx_list — 侵入式双向循环链表
- nx_queue — 通用环形缓冲(FIFO)队列
- nx_ringbuf — 面向字节的环形缓冲
- nx_tiered_mem_pool — 分级静态内存池
- nx_ref_msg — 引用计数的零拷贝消息
- nx_timer — 软件定时器管理器
- nx_coro — 无栈协程
- nx_lock — 可插拔的临界区抽象
中间件模块
- nx_can_bus — CAN / CAN FD 帧结构与辅助函数
- nx_modbus_rtu — Modbus RTU 帧结构与 CRC
- nx_modbus_rtu_slave — 事件驱动的 RTU 从站:帧 → 订阅分发
算法模块
- nx_crc — CRC-8 / CRC-16 / CRC-32 校验
- nx_sha256 — SHA-256 密码学哈希
设备模块
- nx_ws2812 — WS2812/WS2812B RGB LED 灯带驱动
使用
库的源码在 src/ 下按类别组织(src/core/、src/middleware/、src/algo/、src/device/),可以直接拖进你的项目 —— 大多数模块除了标准 C 外没有依赖,可以独立
使用。头文件使用单层 include(如 #include "nx_list.h"),因此把拷贝文件所在的
目录加入你的 include 路径即可。
examples/core/、examples/middleware/、examples/algo/ 和 examples/device/ 目录
包含每个模块可运行的用法示例,通过 CMake 驱动,因此在任何平台上都以相同方式构建。
构建并运行示例
在仓库根目录下:
cmake -S . -B build
cmake --build build
然后运行生成的可执行文件:
-
Linux / macOS
./build/nx_core_examples # 核心模块(list, queue, ringbuf, mem_pool, ref_msg, timer, coro) ./build/nx_middleware_examples # 中间件模块(modbus_rtu_slave) ./build/nx_algo_examples # 算法模块(crc, sha256) ./build/nx_device_examples # 设备驱动(ws2812) -
Windows (MinGW / MSYS)
./build/nx_core_examples.exe ./build/nx_middleware_examples.exe ./build/nx_algo_examples.exe ./build/nx_device_examples.exe -
Windows (Visual Studio / MSVC) —— 多配置生成器会把二进制放在按配置划分的子目录中:
./build/Debug/nx_core_examples.exe ./build/Debug/nx_middleware_examples.exe ./build/Debug/nx_algo_examples.exe ./build/Debug/nx_device_examples.exe
选择生成器
cmake -S . -B build 使用你平台的默认生成器,多数情况下已经够用。要显式指定一个,
传入 -G:
# Windows, MinGW toolchain
cmake -S . -B build -G "MinGW Makefiles"
# Windows, Visual Studio 2022
cmake -S . -B build -G "Visual Studio 17 2022"
# Linux / macOS, Unix Makefiles
cmake -S . -B build -G "Unix Makefiles"
# Any platform with Ninja installed
cmake -S . -B build -G "Ninja"
需要 CMake 3.10 或更新版本,以及一个支持 C11 的编译器(GCC、Clang 或 MSVC)。
许可证
本项目采用 MIT 许可证,详见 LICENSE 文件。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)