一起玩转 LiteOS 组件:TinyFrame
摘要:TinyFrame 是一个简单的用于解析串口(如 UART、telnet、套接字等)通信数据帧的库。
本文分享自华为云社区《LiteOS组件尝鲜—玩转TinyFrame》,作者:Lionlace。
基本介绍
TinyFrame 是一个简单的用于解析串口(如 UART、telnet、套接字等)通信数据帧的库。它可以灵活处理通信双方之间的消息会话、响应侦听者、校验及超时问题。该库允许注册侦听器(以回调函数形式)用于等待:任何帧、特定帧类型以及特定消息 ID,这种高通用性的 API 可以满足绝大部分通信场景。
功能概览
帧结构
每个帧由帧头和 payload 组成。这两个部分都可以通过校验和来保护,以排除格式错误的报头(例如,错误的字段长度)或 payload 损坏的帧。帧中的所有字段大小都是可配置的。例如,用户可以更改配置文件中的某个字段 TF_LEN_BYTES 为不同值(1、2 或 4)。
消息监听
TinyFrame 有 3 种侦听器类型,按优先顺序排列:
ID 侦听器—等待响应
类型侦听器—等待给定类型字段的消息
通用侦听器—回退
数据缓冲
TinyFrame 使用两个数据缓冲区:一个小的发送缓冲区和一个较大的接收缓冲区。发送缓冲区用于准备要发送的字节,可以一次全部发送;如果缓冲区不够大,则以循环方式发送。缓冲区必须只包含整个帧头,例如对于短消息,32 字节即可。
使用说明
LiteOS 中提供了 TinyFrameDemoTask 来演示如何使用 TinyFrame 组件。目前支持在以下开发板上运行 TinyFrameDemoTask。
STM32F769
STM32F429
realview-pbx-a9
qemu-virt-a53
接下来以 TinyFrameDemo 为例介绍 TinyFrame 的使用。
解析 TinyFrame Demo
在 TinyFrame_demo.c 中主要实现 3 个功能:
不带侦听器和结构的发送 TF_SendSimple();
发送时侦听器正在等待答复,但不使用结构 TF_QuerySimple();
不带侦听器发送 TF_Send()。
使能 TinyFrame Demo
在 LiteOS 源码根目录下执行 make menuconfig 命令,按如下菜单路径使能
使能 TinyFrame Demo 后会自动使能 TinyFrame 组件。
保存退出后,会从 github 上自动下载 TinyFrame 源代码,并从 gitee 上下载适配 LiteOS 系统的 patch 包,并打入 patch。
编译运行 TinyFrame Demo
操作步骤如下:
参照上述使能 TinyFrame demo。
在 Linux 主机的 LiteOS 源码根目录下执行 make clean ; make -j 命令编译 LiteOS 工程,编译成功后将在~/Huawei_LiteOS/out/${platform}/lib 目录下生成 TinyFrame 的库文件 libTinyFrame.a 和此 Demo 库文件 libTinyFrame_demo.a,系统镜像文件为 Huawei_LiteOS.bin。以 realview-pbx-a9/开发板为例,其目录就是 out/realview-pbx-a9/。
执行 qemu-system-arm -machine realview-pbx-a9 -smp 4 -m 512M -kernel out/realview-pbx-a9/Huawei_LiteOS.bin -nographic 命令后,可以看到串口输出 Demo 部分运行结果,如下所示。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/24464915df2c9d3837027bdc1】。文章转载请联系作者。
评论