写点什么

一起玩转 LiteOS 组件:TinyFrame

  • 2022 年 1 月 28 日
  • 本文字数:1791 字

    阅读完需:约 6 分钟

摘要:TinyFrame 是一个简单的用于解析串口(如 UART、telnet、套接字等)通信数据帧的库。


本文分享自华为云社区《LiteOS组件尝鲜—玩转TinyFrame》,作者:Lionlace。

基本介绍


TinyFrame 是一个简单的用于解析串口(如 UART、telnet、套接字等)通信数据帧的库。它可以灵活处理通信双方之间的消息会话、响应侦听者、校验及超时问题。该库允许注册侦听器(以回调函数形式)用于等待:任何帧、特定帧类型以及特定消息 ID,这种高通用性的 API 可以满足绝大部分通信场景。

功能概览

帧结构​


每个帧由帧头和 payload 组成。这两个部分都可以通过校验和来保护,以排除格式错误的报头(例如,错误的字段长度)或 payload 损坏的帧。帧中的所有字段大小都是可配置的。例如,用户可以更改配置文件中的某个字段 TF_LEN_BYTES 为不同值(1、2 或 4)。


,-----+-----+-----+------+------------+- - - -+-------------,| SOF | ID | LEN | TYPE | HEAD_CKSUM | DATA | DATA_CKSUM || 0-1 | 1-4 | 1-4 | 1-4 | 0-4 | ... | 0-4 | <- size (bytes)'-----+-----+-----+------+------------+- - - -+-------------'SOF ......... start of frame, usually 0x01 (optional, configurable)ID ......... the frame ID (MSb is the peer bit)LEN ......... number of data bytes in the frameTYPE ........ message type (used to run Type Listeners, pick any values you like)HEAD_CKSUM .. header checksumDATA ........ LEN bytes of dataDATA_CKSUM .. data checksum (left out if LEN is 0)
复制代码

消息监听​


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 个功能:

  1. 不带侦听器和结构的发送 TF_SendSimple()

  2. 发送时侦听器正在等待答复,但不使用结构 TF_QuerySimple()

  3. 不带侦听器发送 TF_Send()

使能 TinyFrame Demo​


在 LiteOS 源码根目录下执行 make menuconfig 命令,按如下菜单路径使能


TinyFrame Demo。Demos --->Utility Demo --->[*] Enable TinyFrame Demo (NEW)
复制代码


使能 TinyFrame Demo 后会自动使能 TinyFrame 组件。


保存退出后,会从 github 上自动下载 TinyFrame 源代码,并从 gitee 上下载适配 LiteOS 系统的 patch 包,并打入 patch。

编译运行 TinyFrame Demo​


操作步骤如下:

  1. 参照上述使能 TinyFrame demo。

  2. 在 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/。

  3. 执行 qemu-system-arm -machine realview-pbx-a9 -smp 4 -m 512M -kernel out/realview-pbx-a9/Huawei_LiteOS.bin -nographic 命令后,可以看到串口输出 Demo 部分运行结果,如下所示。


********Hello Huawei LiteOS********LiteOS Kernel Version : 5.1.0Processor : Cortex-A9 * 4Run Mode : SMPGIC Rev : GICv1build time : Dec 20 2021 11:30:07**********************************main core booting up...OsAppInitreleasing 3 secondary corescpu 0 entering schedulercpu 3 entering schedulercpu 2 entering schedulercpu 1 entering schedulerapp init!TinyFrame demo task start to run.--------------------TF_WriteImpl - sending frame:1 01 .128 80 .0 00 .7 07 .1 01 .240 F0 .215 D7 .108 6C l105 69 i116 74 t101 65 e111 6F o115 73 s0 00 .213 D5 .30 1E .--- end of frame ---GenericListener demoFrame infotype: 01hdata: "liteos"len: 7id: 80h--------------------.........
复制代码


点击关注,第一时间了解华为云新鲜技术~

发布于: 21 分钟前阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
一起玩转LiteOS组件:TinyFrame