日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

快速入門(mén)——LuatOS:sys庫(kù)多任務(wù)管理實(shí)戰(zhàn)攻略!

青山老竹農(nóng) ? 來(lái)源:jf_82863998 ? 作者:jf_82863998 ? 2025-05-29 14:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式開(kāi)發(fā)中,多任務(wù)管理是提升系統(tǒng)效率的關(guān)鍵。本教程專(zhuān)為快速入門(mén)設(shè)計(jì),聚焦LuatOS的sys庫(kù),通過(guò)實(shí)戰(zhàn)案例帶你快速掌握多任務(wù)創(chuàng)建、調(diào)度與同步技巧。無(wú)論你是零基礎(chǔ)新手還是希望快速提升開(kāi)發(fā)效率的開(kāi)發(fā)者,這里將用最簡(jiǎn)明的步驟,助你輕松實(shí)現(xiàn)多任務(wù)應(yīng)用開(kāi)發(fā)!

sys庫(kù)是LuatOS的核心系統(tǒng)調(diào)度庫(kù),它基于Lua協(xié)程機(jī)制實(shí)現(xiàn)了實(shí)時(shí)多任務(wù)調(diào)度、定時(shí)器管理以及消息通信等功能。

在詳細(xì)介紹sys庫(kù)之前,我們先來(lái)補(bǔ)充一些關(guān)于實(shí)時(shí)操作系統(tǒng)RTOS的知識(shí),方便大家更好地理解LuatOS的運(yùn)行機(jī)制。

一、 RTOS實(shí)時(shí)操作系統(tǒng)

我們用一個(gè)簡(jiǎn)單的例子來(lái)看,對(duì)比經(jīng)典的裸機(jī)開(kāi)發(fā)和LuatOS開(kāi)發(fā)的優(yōu)勢(shì):

一位母親,她需要同步做兩件事情,一件是喂小孩吃飯,另一件事是回復(fù)朋友信息。


1.1 裸機(jī)開(kāi)發(fā)

對(duì)裸機(jī)開(kāi)發(fā)來(lái)說(shuō),這是兩件任務(wù),這位母親一段時(shí)間內(nèi)只能做一個(gè)任務(wù),任務(wù)執(zhí)行不連貫,等待時(shí)間長(zhǎng)。

time1-5 :喂小孩吃飯,就無(wú)法回復(fù)信息,朋友就受到冷落;

time5-10 :回復(fù)信息,小孩吃不到飯,就會(huì)哭鬧。

wKgZPGg1L1-AU2oaAAETuIj6sAU004.png

1.2 RTOS處理多任務(wù)

那RTOS是如何處理的呢?在RTOS里,這位母親的大腦非常強(qiáng)大,切換得非常的快,她上一秒喂飯,下一秒回復(fù)信息,再下一秒再喂飯。

因?yàn)榍袚Q得非常快,小孩以為她在專(zhuān)心喂飯,朋友以為她在認(rèn)真聊天。這兩個(gè)任務(wù)看起來(lái)在同時(shí)進(jìn)行。

wKgZO2g1L4aAHd4oAAIUXzexdRU431.png

這就是RTOS的本質(zhì)——把一秒鐘的時(shí)間切成多個(gè)時(shí)間片段,一個(gè)時(shí)間片段內(nèi)干一件事情,一秒鐘切換100個(gè)時(shí)間片就可以做100件事情。 RTOS通過(guò)快速切換任務(wù),讓多個(gè)任務(wù)看似在同時(shí)進(jìn)行,提高了系統(tǒng)的并發(fā)處理能力和效率。

LuatOS通過(guò)Lua虛擬機(jī)封裝了底層RTOS的API,向開(kāi)發(fā)者提供高級(jí)抽象接口,而無(wú)需直接操作RTOS內(nèi)核。

