当前位置:网站首页>Fixed-length usage of nanopb string type based on RT1052 Aworks (27)
Fixed-length usage of nanopb string type based on RT1052 Aworks (27)
2022-07-31 22:10:00 【Embedded practice】
本文主要是通过迁移的思维,记录本人初次使用周立功的Aworks框架进行开发
本文在Aworks上使用nanopb库对stringType usage limit max length
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. 总结
Fixed-length parsing is much simpler than dynamic-length parsing.
边栏推荐
- The article you worked so hard to write may not be your original
- 第六章
- NVIDIA已经开始测试AD106和AD107 GPU核心的显卡产品
- In Golang go-redis cluster mode, new connections are constantly created, and the problem of decreased efficiency is solved
- Returns a zero-length array or empty collection, do not return null
- 有一说一,外包公司到底值不值得去?
- 每月一书(202207):《Swift编程权威指南》
- Socket回顾与I/0模型
- IDA PRO中汇编结构体识别
- find prime numbers up to n
猜你喜欢
[Code Hoof Set Novice Village 600 Questions] Merge two numbers without passing a character array
Chapter VII
角色妆容的实现
NVIDIA has begun testing graphics products with AD106 and AD107 GPU cores
Count characters in UTF-8 string function
OSPFv3的基本配置
ReentrantLock原理(未完待续)
Financial profitability and solvency indicators
[Open class preview]: Research and application of super-resolution technology in the field of video image quality enhancement
Student management system on the first day: complete login PyQt5 + MySQL5.8 exit the operation logic
随机推荐
Mobile web development 02
Flex layout in detail
Carbon教程之 基本语法入门大全 (教程)
Golang - from entry to abandonment
[QNX Hypervisor 2.2 User Manual]9.14 set
A shortcut to search for specific character content in idea
Implementation of a sequence table
Linux environment redis cluster to build "recommended collection"
Qualcomm cDSP simple programming example (to query Qualcomm cDSP usage, signature), RK3588 npu usage query
uni-app中的renderjs使用
求n以内的素数
The principle of ReentrantLock (to be continued)
[Code Hoof Set Novice Village 600 Questions] Merge two numbers without passing a character array
【AcWing】The 62nd Weekly Match 【2022.07.30】
有一说一,外包公司到底值不值得去?
第六章
Arduino框架下STM32全系列开发固件安装指南
Collation of knowledge points in Ningbo University NBU IT project management final exam
角色妆容的实现
关注!海泰方圆加入《个人信息保护自律公约》