nanopb/nanopb
GitHub: nanopb/nanopb
nanopb 是一个专为嵌入式系统设计的轻量级 ANSI C Protocol Buffers 实现,解决微控制器等内存受限环境下的数据序列化问题。
Stars: 5234 | Forks: 994
# Nanopb - 用于嵌入式系统的 Protocol Buffers


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, 代码生成器, 低功耗, 客户端加密, 客户端加密, 嵌入式系统, 序列化, 开源库, 微控制器, 搜索引擎爬虫, 数据交换, 轻量级, 逆向工具, 通信协议, 预握手