基于此LuatOS實(shí)現(xiàn)了一套多任務(wù)機(jī)制,允許開(kāi)發(fā)者創(chuàng)建多個(gè)并行運(yùn)行的任務(wù)。這些任務(wù)通過(guò)Lua語(yǔ)言的協(xié)程機(jī)制來(lái)實(shí)現(xiàn),使得每個(gè)任務(wù)都可以在自己的執(zhí)行上下文中運(yùn)行,而不會(huì)相互干擾。

二、sys庫(kù)任務(wù)管理API函數(shù)

sys庫(kù)是LuatOS的核心系統(tǒng)庫(kù),提供了任務(wù)調(diào)度、時(shí)間管理、消息傳遞等關(guān)鍵功能,本文主要介紹其任務(wù)管理相關(guān)API函數(shù)及其運(yùn)用示例。

2.1 程序框架

在程序的開(kāi)頭我們必須調(diào)用sys庫(kù);在程序的結(jié)尾,我們需要在代碼的最后一行調(diào)用sys.run()函數(shù)來(lái)啟動(dòng)主程序,讓框架內(nèi)的任務(wù)代碼會(huì)在 sys.run()中運(yùn)行。

一個(gè)Lua程序的框架是這樣的:

wKgZPGg1L9aAFH7kAAHL4cF8IeM105.png


2.2 任務(wù)管理

任務(wù)管理包含:創(chuàng)建任務(wù)sys.taskInit()、任務(wù)等待 sys.wait()和sys.waitUntil() 。

1)創(chuàng)建任務(wù)sys.taskInit()

在創(chuàng)建任務(wù)時(shí),需要指定一個(gè)任務(wù)函數(shù),該函數(shù)包含了任務(wù)要執(zhí)行的代碼。

wKgZO2g1MBGAAhaYAAIBdtibWPc459.png

比如,我們創(chuàng)建一個(gè)喂飯的任務(wù)feed。

代碼示例:先定義“喂飯”函數(shù),然后創(chuàng)建并啟動(dòng)“喂飯”任務(wù)。

wKgZPGg1MDGAIUsKAAC_nA5hn4c933.png

2)任務(wù)等待sys.wait()

暫停當(dāng)前任務(wù)的執(zhí)行一段時(shí)間,單位為毫秒。在等待期間,系統(tǒng)會(huì)調(diào)度其他任務(wù)執(zhí)行,實(shí)現(xiàn)多任務(wù)并發(fā)。

wKgZPGg1MFaAYKkqAAB2GVUCTac973.png

代碼舉例:

我們依舊利用上面的程序,我們?cè)诖a第三行后面,加一句sys.wait(1000) 即可。

每隔一秒,打印一次 I'm feeding.....

wKgZPGg1MISACH-vAADBsDeE1Gg281.png


3)任務(wù)中斷sys.waitUntil()

允許當(dāng)前的Task協(xié)程暫停執(zhí)行,進(jìn)入等待狀態(tài)。在等待過(guò)程中,它會(huì)監(jiān)聽(tīng)指定名稱(chēng)的事件(即 topic)是否發(fā)生,同時(shí)會(huì)記錄時(shí)間。

如果在指定的時(shí)間內(nèi),該事件發(fā)生了,協(xié)程會(huì)恢復(fù)執(zhí)行; 如果超過(guò)了指定的時(shí)間,事件還未發(fā)生,協(xié)程也同樣會(huì)恢復(fù)執(zhí)行。

一般這里都會(huì)設(shè)置判斷條件:指定時(shí)間內(nèi),事件發(fā)生執(zhí)行A,超時(shí)未發(fā)生執(zhí)行B。

wKgZO2g1MK2ARfqVAAGFBo4EELE887.png

一般和sys.waitUntil()配合使用的,是sys.publish():

sys.publish()它的作用就像是在系統(tǒng)里廣播消息,讓其他關(guān)注該消息的任務(wù)能夠接收到并做出相應(yīng)反應(yīng)——比如,sys.waitUntil()。

wKgZPGg1MNqADz6wAAHh0H2FHHM180.png

三、多任務(wù)實(shí)戰(zhàn)演練

