女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

快速入門——LuatOS:sys庫多任務管理實戰攻略!

青山老竹農 ? 來源:jf_82863998 ? 作者:jf_82863998 ? 2025-05-29 14:36 ? 次閱讀

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

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

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

一、 RTOS實時操作系統

我們用一個簡單的例子來看,對比經典的裸機開發和LuatOS開發的優勢:

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


1.1 裸機開發

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

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

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

wKgZPGg1L1-AU2oaAAETuIj6sAU004.png

1.2 RTOS處理多任務

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

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

wKgZO2g1L4aAHd4oAAIUXzexdRU431.png

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

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

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

二、sys庫任務管理API函數

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

2.1 程序框架

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

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

wKgZPGg1L9aAFH7kAAHL4cF8IeM105.png


2.2 任務管理

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

1)創建任務sys.taskInit()

在創建任務時,需要指定一個任務函數,該函數包含了任務要執行的代碼。

wKgZO2g1MBGAAhaYAAIBdtibWPc459.png

比如,我們創建一個喂飯的任務feed。

代碼示例:先定義“喂飯”函數,然后創建并啟動“喂飯”任務。

wKgZPGg1MDGAIUsKAAC_nA5hn4c933.png

2)任務等待sys.wait()

暫停當前任務的執行一段時間,單位為毫秒。在等待期間,系統會調度其他任務執行,實現多任務并發。

wKgZPGg1MFaAYKkqAAB2GVUCTac973.png

代碼舉例:

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

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

wKgZPGg1MISACH-vAADBsDeE1Gg281.png


3)任務中斷sys.waitUntil()

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

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

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

wKgZO2g1MK2ARfqVAAGFBo4EELE887.png

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

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

wKgZPGg1MNqADz6wAAHh0H2FHHM180.png

三、多任務實戰演練

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

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

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

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

wKgZPGg1MTOAbZ2OAAFR7JO79VY389.png

wKgZO2g1MUaAB3seAAByXBpQsgg305.png

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

1)燒水協程:

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

代碼如下:

wKgZPGg1Me-AUQ2MAAEA_QAEm0I366.png

2)掃地協程:

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

代碼如下:

wKgZO2g1M26AKumOAAFze7p1-dU163.png

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

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

3)沏茶協程:

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

代碼如下:

wKgZPGg1M5iADS7OAAEbhIefygE482.png

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

wKgZO2g1NAWAXEtjAAr5vYV_ncs884.png

wKgZPGg1NBiAZSkZAAKK5_b5gzU297.png

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

附完整代碼:

wKgZPGg1NGOAe1j4AAMu5brJtbg397.png

wKgZPGg1NHqAWL7MAAGqAuYt4kQ075.png

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

