本次我把收藏已久的LuatOS具體應用示例特分享個大家,希望不會Lua又想Open開發(fā)的朋友有收獲。
模組Open開發(fā),我采用的是LuatOS方式,相對C-SDK入門更簡單,開發(fā)更方便,開發(fā)時間上也更快。
有工程師朋友問:
不會Lua又想open開發(fā),怎么辦?
那么Lua先學起來,再看LuatOS具體應用示例,上手極快。感興趣的朋友們,可以參照本文一起學。
Lua視頻教程
無廢話30分鐘Lua快速入門教程:
https://b23.tv/DMaAHQ1
LuatOS文檔教程
資料中心:
https://docs.openluat.com
LuatOS支持的主要模組型號:
Air780E/Air780EX/Air780EP/Air780EPS/
Air201…
可通過資料中心查看對應型號模組的LuatOS二次開發(fā)快速入門教程,內容持續(xù)更新中。
今天,我們先一起看看LuatOS基礎知識:
LuatOS系統(tǒng)通過Lua虛擬機,支持Lua腳本在4G模組的的運行。LuatOS系統(tǒng)還實現(xiàn)了一套多任務的機制,這套機制是在sys庫實現(xiàn)的。
一、sys模塊簡述
sys模塊利用了Lua語言的協(xié)程機制,實現(xiàn)了實時多任務的調度。開發(fā)者可以在業(yè)務代碼中,新建多個任務,而不用像單片機的開發(fā)方式一樣,只能用定時器進行延時。
在開發(fā)LuatOS業(yè)務代碼時,需要在代碼中引用sys庫(_G.sys=require("sys")),并且在代碼的最后一行,調用sys.run()以啟動主程序,使得框架內的任務代碼會在sys.run()中運行。
二、sys模塊的實時多任務機制詳解
01.創(chuàng)建多個并行的任務
如下代碼創(chuàng)建了兩個任務,每個任務都是一個循環(huán),只要循環(huán)不結束,任務就一直在運行。
02.多任務之間互相等待
通過sys模塊的publish和waitUntil調用,實現(xiàn)多個任務之間的同步。
03.多任務之間互相等待并傳遞數(shù)據
04.傳統(tǒng)定時器
三、sys庫接口文檔
01.sys.wait(ms)
Task任務延時函數(shù),只能用于任務函數(shù)中。
返回值:
定時結束返回nil,被其他線程喚起返回調用線程傳入的參數(shù)。
例子:
sys.wait(30)
02.sys.waitUntil(id, ms)
Task任務的條件等待函數(shù)(包括事件消息和定時器消息等條件),只能用于任務函數(shù)中。
參數(shù):
返回值:
result接收到消息返回true,超時返回false data,接收到消息返回消息參數(shù)。
例子:
result, data = sys.waitUntil("SIM_IND", 120000)
03.sys.waitUntilExt(id, ms)
Task任務的條件等待函數(shù)擴展(包括事件消息和定時器消息等條件),只能用于任務函數(shù)中。
參數(shù):
返回值:
message接收到消息返回message,超時返回false data,接收到消息返回消息參數(shù)。
例子:
result, data = sys.waitUntilExt("SIM_IND", 120000)
04.sys.taskInit(fun, ...)
創(chuàng)建一個任務線程,在模塊最末行調用該函數(shù)并注冊模塊中的任務函數(shù),main.lua導入該模塊即可。
參數(shù):
返回值:
co返回該任務的線程號。
例子:
sys.taskInit(task1,'a','b')
05.sys.timerStop(val, ...)
關閉定時器。
參數(shù):
返回值:
無
例子:
timerStop(1)
06.sys.timerStopAll(fnc)
關閉同一回調函數(shù)的所有定時器。
參數(shù):
返回值:
無
例子:
timerStopAll(cbFnc)
07.sys.timerStart(fnc, ms, ...)
開啟一個定時器。
參數(shù):
返回值:
number定時器ID,如果失敗,返回nil。
例子:
08.sys.timerLoopStart(fnc, ms, ...)
開啟一個循環(huán)定時器。
參數(shù):
返回值:
number定時器ID,如果失敗,返回nil。
例子:
09.sys.timerIsActive(val, ...)
判斷某個定時器是否處于開啟狀態(tài)。
參數(shù):
返回值:
number開啟狀態(tài)返回true,否則nil。
例子:
10.sys.subscribe(id, callback)
訂閱消息
參數(shù):
返回值:
無
例子:
subscribe("NET_STATUS_IND", callback)
11.
sys.unsubscribe(id, callback)
取消訂閱消息
參數(shù):
返回值:
無
例子:
unsubscribe("NET_STATUS_IND", callback)
12.sys.publish(...)
發(fā)布內部消息,存儲在內部消息隊列中。
參數(shù):
返回值:
無
例子:
publish("NET_STATUS_IND")
13.sys.run()
從底層獲取core消息并及時處理相關消息,查詢定時器并調度各注冊成功的任務線程運行和掛起。
參數(shù):無
返回值:無
例子:sys.run()
今天的內容就分享到這里
審核編輯 黃宇
-
開發(fā)
+關注
關注
0文章
370瀏覽量
40836 -
Open
+關注
關注
0文章
16瀏覽量
11071
發(fā)布評論請先 登錄
相關推薦
評論