我們利用一個(gè)示例來(lái)實(shí)際感受下這幾個(gè)函數(shù)的用法:

一位女主人,在燒水的同時(shí),還要掃地; 水燒開(kāi)后,停止掃地去關(guān)火,并沏茶。

分析上述例子,女主人共有三個(gè)任務(wù):燒水、掃地、沏茶

這三個(gè)任務(wù)分別運(yùn)行如下:

wKgZPGg1MTOAbZ2OAAFR7JO79VY389.png

wKgZO2g1MUaAB3seAAByXBpQsgg305.png

接下來(lái),我們來(lái)對(duì)這三個(gè)協(xié)程單獨(dú)分析:

1)燒水協(xié)程:

燒水5秒后,sys.publish()發(fā)消息:“水燒開(kāi)了”。

代碼如下:

wKgZPGg1Me-AUQ2MAAEA_QAEm0I366.png

2)掃地協(xié)程:

掃地持續(xù)進(jìn)行,sys.waitUntil()等待收到了:“水燒開(kāi)的消息”,停止掃地;同時(shí)sys.publish()發(fā)送消息:水燒開(kāi)了,不掃地了,去沏茶。

代碼如下:

wKgZO2g1M26AKumOAAFze7p1-dU163.png

sys.waitUntil()如果在1s內(nèi)接收到了水燒開(kāi)的消息,則返回true給result,繼續(xù)執(zhí)行下面的if程序,打印“水燒開(kāi)了:我去關(guān)火”;

如果超時(shí)1秒沒(méi)有接收到,則返回false給result,繼續(xù)執(zhí)行下面的if程序,打印“水還沒(méi)燒開(kāi),我要繼續(xù)掃地”。

3)沏茶協(xié)程:

在燒水的5秒鐘內(nèi),一直處于等待狀態(tài),直到水燒開(kāi)后,sys.waitUntil()收到:“水燒開(kāi)了,不掃地了去沏茶”這條消息,開(kāi)始執(zhí)行沏茶協(xié)程。

代碼如下:

wKgZPGg1M5iADS7OAAEbhIefygE482.png

我們把完整代碼下載到Air780EPM開(kāi)發(fā)板上,看下運(yùn)行效果:

wKgZO2g1NAWAXEtjAAr5vYV_ncs884.png

wKgZPGg1NBiAZSkZAAKK5_b5gzU297.png

這樣,我們就利用sys.publish()和sys.waitUntil()完成了一個(gè)多任務(wù)協(xié)程程序。

附完整代碼:

wKgZPGg1NGOAe1j4AAMu5brJtbg397.png

wKgZPGg1NHqAWL7MAAGqAuYt4kQ075.png

