当前位置:网站首页>基于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. 总结
固定长度解析比动态长度解析简单多了。
边栏推荐
- UVM RAL model and built-in seq
- Short-circuit characteristics and protection of SiC MOSFETs
- AI automatic code writing plugin Copilot (co-pilot)
- Given an ip address, how does the subnet mask calculate the network number (how to get the ip address and subnet mask)
- Count characters in UTF-8 string function
- Niuke.com brush questions (1)
- idea中搜索具体的字符内容的快捷方式
- Poker Game in C# -- Introduction and Code Implementation of Blackjack Rules
- grep command written test questions
- The old music player WinAmp released version 5.9 RC1: migrated to VS 2019, completely rebuilt, compatible with Win11
猜你喜欢
The article you worked so hard to write may not be your original
ECCV 2022 Huake & ETH propose OSFormer, the first one-stage Transformer framework for camouflaging instance segmentation!The code is open source!...
Qualcomm cDSP simple programming example (to query Qualcomm cDSP usage, signature), RK3588 npu usage query
Made with Flutter and Firebase!counter application
GAC Honda Safety Experience Camp: "Danger" is the best teacher
The principle of ReentrantLock (to be continued)
支付模块实现
基于STM32 环形队列来实现串口接收数据
Flink_CDC construction and simple use
Arduino框架下STM32全系列开发固件安装指南
随机推荐
每月一书(202207):《Swift编程权威指南》
leetcode 665. Non-decreasing Array 非递减数列(中等)
sqlite3简单操作
财务盈利、偿债能力指标
linux view redis version command (linux view mysql version number)
Realization of character makeup
JS basic exercises
IDA PRO中汇编结构体识别
Socket Review and I/0 Model
What is Thymeleaf?How to use.
Apache EventMesh distributed event-driven multi-runtime
grep命令 笔试题
架构实战营模块八作业
How to debug TestCafe
multithreaded lock
Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...
高通cDSP简单编程例子(实现查询高通cDSP使用率、签名),RK3588 npu使用率查询
"The core concept of" image classification and target detection in the positive and negative samples and understanding architecture
ThreadLocal
-xms -xmx(information value)