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