当前位置:网站首页>基于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. 总结
固定长度解析比动态长度解析简单多了。
边栏推荐
- sqlite3简单操作
- C程序设计-方法与实践(清华大学出版社)习题解析
- Getting Started with Tkinter
- 【论文精读】iNeRF
- BM3 flips the nodes in the linked list in groups of k
- [PIMF] OpenHarmony Thesis Club - Inventory of the open source Hongmeng tripartite library [3]
- How to get useragent
- 【AcWing】The 62nd Weekly Match 【2022.07.30】
- Golang must know the Go Mod command
- Talking about the algorithm security of network security
猜你喜欢
财务盈利、偿债能力指标
老牌音乐播放器 WinAmp 发布 5.9 RC1 版:迁移到 VS 2019 完全重建,兼容 Win11
Socket回顾与I/0模型
NVIDIA已经开始测试AD106和AD107 GPU核心的显卡产品
Qualcomm cDSP simple programming example (to query Qualcomm cDSP usage, signature), RK3588 npu usage query
PCB叠层设计
Count characters in UTF-8 string function
How to debug TestCafe
C程序设计-方法与实践(清华大学出版社)习题解析
Arduino框架下STM32全系列开发固件安装指南
随机推荐
AI automatic code writing plugin Copilot (co-pilot)
find prime numbers up to n
STM32 full series development firmware installation guide under Arduino framework
UVM RAL model and built-in seq
Istio introduction
-xms -xmx(information value)
Financial profitability and solvency indicators
&lt;artifactId&gt;ojdbc8&lt;/artifactId&gt;「建议收藏」
Recognize anomalies (you will understand after reading this)
Bika LIMS open source LIMS set - use of SENAITE (detection process)
"The core concept of" image classification and target detection in the positive and negative samples and understanding architecture
What's wrong with the sql syntax in my sql
Golang - from entry to abandonment
sqlite3简单操作
每月一书(202207):《Swift编程权威指南》
cas and spin locks (is lightweight locks spin locks)
Audio alignment using cross-correlation
linux view redis version command (linux view mysql version number)
Basic configuration of OSPFv3
【PIMF】OpenHarmony 啃论文俱乐部—盘点开源鸿蒙三方库【3】