当前位置:网站首页>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.
边栏推荐
- HTC using official firmware as bottom bag made ROM brush card bag tutorial
- One thing to say, is outsourcing company worth it?
- MATLAB program design and application 2.4 Common internal functions of MATLAB
- The old music player WinAmp released version 5.9 RC1: migrated to VS 2019, completely rebuilt, compatible with Win11
- Short-circuit characteristics and protection of SiC MOSFETs
- PCB叠层设计
- AI 自动写代码插件 Copilot(副驾驶员)
- Realize serial port receiving data based on STM32 ring queue
- Verilog implements a divide-by-9 with a duty cycle of 5/18
- 顺序表的实现
猜你喜欢

Basic configuration of OSPFv3

Go mode tidy reports an error go warning “all” matched no packages

高效并发:Synchornized的锁优化详解

C#中引用类型的变量做为参数在方法调用时加不加 ref 关键字的不同之处

Socket Review and I/0 Model

Realize serial port receiving data based on STM32 ring queue

Bika LIMS open source LIMS set - use of SENAITE (detection process)

Unity-通过预制件和克隆方法动态实现各个UGUI下控件的创建和显示

PCB stackup design

Collation of knowledge points in Ningbo University NBU IT project management final exam
随机推荐
顺序表的实现
#yyds dry goods inventory# Interview must brush TOP101: the entry node of the ring in the linked list
HTC using official firmware as bottom bag made ROM brush card bag tutorial
关注!海泰方圆加入《个人信息保护自律公约》
Realize serial port receiving data based on STM32 ring queue
老牌音乐播放器 WinAmp 发布 5.9 RC1 版:迁移到 VS 2019 完全重建,兼容 Win11
How to identify fake reptiles?
求n以内的素数
LevelSequence source code analysis
Chapter VII
Document management and tools in the development process
每月一书(202207):《Swift编程权威指南》
有一说一,外包公司到底值不值得去?
Student management system on the first day: complete login PyQt5 + MySQL5.8 exit the operation logic
Golang must know the Go Mod command
Efficient Concurrency: A Detailed Explanation of Synchornized's Lock Optimization
c语言解析json字符串(json对象转化为字符串)
Qualcomm cDSP simple programming example (to query Qualcomm cDSP usage, signature), RK3588 npu usage query
二叉树非递归遍历
【公开课预告】:超分辨率技术在视频画质增强领域的研究与应用