分享

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

 袁先森lemon 2020-11-09

一、名词解释

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、运行框架总图

            

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

       

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

       

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

       

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

       


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

       

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

       

三、常见问题

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

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

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多