当前位置:网站首页>基于RT1052 Aworks nanopb string 类型固定长度使用方式(二十七)
基于RT1052 Aworks nanopb string 类型固定长度使用方式(二十七)
2022-07-31 21:34:00 【嵌入式实操】
本文主要是通过迁移的思维,记录本人初次使用周立功的Aworks框架进行开发
本文在Aworks上使用nanopb库对string类型使用限制最大长度
1. 定义string消息协议
// A very simple protocol definition, consisting of only
// one message.
syntax = "proto2";
package com.bst.modules.iot.proto;
import "nanopb.proto";
message LaneStatus {
bool showLane = 1; //true:显示/ false:隐藏
string laneBackInfo = 2 [(nanopb).max_size = 128]; //车道背景信息
string laneSelectInfo = 3 [(nanopb).max_size = 128]; //车道前景信息
}
使用如下命令进行编译
..\..\generator-bin\protoc --nanopb_out=. simple.proto
最终生成的结构体
/* Struct definitions */
typedef struct _com_bst_modules_iot_proto_LaneStatus {
bool showLane; /* true:显示/ false:隐藏 */
char laneBackInfo[128]; /* 车道背景信息 */
char laneSelectInfo[128]; /* 车道前景信息 */
} com_bst_modules_iot_proto_LaneStatus;
2.测试代码
int lane_status_test_main()
{
/* This is the buffer where we will store our message. */
uint8_t buffer[128] = {
0};
size_t message_length = 0;
bool status;
/* Encode our message */
{
/* 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! * It is a good idea to always initialize your structures * so that you do not have garbage data from RAM in there. */
com_bst_modules_iot_proto_LaneStatus sign = com_bst_modules_iot_proto_LaneStatus_init_zero;
/* 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 */
sign.showLane = true;
memcpy(sign.laneBackInfo, "laneBackInfo", strlen("laneBackInfo"));
memcpy(sign.laneSelectInfo, "laneSelectInfo", strlen("laneSelectInfo"));
/* Now we are ready to encode the message! */
status = pb_encode(&stream, com_bst_modules_iot_proto_LaneStatus_fields, &sign);
message_length = stream.bytes_written;
aw_kprintf("message_length: %d\n", stream.bytes_written);
/* Then just check for any errors.. */
if (!status)
{
aw_kprintf("Encoding failed: %s\n", PB_GET_ERROR(&stream));
return 1;
}
}
/* Now we could transmit the message over network, store it in a file or * wrap it to a pigeon's leg. */
/* But because we are lazy, we will just decode it immediately. */
{
/* Allocate space for the decoded message. */
com_bst_modules_iot_proto_LaneStatus message = com_bst_modules_iot_proto_LaneStatus_init_zero;
/* 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, com_bst_modules_iot_proto_LaneStatus_fields, &message);
/* Check for errors... */
if (!status)
{
aw_kprintf("Decoding failed: %s\n", PB_GET_ERROR(&stream));
return 1;
}
/* Print the data contained in the message. */
aw_kprintf("Your showLane was %d!\n", (int)message.showLane);
aw_kprintf("Your laneBackInfo was %s!\n", (int)message.laneBackInfo);
aw_kprintf("Your laneSelectInfo was %s!\n", (int)message.laneSelectInfo);
}
return 0;
}
3. 验证
AWorks for i.MX RT1050, build Mar 1 2022
AWorks SDK Version is 2.1.2 <2020-09-30>
current time: 1970-01-01 01:35:37
Appl|AWorks->>> ication Start.
message_length: 32
Your showLane was 1!
Your laneBackInfo was laneBackInfo!
Your laneSelectInfo was laneSelectInfo!
4. 总结
固定长度解析比动态长度解析简单多了。
边栏推荐
- 【愚公系列】2022年07月 Go教学课程 025-递归函数
- Judging decimal points and rounding of decimal operations in Golang
- How to get useragent
- Given an ip address, how does the subnet mask calculate the network number (how to get the ip address and subnet mask)
- Arduino框架下STM32全系列开发固件安装指南
- Shell script quick start to actual combat -02
- Basic configuration of OSPFv3
- flowable workflow all business concepts
- Carbon教程之 基本语法入门大全 (教程)
- Douyin fetches video list based on keywords API
猜你喜欢

flowable workflow all business concepts

In Golang go-redis cluster mode, new connections are constantly created, and the problem of decreased efficiency is solved

Socket Review and I/0 Model

C程序设计-方法与实践(清华大学出版社)习题解析

高通cDSP简单编程例子(实现查询高通cDSP使用率、签名),RK3588 npu使用率查询

IDA PRO中汇编结构体识别

Realization of character makeup
![[Code Hoof Set Novice Village 600 Questions] Leading to the combination of formulas and programs](/img/91/63d4f7869e0a55d19701c5ca5c9ed8.png)
[Code Hoof Set Novice Village 600 Questions] Leading to the combination of formulas and programs

【公开课预告】:超分辨率技术在视频画质增强领域的研究与应用

高效并发:Synchornized的锁优化详解
随机推荐
In Golang go-redis cluster mode, new connections are constantly created, and the problem of decreased efficiency is solved
Realization of character makeup
登录业务实现(单点登录+微信扫码+短信服务)
顺序表的实现
Talking about the algorithm security of network security
【公开课预告】:超分辨率技术在视频画质增强领域的研究与应用
Shell 脚本 快速入门到实战 -02
Financial profitability and solvency indicators
OSPFv3的基本配置
Commonly used security penetration testing tools (penetration testing tools)
20. Support vector machine - knowledge of mathematical principles
老牌音乐播放器 WinAmp 发布 5.9 RC1 版:迁移到 VS 2019 完全重建,兼容 Win11
利用反射实现一个管理对象信息的简单框架
Chapter VII
Mobile web development 02
ReentrantLock原理(未完待续)
spark reports an error OutOfMemory "recommended collection"
Niuke.com brush questions (1)
BM5 合并k个已排序的链表
统计UTF-8字符串中的字符函数