審核編輯 黃宇

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

    關注

    37

    文章

    7081

    瀏覽量

    124940
  • RTOS
    +關注

    關注

    24

    文章

    840

    瀏覽量

    120752
  • LuatOS
    +關注

    關注

    0

    文章

    93

    瀏覽量

    2170
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    基于LuatOS核心的實時操作系統開發:從理論到實踐~

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

    全棧開發進階指南:LuatOS-log入門實戰

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

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

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

    LuatOS協程深度解析:小白也能10分鐘學會,代碼效率直接起飛!

    嵌入式開發如何兼顧效率與簡潔?LuatOS協程給出完美答案!它用類線程的語法封裝異步邏輯,讓多任務開發像單線程一樣簡單。本文用圖文并茂的方式拆解協程原理,10分鐘帶你輕松入門! ? LuatO
    的頭像 發表于 04-10 15:23 ?123次閱讀
    <b class='flag-5'>LuatOS</b>協程深度解析:小白也能10分鐘學會,代碼效率直接起飛!

    看完必會!Open開發低功耗應用:電源管理核心API全攻略

    低功耗設計是Open開發的核心競爭力之一,而電源管理API則是實現這一目標的技術基石。通過靈活調用這些接口,開發者可精準控制硬件資源使用、動態調整系統能耗模式、優化任務執行時機,從而顯著延長設備續航
    的頭像 發表于 04-10 14:36 ?163次閱讀
    看完必會!Open開發低功耗應用:電源<b class='flag-5'>管理</b>核心API全<b class='flag-5'>攻略</b>!

    UC3854 功率因數校正設計全攻略:從理論到實戰

    【限時下載】UC3854 功率因數校正(PFC)設計全攻略:從理論到實戰,工程師必備技術手冊 *附件:《UC3854 功率因數校正設計全攻略:從理論到實戰》.pdf 為什么工程師必須掌
    的頭像 發表于 04-09 15:35 ?323次閱讀
    UC3854 功率因數校正設計全<b class='flag-5'>攻略</b>:從理論到<b class='flag-5'>實戰</b>

    避坑指南:云服務器數據購買方法全攻略

    云服務器數據購買方法包含:先明確業務需求與數據類型,再挑選信譽好、技術支持強的云服務提供商,接著根據需求配置數據實例及選擇付費方式。購買后,通過云管理平臺訪問
    的頭像 發表于 01-15 10:05 ?424次閱讀

    Air780E模組LuatOS開發實戰 —— 手把手教你搞定數據打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發實戰,我將手把手教你搞定數據打包解包。
    的頭像 發表于 12-03 11:17 ?541次閱讀
    Air780E模組<b class='flag-5'>LuatOS</b>開發<b class='flag-5'>實戰</b> —— 手把手教你搞定數據打包解包

    如何快速入門HAL編程 HAL與裸機編程的比較

    如何快速入門HAL編程 要快速入門HAL編程,可以遵循以下步驟: 了解基礎知識 : 掌握C語
    的頭像 發表于 12-02 11:39 ?969次閱讀

    關于4G模組LuatOS開發:通用加解密函數(crypto)|全攻略

    本次我要說的攻略是關于4G模組LuatOS開發的通用加解密函數,我以我常用的Air780E模組為例子供大家參考。
    的頭像 發表于 11-30 09:52 ?775次閱讀
    關于4G模組<b class='flag-5'>LuatOS</b>開發:通用加解密函數(crypto)|全<b class='flag-5'>攻略</b>

    LuatOS開發之4G模組隨機數(random)|實戰指南

    本次學習的實戰是關于4G模組LuatOS開發的隨機數示例指南,希望大家有所收獲。
    的頭像 發表于 11-30 09:51 ?621次閱讀
    <b class='flag-5'>LuatOS</b>開發之4G模組隨機數(random)|<b class='flag-5'>實戰</b>指南

    UART串口通信示例:開啟通信寶藏之門的定位模組LuatOS入門

    今天我們要講解的是UART串口通信示例,關于Air201資產定位模組LuatOS入門,我會從搭建環境、代碼燒錄、示例效果等來細說:
    的頭像 發表于 11-03 19:55 ?1365次閱讀
    UART串口通信示例:開啟通信寶藏之門的定位模組<b class='flag-5'>LuatOS</b><b class='flag-5'>入門</b>

    玩轉擴展,溫濕度傳感器篇!—合宙Air201資產定位模組LuatOS快速入門05

    隨著LuatOS快速入門系列教程的推出,小伙伴們學習熱情高漲。 合宙Air201不僅支持三種定位方式,還具有豐富的擴展功能,通過外擴BTB鏈接方案,最多可支持21個IO接口:SPI、I2C、UART
    的頭像 發表于 09-12 12:11 ?707次閱讀
    玩轉擴展<b class='flag-5'>庫</b>,溫濕度傳感器篇!—合宙Air201資產定位模組<b class='flag-5'>LuatOS</b><b class='flag-5'>快速</b><b class='flag-5'>入門</b>05

    擺脫自建的繁瑣,EDA元件轉cadence原理圖封裝實戰技巧

    擺脫自建的繁瑣,EDA元件轉cadence原理圖封裝實戰技巧
    的頭像 發表于 08-24 12:29 ?5805次閱讀
    擺脫自建<b class='flag-5'>庫</b>的繁瑣,EDA元件<b class='flag-5'>庫</b>轉cadence原理圖封裝<b class='flag-5'>庫</b><b class='flag-5'>實戰</b>技巧