今天的內(nèi)容就分享到這里了~

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7443

    瀏覽量

    129644
  • RTOS
    +關(guān)注

    關(guān)注

    25

    文章

    871

    瀏覽量

    123233
  • LuatOS
    +關(guān)注

    關(guān)注

    0

    文章

    173

    瀏覽量

    2751
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    LuatOS:485 總線(xiàn)硬件設(shè)計(jì)要點(diǎn)與 exmodbus 庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)

    與 UART 的關(guān)聯(lián)、電平匹配處理及不同防護(hù)等級(jí)的 TVS 器件選型,同時(shí)介紹 LuatOS 輕量化的 exmodbus 擴(kuò)展庫(kù),并給出該庫(kù)實(shí)現(xiàn) Modbus RTU 主站通信的代碼示例與相關(guān)文檔查閱渠道。
    的頭像 發(fā)表于 03-19 17:57 ?247次閱讀
    <b class='flag-5'>LuatOS</b>:485 總線(xiàn)硬件設(shè)計(jì)要點(diǎn)與 exmodbus <b class='flag-5'>庫(kù)</b>開(kāi)發(fā)<b class='flag-5'>實(shí)戰(zhàn)</b>

    LuatOS 系統(tǒng)框架的模塊化設(shè)計(jì)原理

    ) 2、一個(gè)調(diào)度器:sys.run()函數(shù); 1.1 LuatOS任務(wù)(task) 1.1.1 FreeRTO
    的頭像 發(fā)表于 02-03 15:56 ?302次閱讀
    <b class='flag-5'>LuatOS</b> 系統(tǒng)框架的模塊化設(shè)計(jì)原理

    解鎖:LuatOS框架的使用(下篇)

    ; 2.3.1 基本概念 LuatOS 定時(shí)器的分類(lèi)如下: LuatOS 定時(shí)器管理的 API 列表如下: (1) 單次定時(shí)器創(chuàng)建并且啟動(dòng):sys.timerStart(cbfunc,
    的頭像 發(fā)表于 01-28 13:18 ?291次閱讀
    解鎖:<b class='flag-5'>LuatOS</b>框架的使用(下篇)

    LuatOS MCU核心庫(kù)全接觸:新手操作與功能測(cè)試攻略

    ?MCU芯片級(jí)開(kāi)發(fā)新手如何快速掌握核心技能?本文圍繞LuatOS的MCU核心庫(kù),系統(tǒng)演示時(shí)鐘頻率獲取、唯一ID讀取、高精度計(jì)時(shí)、IO復(fù)用配置等核心功能測(cè)試,并通過(guò)豐富示例,幫助開(kāi)發(fā)者輕松入門(mén)
    的頭像 發(fā)表于 11-12 14:30 ?407次閱讀
    <b class='flag-5'>LuatOS</b> MCU核心<b class='flag-5'>庫(kù)</b>全接觸:新手操作與功能測(cè)試<b class='flag-5'>攻略</b>!

    新手必備:LuatOS MCU核心庫(kù)功能測(cè)試與實(shí)踐指南

    新手如何快速掌握MCU芯片級(jí)開(kāi)發(fā)?本文通過(guò)LuatOS的MCU核心庫(kù),全面演示時(shí)鐘頻率獲取、唯一ID讀取、高精度計(jì)時(shí)、IO復(fù)用配置等核心功能的測(cè)試流程,并提供實(shí)用示例,幫助開(kāi)發(fā)者高效入門(mén)
    的頭像 發(fā)表于 11-12 14:26 ?476次閱讀
    新手必備:<b class='flag-5'>LuatOS</b> MCU核心<b class='flag-5'>庫(kù)</b>功能測(cè)試與實(shí)踐指南

    LuatOS AGPS 輔助定位開(kāi)發(fā)實(shí)戰(zhàn)教程

    、數(shù)據(jù)解析、定位模塊調(diào)優(yōu)等實(shí)戰(zhàn)環(huán)節(jié),附帶完整代碼與調(diào)試技巧,助開(kāi)發(fā)者快速上手。 ? 一、AGPS 概述 ? AGPS(Assisted GPS,輔助全球衛(wèi)星定位系統(tǒng))通過(guò)移動(dòng)網(wǎng)絡(luò)預(yù)先獲取衛(wèi)星星歷、時(shí)間等
    的頭像 發(fā)表于 10-31 17:34 ?1371次閱讀
    <b class='flag-5'>LuatOS</b> AGPS 輔助定位開(kāi)發(fā)<b class='flag-5'>實(shí)戰(zhàn)</b>教程

    教程來(lái)啦!LuatOS中的消息通信機(jī)制詳解及其應(yīng)用場(chǎng)景

    。 LuatOS 的消息機(jī)制是其多任務(wù)協(xié)作和事件驅(qū)動(dòng)編程的核心部分,主要通過(guò)?sys?核心庫(kù)實(shí)現(xiàn)。 消息機(jī)制包括消息的發(fā)送、接收、訂閱,以及系統(tǒng)消息的定義和使用,下面分別詳細(xì)描述其原理
    的頭像 發(fā)表于 09-26 18:59 ?567次閱讀
    教程來(lái)啦!<b class='flag-5'>LuatOS</b>中的消息通信機(jī)制詳解及其應(yīng)用場(chǎng)景

    入門(mén)到精通:exchg充電庫(kù)助新手攻克續(xù)航與管理雙痛點(diǎn)

    入門(mén)充電管理的新手也能變高手!exchg擴(kuò)展庫(kù)內(nèi)置智能充電邏輯,自動(dòng)適配設(shè)備需求,從充電順序到能耗優(yōu)化全程托管,續(xù)航更持久,管理更省心,快速掌握核心技巧! 本文主要分享exchg擴(kuò)展
    的頭像 發(fā)表于 09-10 16:46 ?977次閱讀
    從<b class='flag-5'>入門(mén)</b>到精通:exchg充電<b class='flag-5'>庫(kù)</b>助新手攻克續(xù)航與<b class='flag-5'>管理</b>雙痛點(diǎn)

    Task任務(wù)LuatOS實(shí)現(xiàn)“任務(wù)級(jí)并發(fā)”的核心引擎

    Task任務(wù)通過(guò)其強(qiáng)大的并發(fā)處理能力,使LuatOS能夠在單線(xiàn)程環(huán)境中模擬多線(xiàn)程執(zhí)行,通過(guò)協(xié)程的掛起與恢復(fù)機(jī)制,實(shí)現(xiàn)任務(wù)級(jí)的并行操作,顯著提升系統(tǒng)效能。 sys核心
    的頭像 發(fā)表于 08-28 13:49 ?654次閱讀
    Task<b class='flag-5'>任務(wù)</b>:<b class='flag-5'>LuatOS</b>實(shí)現(xiàn)“<b class='flag-5'>任務(wù)</b>級(jí)并發(fā)”的核心引擎

    揭秘LuatOS Task:多任務(wù)管理的“智能中樞”

    Task任務(wù)作為LuatOS的核心組成部分,通過(guò)智能化的任務(wù)管理機(jī)制,實(shí)現(xiàn)任務(wù)的創(chuàng)建、調(diào)度與協(xié)同運(yùn)行,讓復(fù)雜應(yīng)用得以高效并行處理,滿(mǎn)足實(shí)時(shí)場(chǎng)
    的頭像 發(fā)表于 08-28 13:48 ?800次閱讀
    揭秘<b class='flag-5'>LuatOS</b> Task:<b class='flag-5'>多任務(wù)管理</b>的“智能中樞”

    零基礎(chǔ)學(xué)習(xí)LuatOS編程:快速上手開(kāi)發(fā)實(shí)戰(zhàn)教程!

    無(wú)論你是剛接觸物聯(lián)網(wǎng)編程的新手,還是希望拓展技能的技術(shù)愛(ài)好者,本教程將為零基礎(chǔ)的讀者提供一條清晰的LuatOS學(xué)習(xí)路徑。從安裝開(kāi)發(fā)工具到編寫(xiě)第一個(gè)程序,我們將通過(guò)實(shí)例講解核心概念,助你快速實(shí)現(xiàn)從理論
    的頭像 發(fā)表于 06-13 17:27 ?765次閱讀
    零基礎(chǔ)學(xué)習(xí)<b class='flag-5'>LuatOS</b>編程:<b class='flag-5'>快速</b>上手開(kāi)發(fā)<b class='flag-5'>實(shí)戰(zhàn)</b>教程!

    揭秘LuatOS:實(shí)時(shí)操作系統(tǒng)RTOS核心庫(kù)的關(guān)鍵技術(shù)剖析!

    為滿(mǎn)足實(shí)時(shí)控制場(chǎng)景的嚴(yán)苛需求,LuatOS核心庫(kù)采用搶占式調(diào)度策略,確保高優(yōu)先級(jí)任務(wù)即時(shí)響應(yīng)。通過(guò)靜態(tài)內(nèi)存分配和零拷貝通信機(jī)制,系統(tǒng)不僅避免了動(dòng)態(tài)內(nèi)存碎片問(wèn)題,還大幅提升了任務(wù)間數(shù)據(jù)交
    的頭像 發(fā)表于 05-21 16:02 ?807次閱讀
    揭秘<b class='flag-5'>LuatOS</b>:實(shí)時(shí)操作系統(tǒng)RTOS核心<b class='flag-5'>庫(kù)</b>的關(guān)鍵技術(shù)剖析!

    基于LuatOS核心庫(kù)的實(shí)時(shí)操作系統(tǒng)開(kāi)發(fā):從理論到實(shí)踐~

    實(shí)時(shí)系統(tǒng)的開(kāi)發(fā)挑戰(zhàn)在于平衡響應(yīng)時(shí)間與系統(tǒng)開(kāi)銷(xiāo)。LuatOS核心庫(kù)通過(guò)時(shí)間片輪轉(zhuǎn)與優(yōu)先級(jí)混合調(diào)度策略,既保證了高實(shí)時(shí)性任務(wù)的即時(shí)執(zhí)行,又為低優(yōu)先級(jí)任務(wù)提供了公平調(diào)度機(jī)會(huì)。其事件驅(qū)動(dòng)架構(gòu)還
    的頭像 發(fā)表于 05-16 13:56 ?653次閱讀
    基于<b class='flag-5'>LuatOS</b>核心<b class='flag-5'>庫(kù)</b>的實(shí)時(shí)操作系統(tǒng)開(kāi)發(fā):從理論到實(shí)踐~

    全棧開(kāi)發(fā)進(jìn)階指南:LuatOS-log庫(kù)入門(mén)實(shí)戰(zhàn)!

    本文將帶你深入探索LuatOS系統(tǒng)中l(wèi)og庫(kù)的核心原理與實(shí)戰(zhàn)技巧,通過(guò)代碼示例解析日志管理、錯(cuò)誤追蹤及性能優(yōu)化的最佳實(shí)踐,助力全棧工程師構(gòu)建更穩(wěn)健的物聯(lián)網(wǎng)應(yīng)用。 今天,我們一起來(lái)認(rèn)識(shí)
    的頭像 發(fā)表于 05-15 16:12 ?3027次閱讀
    全棧開(kāi)發(fā)進(jìn)階指南:<b class='flag-5'>LuatOS</b>-log<b class='flag-5'>庫(kù)</b>從<b class='flag-5'>入門(mén)</b>到<b class='flag-5'>實(shí)戰(zhàn)</b>!

    解鎖LuatOS-log庫(kù):全棧工程師的日志管理實(shí)戰(zhàn)課!

    針對(duì)全棧開(kāi)發(fā)者設(shè)計(jì)的實(shí)戰(zhàn)教程,本文聚焦LuatOS平臺(tái)log庫(kù)的高效使用,從基礎(chǔ)配置到高級(jí)調(diào)試策略,手把手教你搭建可擴(kuò)展的日志系統(tǒng),提升項(xiàng)目維護(hù)效率。 今天,我們一起來(lái)認(rèn)識(shí)LuatOS
    的頭像 發(fā)表于 05-12 15:23 ?1661次閱讀
    解鎖<b class='flag-5'>LuatOS</b>-log<b class='flag-5'>庫(kù)</b>:全棧工程師的日志<b class='flag-5'>管理</b><b class='flag-5'>實(shí)戰(zhàn)</b>課!
    故城县| 绥宁县| 宝山区| 于田县| 县级市| 南华县| 江口县| 丰原市| 湘阴县| 巫溪县| 霸州市| 河北区| 舞钢市| 历史| 济宁市| 平罗县| 九江市| 黄石市| SHOW| 信丰县| 安义县| 宜川县| 三门县| 永德县| 前郭尔| 繁峙县| 永城市| 翁源县| 江达县| 綦江县| 上饶县| 兴和县| 东台市| 靖州| 商城县| 化隆| 佳木斯市| 莒南县| 平顺县| 光山县| 石屏县|