news 2026/8/22 16:15:49

适用于嵌入式开发的纯C工具库nx-c-util

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
适用于嵌入式开发的纯C工具库nx-c-util

文章目录

  • 前言
  • 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, log) │ ├── middleware/ # 协议解析器和协议栈(modbus_rtu, modbus_rtu_slave, can_bus, tp_sdu, 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_log — 静态异步明文日志

中间件模块

  • nx_can_bus — CAN / CAN FD 帧结构与辅助函数
  • nx_modbus_rtu — Modbus RTU 帧结构与 CRC
  • nx_modbus_rtu_slave — 事件驱动的 RTU 从站:帧 → 订阅分发
  • nx_tp_sdu — 传输层服务数据单元
  • nx_can_isotp — ISO 15765-2(DoCAN / ISO-TP)分段传输

算法模块

  • 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.-Bbuild cmake--buildbuild

然后运行生成的可执行文件:

  • 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 toolchaincmake-S.-Bbuild-G"MinGW Makefiles"# Windows, Visual Studio 2022cmake-S.-Bbuild-G"Visual Studio 17 2022"# Linux / macOS, Unix Makefilescmake-S.-Bbuild-G"Unix Makefiles"# Any platform with Ninja installedcmake-S.-Bbuild-G"Ninja"

需要 CMake 3.10 或更新版本,以及一个支持 C11 的编译器(GCC、Clang 或 MSVC)。

许可证

本项目采用 MIT 许可证,详见 LICENSE 文件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 16:15:46

PyTorch深度学习入门笔记(小土堆)P7-14

PyTorch深度学习入门笔记P7-14 ZZHow(ZZHow1024) 参考课程: 【PyTorch深度学习快速入门教程【小土堆】】 [https://www.bilibili.com/video/BV1hE411t7RN] P7. TensorBoard的使用(一) TensorBoard 的安装与导入 pip install -i tensorbo…

作者头像 李华
网站建设 2026/8/22 16:14:43

js 数组对象的map方法

map是否会改变原数组? 大家一般都会说,map不会改变原数组,foreach会改变原数组。不过,也是分情况而定的。 如果数组元素是一般数据类型,那确实map不会改变原数组如果数组是一个数组对象呢? 会发现&#xff…

作者头像 李华
网站建设 2026/8/22 16:09:28

Linux日志审计与故障追踪:从基础命令到高级工具实战指南

在 Linux 服务器运维和开发过程中,你是否遇到过这样的场景:系统突然变慢,却不知道是哪个进程在“作祟”;服务莫名其妙崩溃,日志里只有一句含糊的错误信息;或者更糟,怀疑系统被入侵,却…

作者头像 李华
网站建设 2026/8/22 16:08:27

用普通摄像头免费做眼动追踪:eyeLike 零成本快速上手指南

用普通摄像头免费做眼动追踪:eyeLike 零成本快速上手指南 【免费下载链接】eyeLike A webcam based pupil tracking implementation. 项目地址: https://gitcode.com/gh_mirrors/ey/eyeLike eyeLike 是一个用 OpenCV(最常见的图像库)写…

作者头像 李华