首页 > 其他分享 >protobuf 在嵌入式ARM平台的应用(c语言版)

protobuf 在嵌入式ARM平台的应用(c语言版)

时间:2024-04-19 18:57:00浏览次数:25  
标签:protoc protobuf make MB04RSP message 序列化 ARM 语言版

一、PC上安装protobuf和protobuf-c

1. 安装protobuf

  protocolbuffers 仓库地址 :https://github.com/protocolbuffers/protobuf

  本文选择下载 v21.12版本(太新版本 protobuf-c可能不支持)

$ cd protobuf-21.12
$ ./autogen.sh
$ ./configure  #默认安装路径/usr/local/
$ make 
$ sudo make install 

 

2. 安装protobuf-c

仓库地址:https://github.com/protobuf-c/protobuf-c

 

$ git clone https://github.com/protobuf-c/protobuf-c.git
$ cd protobuf-c
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

 

会生成 /usr/local/bin/protoc-c 和  /usr/local/bin/protoc-gen-c ,用于根据.proto 生成 c 源码。

二、交叉编译protobuf-c库

#重新进入 protobuf-c 目录
$ make clean #清除之前的配置
$ ./configure --host=arm-none-linux-gnueabihf CC=arm-none-linux-gnueabihf-gcc CXX=arm-none-linux-gnueabihf-g++ --disable-protoc --prefix=$PWD/tmp
$ make 
$ make install

会生成lib和include,其中libprotobuf-c.so* 需要拷贝到ARM开发板中(如/lib下)。

三、protobuf 试用

1. 创建 msg.proto 文件

syntax = "proto3";

message MB04RSP
{
  string name = 1;
  uint32 addr = 2;
  uint32 num  = 3;
  repeated uint32 data = 4;
}

2. protoc 生成 c 代码

$ protoc --c_out=. msg.proto

结果会自动生成 msg.pb-c.c 和 msg.pb-c.h

3. 主要API

   msg.pb-c.h中列出了消息结构序列化、反序列化的API。

/* 初始化MB04RSP消息结构体 */
void   mb04_rsp__init
                     (MB04RSP         *message);

/* 将消息体 message 序列化到 out 缓冲区 ,返回序列化后字节长度 */
size_t mb04_rsp__pack
                     (const MB04RSP   *message,
                      uint8_t             *out);

/* 从缓冲区data 反序列化 到消息结构 MB04RSP, 返回结构体指针(指向内存默认为堆) */
MB04RSP *
       mb04_rsp__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);

/* 释放保存反序列化返回的结构体内存 */
void   mb04_rsp__free_unpacked
                     (MB04RSP *message,
                      ProtobufCAllocator *allocator);

交叉编译app时记得连接第二节生成的 ARM平台库 libprotobuf-c.so*。

 

参考博文:  https://blog.csdn.net/zhengnianli/article/details/110914259

标签:protoc,protobuf,make,MB04RSP,message,序列化,ARM,语言版
From: https://www.cnblogs.com/rtthread/p/18146554

相关文章

  • HarmonyOS NEXT应用开发之深色模式适配
    介绍本示例介绍在开发应用以适应深色模式时,对于深色和浅色模式的适配方案,采取了多种策略如下:固定属性适配:对于部分组件的颜色属性,如背景色或字体颜色,若保持不变,可直接设定固定色值或引用固定的资源文件。双资源目录适配:在resources目录下新增dark子目录,用于存放深色模式下的特......
  • HarmonyOS NEXT应用开发之异常处理案例
    介绍本示例介绍了通过应用事件打点hiAppEvent获取上一次应用异常信息的方法,主要分为应用崩溃、应用卡死以及系统查杀三种。效果图预览使用说明:点击构建应用崩溃事件,3s之后应用退出,然后打开应用进入应用异常页面,隔1min左右后,显示上次异常退出信息。点击构建应用卡死事件,需手......
  • 鸿蒙HarmonyOS实战-ArkUI动画(布局更新动画)
    ......
  • HarmonyOS NEXT应用开发之多层嵌套类对象监听
    介绍本示例介绍使用@Observed装饰器和@ObjectLink装饰器来实现多层嵌套类对象属性变化的监听。效果图预览使用说明加载完成后显示商品列表,点击刷新按钮可以刷新商品图片和价格。实现思路创建FistGoodsModel类,类对象是用@Observed修饰的类SecondGoodsItemList,SecondGoods......
  • HarmonyOS NEXT应用开发之使用AKI轻松实现跨语言调用
    介绍针对JS与C/C++跨语言访问场景,NAPI使用比较繁琐。而AKI提供了极简语法糖使用方式,一行代码完成JS与C/C++的无障碍跨语言互调,使用方便。本示例将介绍使用AKI编写C++跨线程调用JS函数场景。通过调用C++全局函数,创建子线程来调用JS函数,实现对变量value的加10操作,为开发者使用AKI提......
  • 鸿蒙HarmonyOS实战-ArkUI组件(Canvas)
    ......
  • HarmonyOS NEXT应用开发之Tab组件实现增删Tab标签
    介绍本示例介绍使用了Tab组件实现自定义增删Tab页签的功能。该场景多用于浏览器等场景。效果图预览使用说明:点击新增按钮,新增Tab页面。点击删除按钮,删除Tab页面。实现思路设置Tab组件的barHeight为0,隐藏组件自带的TabBar。Tabs(){...}.barHeight(0)//隐藏tab......
  • vscode+gdbserver远程调试ARM环境搭建
     一、编译gdbserver1.下载gdb  http://ftp.gnu.org/gnu/gdb/2.解压缩  tarxfgdb-8.0.tar.xz3.交叉编译  cdgdb/gdbserver/ ./configure--host=arm-none-linux-gnueabihf--target=arm-none-linux-gnueabihf--program-prefix=arm-none-linux-gnueabihf-......
  • Mac(M1)配置基于ARM64的Tensorflow
    以下步骤最好先执行condaconfig--remove-keychannels 删除conda镜像源pipconfigunsetglobal.index-url 删除pip镜像源然后接下来的步骤最好挂上梯子。1.下载miniforge:从https://github.com/conda-forge/miniforge上找到arm64(AppleSilicon)版本进行下载,下一步下一步的......
  • 在pycharm里边怎么设置代码背景图的?
    大家好,我是Python进阶者。一、前言前几天在Python白银交流群【Kim】问了一个Python问题,然后他发出来的代码如下图所示:可以看到代码中有背景图,是不是看上去蛮高大上的?那么这个背景图是怎么加上去的呢?这里给大家介绍一下方法。二、实现过程这里【Kim】说到,这个是我vsode使用的......