把手和手把的区别(把手和手把一样吗)

前言

之前共享了两个关于Protobuf的注释:

Protobuf :更小、更快、更高效的协议

共享protobuf-c在嵌入式Linux平台上的使用案例

让我们来看看Protobuf在STM32平台上的使用。

nanopb简介

之前的文章中介绍的Protobuf-c相似,但nanopb也是轻量级且支持c语言的Protobuf。

nanopb的下载地址:

359 JPA.Kapsi.Fi /北约PB /下载/

在此使用nanopb-0.3.8-windows-x86。 目录:

nanopb在STM32上的使用

首先,准备可以串行打印的STM32项目。 示例:

在项目目录下创建新的Protobuf文件夹,在nanopb-0.3.8-windows-x86目录下创建以下7个文件

英格兰乙组联赛

公众号

PB _通用

PB _解码

PB _解码

Pb编码格式

PB _编码

复制到Protobuf文件夹:

在第一篇关于protobuf的文章中,protobuf的中心是. proto文件,您可以定制. proto以创建协议数据,然后使用protoc工具编译并生成c代码。 有两个文件:头文件和源文件。

其中,protoc工具位于我们下载的nanopb-0.3.8-windows-x86的生成器- BBD LT文件夹中。

必须将包含protoc.exe的路径添加到环境变量中,才能在命令行的任何路径中使用protoc工具。 这条路径如下。

c : \纳米PB-0.3.8-windows-x86 \生成器- BBD lt

将此路径添加到环境变量:

2d42f4f9098a91e4a411a0c20?from=pc”>

下面,我们在Protobuf文件夹中创建一个student.proto文件:

这个文件的内容我们编写为:

syntax = “proto2”;

message Student
{
required uint32 num      = 1;
required uint32 py_score = 2;
required uint32 c_score  = 3;
}

然后win+r组合键进入运行窗口,输入cmd进入命令行;在命令行cd进入student.proto所在目录;输入如下命令编译student.proto:

protoc –nanopb_out=. student.proto

生成student.pb.c与student.pb.h文件:

把Protobuf文件夹里的文件添加到mdk工程并增加头文件搜索路径:

编译,无误:

编写测试代码:

// 微信公众号:嵌入式大杂烩
void protobuf_test(void)
{
 uint8_t buffer[64] = {0};
 Student pack_stu = {0};
 pb_ostream_t o_stream = {0};
 Student unpack_stu = {0};
 pb_istream_t i_stream = {0};

 // 组包
 pack_stu.num  = 88;
 pack_stu.py_score = 90;
 pack_stu.c_score = 99;
 o_stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
 pb_encode(&o_stream, Student_fields, &pack_stu);

 // 解包
 i_stream = pb_istream_from_buffer(buffer, sizeof(buffer));
 pb_decode(&i_stream, Student_fields, &unpack_stu);
 printf(“unpack_stu.num = %d\n”, unpack_stu.num);
 printf(“unpack_stu.py_score = %d\n”, unpack_stu.py_score);
 printf(“unpack_stu.c_score = %d\n”, unpack_stu.c_score);
}

demo很简单,组包就是构造一个协议数据结构体,调用pack组包接口往buffer中扔数据;解包正好是反过来,从buffer中拿数据放到结构体里。其中,组包相关的函数在pb_encode.c飞艇稳赚不赔的打法1f80?from=pc”>

把Protobuf文件夹里的文件添加到mdk工程并增加头文件搜索路径:

编译,无误:

编写测试代码:

// 微信公众号:嵌入式大杂烩
void protobuf_test(void)
{
 uint8_t buffer[64] = {0};
 Student pack_stu = {0};
 pb_ostream_t o_stream = {0};
 Student unpack_stu = {0};
 pb_istream_t i_stream = {0};

 // 组包
 pack_stu.num  = 88;
 pack_stu.py_score = 90;
 pack_stu.c_score = 99;
 o_stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
 pb_encode(&o_stream, Student_fields, &pack_stu);

 // 解包
 i_stream = pb_istream_from_buffer(buffer, sizeof(buffer));
 pb_decode(&i_stream, Student_fields, &unpack_stu);
 printf(“unpack_stu.num = %d\n”, unpack_stu.num);
 printf(“unpack_stu.py_score = %d\n”, unpack_stu.py_score);
 printf(“unpack_stu.c_score = %d\n”, unpack_stu.c_score);
}

demo很简单,组包就是构造一个协议数据结构体,调用pack组包接口往buffer中扔数据;解包正好是反过来,从buffer中拿数据放到结构体里。其中,组包相关的函数在pb_encode.c中,解包相关的函数在pb_decode.c中,感兴趣的小伙伴可自行阅读。

编译、下载验证:

以上就是本次关于nanopb在STM32上的使用的笔记介绍,如有错误欢迎指出,谢谢!

如果文章对你有帮助,麻烦帮忙转发,谢谢大家!


1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。私信回复1024,即可免费获取!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注