当前位置:网站首页>基于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. 总结
固定长度解析比动态长度解析简单多了。
边栏推荐
- find prime numbers up to n
- Short-circuit characteristics and protection of SiC MOSFETs
- Efficient Concurrency: A Detailed Explanation of Synchornized's Lock Optimization
- Istio introduction
- TestCafeSummary
- Judging decimal points and rounding of decimal operations in Golang
- Architect 04 - Application Service Encryption Design and Practice
- Implementing a Simple Framework for Managing Object Information Using Reflection
- [Intensive reading of the paper] iNeRF
- Arduino框架下STM32全系列开发固件安装指南
猜你喜欢
随机推荐
grep command written test questions
顺序表的实现
[Intensive reading of the paper] iNeRF
ECCV 2022 Huake & ETH propose OSFormer, the first one-stage Transformer framework for camouflaging instance segmentation!The code is open source!...
MATLAB program design and application 2.4 Common internal functions of MATLAB
find prime numbers up to n
高通cDSP简单编程例子(实现查询高通cDSP使用率、签名),RK3588 npu使用率查询
【AcWing】The 62nd Weekly Match 【2022.07.30】
JS basic exercises
Linux环境redis集群搭建「建议收藏」
Made with Flutter and Firebase!counter application
Go mode tidy reports an error go warning “all” matched no packages
Bika LIMS open source LIMS set - use of SENAITE (detection process)
What's wrong with the sql syntax in my sql
linux查看redis版本命令(linux查看mysql版本号)
Architect 04 - Application Service Encryption Design and Practice
Efficient Concurrency: A Detailed Explanation of Synchornized's Lock Optimization
Implementing a Simple Framework for Managing Object Information Using Reflection
Istio introduction
[Code Hoof Set Novice Village 600 Questions] Merge two numbers without passing a character array