protobuf基于微型嵌入式系统的应用
2015-05-16 21:44
549 查看
智能家居、物联网越来越火热,也是当前的热门应用开发,因此可以预见未来越来越多的微型嵌入式硬件会接入互联网中,因此硬件与服务器的通信就变得越来越重要。
目前谷歌开发的protobuf库由于运行速度快、体积小、用起来更简单等特点。其协议在通信方面使用越来越广泛。对于在主流开发系统上使用protobuf通信只需将.proto利用protoc生成相应的编码文件,然后调用相关的库与接口就可以方便的使用。但如果需要将protobuf应用在嵌入式领域特别是微型嵌入式领域时,而微型系统无法支持庞大的库文件,通信起来看起来变得不那么容易。
下面就介绍protobuf在微型嵌入式领域的解决方案:nanopb
源码下载:https://github.com/nanopb/nanopb
如果不想编译而是想直接使用,请参考下面链接:
http://koti.kapsi.fi/~jpa/nanopb/download/
使用介绍,这里以nanopb-0.3.3 linux下环境为例:
1、解压nanopb-0.3.3-linux-x86.tar.gz
2、进入主目录里面就会有pb_encode、pb_decode、pb_common几个文件,这是几个很重要的文件,用于微型嵌入式开发中对protobuf协议进行编码与解码用的。
3、进入generator-bin目录,里面有protoc可执行文件,可以将proto文件生成微型嵌入式系统用的*pb.c、*pb.h, 这里以项目里面的simple为例:
$../../generator-bin/protoc –nanopb_out=. simple.proto
此时就可以将编译后就生成了相关的pb.c与pb.h文件
4、现在就可以使用了,这里可以通过simple里面的Makefile文件发现编译时需要指定相关的protobuf库,只需要指定第二步所说的几个相关文件就可以生成相关的可执行文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/21/c276aece064faa7bf985637035e06603)
5、simple的源码分析
编码:
解码:
上面的说明很清楚,这里就不在说明。
目前谷歌开发的protobuf库由于运行速度快、体积小、用起来更简单等特点。其协议在通信方面使用越来越广泛。对于在主流开发系统上使用protobuf通信只需将.proto利用protoc生成相应的编码文件,然后调用相关的库与接口就可以方便的使用。但如果需要将protobuf应用在嵌入式领域特别是微型嵌入式领域时,而微型系统无法支持庞大的库文件,通信起来看起来变得不那么容易。
下面就介绍protobuf在微型嵌入式领域的解决方案:nanopb
源码下载:https://github.com/nanopb/nanopb
如果不想编译而是想直接使用,请参考下面链接:
http://koti.kapsi.fi/~jpa/nanopb/download/
使用介绍,这里以nanopb-0.3.3 linux下环境为例:
1、解压nanopb-0.3.3-linux-x86.tar.gz
$tar vxf nanopb-0.3.3-linux-x86.tar.gz
2、进入主目录里面就会有pb_encode、pb_decode、pb_common几个文件,这是几个很重要的文件,用于微型嵌入式开发中对protobuf协议进行编码与解码用的。
3、进入generator-bin目录,里面有protoc可执行文件,可以将proto文件生成微型嵌入式系统用的*pb.c、*pb.h, 这里以项目里面的simple为例:
$../../generator-bin/protoc –nanopb_out=. simple.proto
此时就可以将编译后就生成了相关的pb.c与pb.h文件
4、现在就可以使用了,这里可以通过simple里面的Makefile文件发现编译时需要指定相关的protobuf库,只需要指定第二步所说的几个相关文件就可以生成相关的可执行文件。
5、simple的源码分析
编码:
/* Allocate space on the stack to store the message data. * * Nanopb generates simple struct definitions for all the messages. * - check out the contents of simple.pb.h! */ SimpleMessage message; /* Create a stream that will write to our buffer. */ pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); /* Fill in the lucky number */ 9b1e message.lucky_number = 13; /* Now we are ready to encode the message! */ status = pb_encode(&stream, SimpleMessage_fields, &message); message_length = stream.bytes_written;
解码:
/* Allocate space for the decoded message. */ SimpleMessage message; /* Create a stream that reads from the buffer. */ pb_istream_t stream = pb_istream_from_buffer(buffer, message_length); /* Now we are ready to decode the message. */ status = pb_decode(&stream, SimpleMessage_fields, &message);
上面的说明很清楚,这里就不在说明。
相关文章推荐
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:5.技术简介之Hibernate
- 基于嵌入式Linux 系统的MiniGUI 的移植与应用
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:11.定制化Log输出
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:9.观察者模式
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:0.概述
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:10.项目介绍之架构(2)
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:6.技术简介之Protobuf
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:7.项目介绍之架构(1)
- 浅谈基于ARM与LINUX系统的嵌入式USB主机设计应用案例
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:3.技术简介之MinaFilter——LoggingFilter (转)
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:8.自定义传输协议
- 基于嵌入式Linux的视频采集系统19-----源程序----v4l_driver.h
- 基于嵌入式系统的LCD汉字显示
- Qt/Embedded在嵌入式Linux系统下的移植与应用
- 运用google-protobuf的IM消息应用开发(前端篇)
- 基于框架的应用系统开发(以你开发的系统为原型)的质量属性
- 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(二) 理解消息循环和窗口过程
- Protobuf协议的Java应用例子
- [导入]从架构设计到系统实施——基于.NET 3.0的全新企业应用系列课程(4):设计基于IIS7和AJAX的网站.zip(7.53 MB)
- 基于cubietruck的嵌入式系统移植