嵌入式平台stm32移植protobuf

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

在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

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值