• 欢迎大家分享资料!前往留言板评论即可!

Air系列模块Lua版本应用运行框架概述

合宙 模组资料网 2年前 (2021-05-15) 285次浏览 0个评论 扫描二维码
                        <div style="border-top: none; border-right: none; border-left: none; border-image: initial; border-bottom: 1pt solid rgb(238, 238, 238); padding: 0cm 0cm 4pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">

一、名词解释

1.1Luatask

            core在启动过程中,会创建一系列的task,例如音频、协议栈、串口等

         其中有一个task,用来加载Lua虚拟机,解析运行用户编写的Lua脚本,这个task,我们称之为Luatask(为什么称之为主task呢?因为在Lua脚本中,利用Lua的协程特性封装了一个sys.taskInit接口,借用了task的概念,实际上并不是真正的task;为了和脚本中封装的这种task(协程)区分,所以称core中的taskLuatask

         脚本中的所有应用,都运行在Luatask中,属于单task应用

1.2、外部消息队列

            core创建Luatask时,会为这个task分配一个消息队列,这个队列称之为外部消息队列,core中的其他taskLuatask发送的消息,都存储在这个外部消息队列中

1.3、内部消息队列

            脚本运行时,内部各应用之间,可能需要相互传递消息,这个消息就被存储在内部消息队列中

二、应用运行框架

2.1、运行框架总图

            Air系列模块Lua版本应用运行框架概述

2.2、内部消息队列中的消息处理流

       Air系列模块Lua版本应用运行框架概述

2.3、外部消息队列中的定时器消息处理流

       Air系列模块Lua版本应用运行框架概述

2.4、外部消息队列中的音频播放消息处理流

       Air系列模块Lua版本应用运行框架概述

2.5、外部消息队列中的串口收发消息处理流

       Air系列模块Lua版本应用运行框架概述

Air系列模块Lua版本应用运行框架概述

2.6、外部消息队列中的GPIO中断消息处理流

       Air系列模块Lua版本应用运行框架概述

2.7、外部消息队列中的SOCKET消息处理流(4G模块)

       Air系列模块Lua版本应用运行框架概述

三、常见问题

3.1、为什么Lua版本运行某些功能会有延时

         脚本中的应用属于单task应用,都运行在一个Luatask中,由2.1章节可知,Luatask一直在循环处理内部消息队列和外部消息队列中的消息,消息是先进先出先处理

         即使有新消息到达,插入到内部消息队列或者外部消息队列中,必须等前面所有的消息处理结束,才能处理新消息

         例如:首先产生了一个定时器消息,定时器消息的处理动作(新建一个文件,写500K数据)比较耗时,在写文件的过程中,core中的串口task产生了一个串口接收数据通知消息,虽然可以插入到Luatask的外部消息队列中,但是由于Luatask还在执行写文件的动作,所以串口消息只能等待,问题就表现为“我明明已经向模块串口发送了数据,为什么脚本在3秒后才开始处理串口数据呢?”


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址