在stm32项目上移植protobuf
protobuf简介
protobuf是由Google开发的一套对数据结构进行序列化的方法,可用做通信协议,数据存储格式,等等。其特点是不限语言、不限平台、扩展性强,就像XML一样。与XML相比,protobuf更快更小。
和JSON打包数据的作用类似,可以理解成把这个类的所有数据加上帧头帧尾帧校验,然后通过串口,网络等通信格式将数据发送出去,这个过程称为序列化。解包就是把收到序列化的数据反序列化,然后把有效数据放入生成的类中。
在C++下用protobuf传递数据,要先写一个.proto文件,然后在系统环境下编译该文件,或者直接放在CMake里面编译,便可以生成出来一个类(.cpp 和 .h),利用protobuf打包便是打包这个类。
但是并不适合单片机,毕竟平台直接调用库就可以完成,单片机内存本身就比较珍贵,所以如果不是项目需要,我更喜欢字节流或者json。使用protobuf后实际增加内存消耗见下图。

nanopb简介
有聪明的人替我们想到了这个问题,这就是nanopb。nanopb是也是一个轻量的、支持C语言的Protobuf。
下载地址
https://jpa.kapsi.fi/nanopb/download/
下载windows版本(在windows平台更方便,如果你是其他平台自己下载,源码还需要自己重新编译,我没试过)

打开后进入nanopb-0.4.5-windows-x86\nanopb-0.4.5-windows-x86\examples\simple路径,simple例子是最简单的例程,可以根据自己需要修改。
使用的第一步就是先编写 proto文件,这里simple的例子已经给你准备好了。
proto文件是protobuf的核心,使用protoc.exe 工具,将prioto文件生成对应的.c .h文件,然后和
pb.h
pb_common.c
pb_common.h
pb_decode.c
pb_decode.h
pb_encode.c
pb_encode.h
这几个文件一起放到你的stm32工程里就可以了。simple.c文件就是调用这个模块的例程

为了能在命令行中任何路径下使用pr
STM32上移植protobuf与nanopb

本文介绍如何在STM32项目中移植protobuf和轻量级替代方案nanopb,包括编译.proto文件生成C代码的过程,以及如何在STM32上实现数据的序列化与反序列化。
最低0.47元/天 解锁文章
6159





