一起玩转玩转LiteOS组件:TinyFrame
摘要: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 frame
TYPE ........ message type (used to run Type Listeners, pick any values you like)
HEAD_CKSUM .. header checksum
DATA ........ LEN bytes of data
DATA_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个功能:
- 不带侦听器和结构的发送TF_SendSimple();
- 发送时侦听器正在等待答复,但不使用结构TF_QuerySimple();
- 不带侦听器发送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
操作步骤如下:
- 参照上述使能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部分运行结果,如下所示。
********Hello Huawei LiteOS********
LiteOS Kernel Version : 5.1.0
Processor : Cortex-A9 * 4
Run Mode : SMP
GIC Rev : GICv1
build time : Dec 20 2021 11:30:07
**********************************
main core booting up...
OsAppInit
releasing 3 secondary cores
cpu 0 entering scheduler
cpu 3 entering scheduler
cpu 2 entering scheduler
cpu 1 entering scheduler
app 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 l
105 69 i
116 74 t
101 65 e
111 6F o
115 73 s
0 00 .
213 D5 .
30 1E .
--- end of frame ---
GenericListener demo
Frame info
type: 01h
data: "liteos"
len: 7
id: 80h
--------------------
...
...
...
一起玩转玩转LiteOS组件:TinyFrame的更多相关文章
- 玩转LiteOS组件:玩转Librws
摘要:Librws是一个跨平台的websocket客户端,使用C语言编写. 本文分享自华为云社区<LiteOS组件尝鲜-玩转Librws>,作者: W922 . 本期小编为大家带来Lite ...
- 带你尝鲜LiteOS 组件EasyFlash
摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...
- 为什么说程序员都应该玩一玩GitHub
既熟悉又陌生的GitHub 关于GitHub,相信每一个程序员都再熟悉不过了.它为开发者提供Git仓库的托管服务,是全世界最大的代码集中地,被戏称为“全球最大同性交友网站”. 但是对于很大一部分程序员 ...
- 玩一玩nodejs--一个简单的在线实时填表应用
学习nodejs三天,入了个门,感觉他和jsp.php还是存在较大的差别.本文首先复习这些天学的一些知识点,然后谈一下如何一步一步到做一个在线实时填表的小应用,进一步巩固一下这些个知识点.这里先简单介 ...
- 无语啊,sublime给我弄乱玩,玩坏了,而且安装插件也安装不了
国内的什么插件地址都TMMD失效了,没办法,只能翻"强"到外面找了,而且找了很多也用不了,所以收藏一个为了预防以后不行有补救的方法: 百度的99%都不行,不是报这个错就是那个错,可 ...
- 想挑战AlphaGO吗?先和PostgreSQL玩一玩?? PostgreSQL与人工智能(AI)
1月4日晚,随着古力认输,Master对人类顶尖高手的战绩停留在60胜0负1和,而令人尴尬的是这唯一一场和棋还是因为棋手掉线系统自动判和,并不是棋盘上的局势真的势均力敌了.包括聂卫平.柯洁.朴廷桓.井 ...
- js 玩一玩
闲着没事学了学js,做了一个下页面玩玩. 下面是html代码: <!DOCTYPE html><html> <head> <meta charset=&quo ...
- 玩一玩基于Token的 自定义身份认证+权限管理
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Toke ...
- .NET Core 玩一玩 Ocelot API网关
.net 这几年国内确实不好过. 很多都选择转行.不过.net Core跨平台 开源之后 .社区的生态在慢慢建立.往好的趋势发展. 对于坚守在.NET战线的开发者来说 是个挺不错的消息. 特别是微软 ...
随机推荐
- 【LeetCode】735. Asteroid Collision 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 日期 题目地址:https://leetcode ...
- 前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)
一.背景:页面为何会卡? 1.1 等待时间长(性能) 项目本身包/第三方脚本比较大. JavaScript 执行阻塞页面加载. 图片体积大且多. 特别是对于首屏资源加载中的白屏时间,用户等待的时间就越 ...
- java-git 暂存
在接到需求以后,直接在master上开发了,到提交的时候才想起来忘记新建版本分支了,直接提交到master会影响到其他人. 这时候就想着将本地编辑的代码,没有提交的代码暂存起来,然后新建一个新分支,再 ...
- java-热部署
IDEA热部署方式: spring-boot-devtools JRebel插件 spring-boot-devtools为应用提供一些开发时特性,包括默认值设置,自动重启,livereload等. ...
- element 表格行内进行编辑
<template> <div class="process_manage"> <el-card class="box-card" ...
- Vulnhub实战-rtemis靶机👻
Vulnhub实战-rtemis靶机 下载地址:http://www.vulnhub.com/entry/r-temis-1,649/ 描述 通过描述我们知道这个靶机有两个flag 主机发现 通过nm ...
- 抛砖系列之-MySQL中的数据类型JSON
今天介绍一个MySQL中的数据类型-JSON,相信大家对JSON都不陌生,在日常工作中使用到的频率也很高,话不多说,直接开始. 何谓JSON 看下RFC文档对于JSON的描述 1.基于 JavaScr ...
- ProtoBuf3语法指南(Protocol Buffers)_下
0.说明 ProtoBuf3语法指南, 又称为proto3, 是谷歌的Protocol Buffers第3个版本. 本文基于官方英文版本翻译, 加上了自己的理解少量修改, 一共分为上下两部分. 1.A ...
- Nginx_安装配置
一.安装gcc依赖库 检查是否安装(linux默认是安装了的) gcc –version
- 建造者模式(python)
建造者模式将复杂对象的构建与其表示分离.建造者模式主要有两个参与者:建造者(builder)和指挥者(director) 来自为知笔记(Wiz)