nanopb/nanopb

GitHub: nanopb/nanopb

nanopb 是一个专为嵌入式系统设计的轻量级 ANSI C Protocol Buffers 实现,解决微控制器等内存受限环境下的数据序列化问题。

Stars: 5234 | Forks: 994

# Nanopb - 用于嵌入式系统的 Protocol Buffers ![最新变更](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/cd90ff83d7142933.svg) ![每周构建](https://github.com/nanopb/nanopb/actions/workflows/trigger_on_schedule.yml/badge.svg) Nanopb 是一个代码体积小巧的 ANSI C Protocol Buffers 实现。它特别适用于微控制器,但也适用于任何内存受限的系统。 * **主页:** https://jpa.kapsi.fi/nanopb/ * **Git 仓库:** https://github.com/nanopb/nanopb/ * **文档:** https://jpa.kapsi.fi/nanopb/docs/ * **论坛:** https://groups.google.com/forum/#!forum/nanopb * **稳定版下载:** https://jpa.kapsi.fi/nanopb/download/ * **预发布二进制包:** https://github.com/nanopb/nanopb/actions/workflows/binary_packages.yml ## 使用 nanopb 库 要使用 nanopb 库,你需要做两件事: 1. 使用 `protoc` 为 nanopb 编译你的 .proto 文件。 2. 在你的项目中包含 *pb_encode.c*、*pb_decode.c* 和 *pb_common.c*。 最简单的入门方式是研究 “examples/simple” 中的项目。 它包含一个 Makefile,应该能在大多数 Linux 系统上直接运行。 但是,对于任何其他类型的构建系统,请参阅该文件夹中 README.txt 里的手动步骤。 ## 生成头文件 Protocol Buffers 消息定义在 `.proto` 文件中,该文件遵循与所有 Protocol Buffers 库兼容的标准格式。要在 nanopb 中使用它,你需要从中生成 `.pb.c` 和 `.pb.h` 文件: ``` python generator/nanopb_generator.py myprotocol.proto # For source checkout generator-bin/nanopb_generator myprotocol.proto # For binary package ``` (注意:关于 nanopb-0.3.9.x 及更旧版本的说明,请参阅[此处](https://github.com/nanopb/nanopb/blob/maintenance_0.3/README.md)该特定版本的文档) 适用于 Windows、Linux 和 Mac OS X 的二进制包应包含所有必要的依赖项,包括 Python、python-protobuf 库和 protoc。如果你使用的是 git 检出或普通源代码分发,则需要单独安装 Python。安装 Python 后,你可以使用 `pip install --upgrade protobuf grpcio-tools` 安装其他依赖项。 你可以通过创建 `.options` 文件来进一步自定义头文件的生成。 详情请参阅[文档](https://jpa.kapsi.fi/nanopb/docs/concepts.html#modifying-generator-behaviour)。 ## 运行测试 如果你想进一步开发 nanopb 核心,或者使用你的编译器和平台验证其功能,你需要运行测试套件。测试套件的构建规则是使用 Scons 实现的,因此你需要安装它(例如:`sudo apt install scons` 或 `pip install scons`)。 要运行测试: ``` cd tests scons ``` 这将显示各种测试用例的进度。如果输出没有以错误结束,则说明测试用例成功了。 注意:Mac OS X 默认将 'clang' 别名为 'gcc',但实际上并不支持与 gcc 相同的命令行选项。要在 Mac OS X 上运行测试,请使用:`scons CC=clang CXX=clang++`。同样的方法也可用于在任何平台上使用不同的编译器运行测试。 对于嵌入式平台,目前支持在 STM32 discovery 板和 [simavr](https://github.com/buserror/simavr) AVR 模拟器上运行测试。使用 `scons PLATFORM=STM32` 和 `scons PLATFORM=AVR` 来运行这些测试。 ## 构建系统和集成 Nanopb 的 C 代码本身设计为可移植且易于在任何平台上构建。通常更大的障碍是运行生成器,即接收 `.proto` 文件并输出 `.pb.c` 定义的工具。 现有针对多种系统的构建规则: * **Makefiles**: `extra/nanopb.mk`,参见 `examples/simple` * **CMake**: `extra/FindNanopb.cmake`,参见 `examples/cmake` * **SCons**: `tests/site_scons`(仅限生成器) * **Bazel**: 源码根目录下的 `BUILD.bazel` * **Conan**: 源码根目录下的 `conanfile.py` * **Meson**: 源码根目录下的 `meson.build` * **PlatformIO**: https://platformio.org/lib/show/431/Nanopb * **PyPI/pip**: https://pypi.org/project/nanopb/ * **vcpkg**: https://vcpkg.io/en/package/nanopb 以及针对平台接口的集成: * **Arduino**: http://platformio.org/lib/show/1385/nanopb-arduino * **Zephyr**: https://docs.zephyrproject.org/latest/services/serialization/nanopb.html
标签:ANSI C, Bash脚本, IoT, LangChain, Protobuf, Protocol Buffers, 代码生成器, 低功耗, 客户端加密, 客户端加密, 嵌入式系统, 序列化, 开源库, 微控制器, 搜索引擎爬虫, 数据交换, 轻量级, 逆向工具, 通信协议, 预握手