91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

快速入門——LuatOS:sys庫多任務管理實戰(zhàn)攻略!

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

掃碼添加小助手

加入工程師交流群

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

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

在詳細介紹sys庫之前,我們先來補充一些關于實時操作系統(tǒng)RTOS的知識,方便大家更好地理解LuatOS的運行機制。

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

我們用一個簡單的例子來看,對比經典的裸機開發(fā)和LuatOS開發(fā)的優(yōu)勢:

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


1.1 裸機開發(fā)

對裸機開發(fā)來說,這是兩件任務,這位母親一段時間內只能做一個任務,任務執(zhí)行不連貫,等待時間長。

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

time5-10 :回復信息,小孩吃不到飯,就會哭鬧。

wKgZPGg1L1-AU2oaAAETuIj6sAU004.png

1.2 RTOS處理多任務

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

因為切換得非常快,小孩以為她在專心喂飯,朋友以為她在認真聊天。這兩個任務看起來在同時進行。

wKgZO2g1L4aAHd4oAAIUXzexdRU431.png

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

LuatOS通過Lua虛擬機封裝了底層RTOS的API,向開發(fā)者提供高級抽象接口,而無需直接操作RTOS內核。

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

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

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

2.1 程序框架

在程序的開頭我們必須調用sys庫;在程序的結尾,我們需要在代碼的最后一行調用sys.run()函數(shù)來啟動主程序,讓框架內的任務代碼會在 sys.run()中運行。

一個Lua程序的框架是這樣的:

wKgZPGg1L9aAFH7kAAHL4cF8IeM105.png


2.2 任務管理

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

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

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

wKgZO2g1MBGAAhaYAAIBdtibWPc459.png

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

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

wKgZPGg1MDGAIUsKAAC_nA5hn4c933.png

2)任務等待sys.wait()

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

wKgZPGg1MFaAYKkqAAB2GVUCTac973.png

代碼舉例:

我們依舊利用上面的程序,我們在代碼第三行后面,加一句sys.wait(1000) 即可。

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

wKgZPGg1MISACH-vAADBsDeE1Gg281.png


3)任務中斷sys.waitUntil()

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

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

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

wKgZO2g1MK2ARfqVAAGFBo4EELE887.png

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

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

wKgZPGg1MNqADz6wAAHh0H2FHHM180.png

三、多任務實戰(zhàn)演練

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

一位女主人,在燒水的同時,還要掃地; 水燒開后,停止掃地去關火,并沏茶。

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

這三個任務分別運行如下:

wKgZPGg1MTOAbZ2OAAFR7JO79VY389.png

wKgZO2g1MUaAB3seAAByXBpQsgg305.png

接下來,我們來對這三個協(xié)程單獨分析:

1)燒水協(xié)程:

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

代碼如下:

wKgZPGg1Me-AUQ2MAAEA_QAEm0I366.png

2)掃地協(xié)程:

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

代碼如下:

wKgZO2g1M26AKumOAAFze7p1-dU163.png

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

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

3)沏茶協(xié)程:

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

代碼如下:

wKgZPGg1M5iADS7OAAEbhIefygE482.png

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

wKgZO2g1NAWAXEtjAAr5vYV_ncs884.png

wKgZPGg1NBiAZSkZAAKK5_b5gzU297.png

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

附完整代碼:

wKgZPGg1NGOAe1j4AAMu5brJtbg397.png

wKgZPGg1NHqAWL7MAAGqAuYt4kQ075.png

今天的內容就分享到這里了~

審核編輯 黃宇

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

    關注

    37

    文章

    7402

    瀏覽量

    129300
  • RTOS
    +關注

    關注

    25

    文章

    866

    瀏覽量

    122992
  • LuatOS
    +關注

    關注

    0

    文章

    156

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    LuatOS框架的使用(上)

    在資源受限的物聯(lián)網(wǎng)終端設備中,如何實現(xiàn)快速開發(fā)與穩(wěn)定運行是關鍵挑戰(zhàn)。LuatOS框架通過將Lua語言與底層硬件抽象層深度融合,提供了一套簡潔高效的開發(fā)范式。本文將圍繞LuatOS框架的使用展開,從
    的頭像 發(fā)表于 01-27 19:38 ?158次閱讀
    <b class='flag-5'>LuatOS</b>框架的使用(上)

    LuatOS MCU核心全接觸:新手操作與功能測試攻略!

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

    新手必備:LuatOS MCU核心功能測試與實踐指南

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

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

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

    教程來啦!LuatOS中的消息通信機制詳解及其應用場景

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

    入門到精通:exchg充電助新手攻克續(xù)航與管理雙痛點

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

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

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

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

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

    零基礎學習LuatOS編程:快速上手開發(fā)實戰(zhàn)教程!

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

    揭秘LuatOS:實時操作系統(tǒng)RTOS核心的關鍵技術剖析!

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

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

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

    全棧開發(fā)進階指南:LuatOS-log入門實戰(zhàn)

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

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

    針對全棧開發(fā)者設計的實戰(zhàn)教程,本文聚焦LuatOS平臺log的高效使用,從基礎配置到高級調試策略,手把手教你搭建可擴展的日志系統(tǒng),提升項目維護效率。 今天,我們一起來認識LuatOS
    的頭像 發(fā)表于 05-12 15:23 ?1512次閱讀
    解鎖<b class='flag-5'>LuatOS</b>-log<b class='flag-5'>庫</b>:全棧工程師的日志<b class='flag-5'>管理</b><b class='flag-5'>實戰(zhàn)</b>課!