嵌入式開發(fā)如何兼顧效率與簡潔?LuatOS協(xié)程給出完美答案!它用類線程的語法封裝異步邏輯,讓多任務(wù)開發(fā)像單線程一樣簡單。本文用圖文并茂的方式拆解協(xié)程原理,10分鐘帶你輕松入門!
LuatOS協(xié)程是基于Lua語言實現(xiàn)的協(xié)作式并發(fā)控制機制,專為嵌入式及物聯(lián)網(wǎng)場景設(shè)計,其核心特點是通過用戶態(tài)任務(wù)調(diào)度,在單線程中模擬多任務(wù)執(zhí)行。
LuatOS協(xié)程通過輕量化協(xié)作式調(diào)度,在資源受限的嵌入式設(shè)備中實現(xiàn)了高效可控的并發(fā)邏輯,是物聯(lián)網(wǎng)開發(fā)中優(yōu)化任務(wù)調(diào)度的核心方案?。
1、協(xié)程是什么?——小白秒懂版?
場景?:小明一邊寫作業(yè),一邊等外賣:
?普通做法?:寫5分鐘作業(yè)→開門看外賣→再寫5分鐘→再去看外賣...(效率低)
?協(xié)程做法?:
?協(xié)程A(寫作業(yè))?:寫5分鐘 → ?暫停?,去檢查外賣
?協(xié)程B(等外賣)?:聽到敲門聲 → ?繼續(xù)?寫作業(yè)
簡而言之,協(xié)程的本質(zhì)?是讓代碼學(xué)會?“暫停-繼續(xù)”?,像切換作業(yè)和外賣一樣切換任務(wù)!
2、極簡三步寫出第一個協(xié)程?
第1步:創(chuàng)建協(xié)程 → sys.taskInit()?
劃重點?:
sys.taskInit(函數(shù)) 用來包裹你的任務(wù)代碼;
sys.wait(時間) 是暫停協(xié)程的“魔法”。
第2步:再創(chuàng)建一個協(xié)程
第3步:啟動所有協(xié)程 → sys.run()?
新手避坑指南?:
忘記寫sys.run() → 所有協(xié)程都不會運行!
sys.wait()沒寫 → 協(xié)程會“卡死”其他任務(wù)。
3、查看運行結(jié)果
你會在控制臺看到?:
發(fā)現(xiàn)了嗎??
兩個任務(wù)在?自動交替執(zhí)行?;不用寫復(fù)雜的時間管理代碼!
4、實戰(zhàn)試練:手機同時下載和聽歌?
1)應(yīng)用需求?:
下載任務(wù):每3秒下載1%;
聽歌任務(wù):每1秒顯示歌詞。
?2)代碼實現(xiàn)?:
?3)輸出效果?:
關(guān)鍵理解?:
下載任務(wù)暫停的3秒里,CPU自動去執(zhí)行歌詞任務(wù);
協(xié)程之間?不會互相阻塞?!
5、小白常見問題?
1)為什么我的協(xié)程不執(zhí)行??
檢查三件套?:
是否用sys.taskInit()包裹了代碼?
協(xié)程里有沒有寫sys.wait()?
代碼最后有沒有加sys.run()?
2)協(xié)程和函數(shù)有什么區(qū)別??
?普通函數(shù)?:一旦調(diào)用,必須從頭執(zhí)行到結(jié)束(像必須一口氣跑完100米)。
?協(xié)程?:可以跑10米→暫停→去跑另一個任務(wù)→回來繼續(xù)(像隨時暫停的接力賽)。
?3)一個協(xié)程里能寫多個sys.wait()嗎??
?當然可以!
今天的內(nèi)容就分享到這里了~即刻啟動你的“任務(wù)切換器”協(xié)程,動手試試吧!
審核編輯 黃宇
-
代碼
+關(guān)注
關(guān)注
30文章
4886瀏覽量
70239 -
LuatOS
+關(guān)注
關(guān)注
0文章
93瀏覽量
2167
發(fā)布評論請先 登錄
食品生產(chǎn)線總卡殼,DeviceNET轉(zhuǎn)EtherCAT網(wǎng)關(guān)居然直接起飛
快速入門——LuatOS:sys庫多任務(wù)管理實戰(zhàn)攻略!

進程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!
深度解析:Air8201如何使用LuatOS進行電源管理功能!

大功率直流電源技術(shù)參數(shù)解析 常見的大功率直流電源型號
4G模組Air780E的LuatOS開發(fā)之位運算(bit)示例

解析Air780E模組LuatOS開發(fā)的隨機數(shù)(random) 示例篇

如何評估儲能PCS的效率
維諦技術(shù)(Vertiv):未來HPC,你想象不到的酷炫變革!

評論