当前位置:网站首页>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.
边栏推荐
- What's wrong with the sql syntax in my sql
- 支付模块实现
- Architecture Battalion Module 8 Homework
- 「APIO2010」巡逻 题解
- [Open class preview]: Research and application of super-resolution technology in the field of video image quality enhancement
- Several methods of mysql backup table
- Realization of character makeup
- Realize serial port receiving data based on STM32 ring queue
- UserAgent resolution
- How to get useragent
猜你喜欢

Qualcomm cDSP simple programming example (to query Qualcomm cDSP usage, signature), RK3588 npu usage query

角色妆容的实现

嵌入式开发没有激情了,正常吗?

Daily practice——Randomly generate an integer between 1-100 and see how many times you can guess.Requirements: The number of guesses cannot exceed 7 times, and after each guess, it will prompt "bigger"

Bionic caterpillar robot source code

全网一触即发,自媒体人的内容分发全能助手——融媒宝

Arduino框架下STM32全系列开发固件安装指南

Pytest初体验

The latest masterpiece!Alibaba just released the interview reference guide (Taishan version), I just brushed it for 29 days

In Golang go-redis cluster mode, new connections are constantly created, and the problem of decreased efficiency is solved
随机推荐
PCB stackup design
-xms -xmx(information value)
The latest masterpiece!Alibaba just released the interview reference guide (Taishan version), I just brushed it for 29 days
Pytorch lstm time series prediction problem stepping on the pit "recommended collection"
UVM RAL model and built-in seq
Shell script quick start to actual combat -02
ReentrantLock原理(未完待续)
Go mode tidy reports an error go warning “all” matched no packages
sqlite3 simple operation
AI automatic code writing plugin Copilot (co-pilot)
Flex layout in detail
Chapter Six
Summary of the classic drawing method of histogram
求n以内的素数
Implementation of a sequence table
IDA PRO中汇编结构体识别
uni-app中的renderjs使用
Qualcomm cDSP simple programming example (to query Qualcomm cDSP usage, signature), RK3588 npu usage query
C#中引用类型的变量做为参数在方法调用时加不加 ref 关键字的不同之处
iNeuOS industrial Internet operating system, equipment operation and maintenance business and "low-code" form development tools