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

Lua版本应用运行框架

一、名词解释

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秒后才开始处理串口数据呢?”

  • 发表于 2019-08-21 17:42
  • 阅读 ( 2617 )
  • 分类:默认分类

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
朱天华

软件工程师

19 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章