chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

青山老竹農(nóng) ? 來源:jf_82863998 ? 作者:jf_82863998 ? 2025-09-26 18:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在資源受限的嵌入式環(huán)境中,LuatOS采用消息機制實現(xiàn)模塊間解耦與高效通信。通過預(yù)定義消息名稱(如“new_msg”),開發(fā)者可輕松構(gòu)建響應(yīng)式程序結(jié)構(gòu)。接下來我們將深入剖析其實現(xiàn)原理與典型使用方法。


LuatOS 的消息機制是其多任務(wù)協(xié)作和事件驅(qū)動編程的核心部分,主要通過sys核心庫實現(xiàn)。

消息機制包括消息的發(fā)送、接收、訂閱,以及系統(tǒng)消息的定義和使用,下面分別詳細(xì)描述其原理和使用方法。

一、LuatOS 消息機制的原理

1.1 消息機制的基本原理描述

LuatOS 基于消息隊列實現(xiàn)任務(wù)間通信,消息隊列遵循先進先出(FIFO)原則。

消息機制配合 Lua 的協(xié)程(coroutine),可以非常絲滑的實現(xiàn)協(xié)作式多任務(wù)。

每一個協(xié)程的運行,是相互邏輯獨立的;

在協(xié)程之間收發(fā)消息,可以實現(xiàn)不同協(xié)程間的通信。

消息發(fā)布者調(diào)用 LuatOS 的 API 發(fā)送全局消息或者定向消息。

訂閱者通過回調(diào)函數(shù)或協(xié)程等待消息并處理,實現(xiàn)異步事件驅(qū)動。

消息調(diào)度流程大致如下:

(1)發(fā)布消息時,將消息及參數(shù)插入消息隊列。

(2)消息分發(fā)函數(shù)從隊列取出消息,根據(jù)消息 ID 查找訂閱者列表。

(3)調(diào)用訂閱者的回調(diào)函數(shù)或恢復(fù)協(xié)程,傳遞消息參數(shù)。

(4)訂閱者處理消息,實現(xiàn)任務(wù)間通信和事件響應(yīng)。

這種設(shè)計使得任務(wù)間解耦,消息驅(qū)動程序結(jié)構(gòu)清晰,適合物聯(lián)網(wǎng)設(shè)備的異步事件處理需求。

1.2 LuatOS 的消息隊列

LuatOS 的消息隊列有兩個: 用戶消息隊列和系統(tǒng)消息隊列。

1.2.1 用戶消息隊列:

wKgZPGjWZI-AB4YQAADDYG-Ty4I275.png

用戶消息隊列的接收接口有三個: sys.waitUntil(),sys.waitMsg(),sys.subscribe()。

1.2.2 系統(tǒng)消息隊列:

系統(tǒng)消息隊列,存儲在RTOS層,是RTOS操作系統(tǒng)的基本單元。

系統(tǒng)消息只能是使用 RTOS 的接口發(fā)送該消息,并且該發(fā)送消息接口是不開放給用戶的。

系統(tǒng)消息隊列的消息, 由 sys 核心庫收取,并傳送給對應(yīng)的協(xié)程或者回調(diào)函數(shù)進行處理。

系統(tǒng)消息隊列用于硬件事件,網(wǎng)絡(luò)事件和定時器事件的傳遞。

比如說,當(dāng) Lua 腳本的某個協(xié)程運行了這行代碼:

wKgZPGjWZNqAD3J8AABFFo1-pRs209.pngwKgZO2jWZPGAZndvAAEGk1rJyCg805.png

1.3 topic 和消息的差異

1.3.1 topic 和消息的差異

LuatOS 的消息,分為兩類: topic 和消息。

topic 跟事件的概念是類似的,在 LuatOS 語境里面,topic 往往就是指事件。

topic 是全局消息,是廣播消息。

而消息跟 topic 的不同,消息是有特定接收方的,而 topic 沒有特定接收方。

LuatOS 的 sys.publish 接口是發(fā)布一個全局消息,也就是發(fā)布了一個 topic,也是發(fā)布了一個事件。

sys.subscribe 接口訂閱了一個 topic,也就是訂閱了一個事件。

sys.sendMsg, 是發(fā)送的消息, sys.waitMsg, 是等待和處理一個消息,是有特定的協(xié)程名字作為接收方的。

為了簡化描述,在下文的其余部分,如果沒有特別的說明,我們不再區(qū)分 topic 和消息的差異,統(tǒng)一把 topic 和消息稱為消息。

1.3.2 mqtt 和 LuatOS 的 topic 的差異

mqtt 的 topic 與 sys 的 topic 有如下差異:

mqtt 的 topic 的訂閱關(guān)系是服務(wù)器側(cè)(borker)維護的,支持嚴(yán)格匹配和通配符匹配;

sys 的 topic 的訂閱關(guān)系是 LuatOS 嵌入式系統(tǒng)內(nèi)部維護的,只支持嚴(yán)格匹配。

1.4 LuatOS 消息的使用

盡管有用戶消息隊列和系統(tǒng)消息隊列兩種差異,但是在使用消息的時候,可以不關(guān)注這種差異。

用戶只需要調(diào)用 sys.publish()接口和 sys.sendMsg()接口,按照自己的需要發(fā)送消息。

在接收和處理消息的時候,用 sys.subscribe()接口,指定某個消息的回調(diào)函數(shù),這時候的消息,也不需要區(qū)分用戶隊列的消息還是系統(tǒng)消息,只要知道消息的名字,都可以指定消息的回調(diào)處理函數(shù)。

使用 sys.waitUtil()接口,sys.waitMsg 接口的時候,也不需要關(guān)心是用戶隊列的消息還是系統(tǒng)隊列的消息,只要知道消息名字,都可以處理。

所有的發(fā)送消息,和接收處理消息的接口的使用,接下來都會做消息的介紹。

二、消息的發(fā)送

2.1 全局消息(sys 庫)

全局消息,也可以理解為廣播消息,所有的協(xié)程都是可以監(jiān)聽和處理的。

wKgZPGjWZUeAaIBYAADdtspX4rA778.png

例如:

wKgZO2jWZZuAb_DFAACSo6rwAFs574.png

該消息發(fā)布后,會放入用戶的消息隊列,等待被訂閱者處理。

2.2 定向消息(sys 庫)

使用sys.sendMsg(taskName, target, arg2, arg3, arg4)向指定任務(wù)發(fā)送消息,可以指定接收消息的協(xié)程的名字,也可以同時給出消息攜帶的參數(shù)。

這種消息很適用于協(xié)程間的點對點通信。 例如:

wKgZPGjWZgGAaX2DAADNJC5u3O8075.png

該消息直接發(fā)送給指定任務(wù),很適合請求-響應(yīng)模型。

三、消息的接收處理

LuatOS 消息的接收處理有三種方式: 訂閱消息,取消訂閱息,等待消息。

3.1 訂閱消息

通過sys.subscribe(id, callback)訂閱指定消息的 ID,注冊回調(diào)函數(shù),當(dāng)消息到達(dá)時調(diào)用回調(diào)函數(shù)進行處理。 例如:

wKgZPGjWZjSAUWhXAADi6YIXNq8031.png


3.2 取消訂閱

wKgZPGjWZl-ALAFEAAB3Zkx7FoI538.png


3.3 等待消息

wKgZO2jWZpCAZwhOAABnSoK7IoI562.png


3.3.1 sys.waitUntil 接口

wKgZO2jWZreAC3bhAAFX6XKSwL4130.png

接口原型為:

wKgZPGjWZuGAQhfNAAFn1lmzXIg179.png

使用示例:

wKgZPGjWZxGAEfyiAALhiDbB4CE693.png

該機制基于協(xié)程掛起和恢復(fù)實現(xiàn),方便同步等待異步事件。

3.3.2 sys.waitMsg 接口

waitMsg 接口用于定向接收協(xié)程間的消息,用于協(xié)程間的通信,比較適合請求-響應(yīng)的多協(xié)程合作的工作模式。

接口原型:

wKgZO2jWZ0OAGbd7AAHaMvHTO4w445.png

使用示例:

wKgZPGjWZ2qAaRBiAAHEgF6Zang502.png

waitMsg 有如下幾個特點:

(1)精準(zhǔn)定向:可以通過taskName和target指定發(fā)送方與消息名稱;

(2)參數(shù)傳遞:sendMsg 可以支持最多 3 個參數(shù)(通過arg2~arg4字段);

(3)適用協(xié)程之間的通信(如 HTTP 請求響應(yīng)、任務(wù)間數(shù)據(jù)同步)。

四、sys 系統(tǒng)消息

4.1 系統(tǒng)消息是什么

LuatOS 框架預(yù)定義了一些系統(tǒng)消息,開發(fā)者可以直接訂閱這些消息實現(xiàn)對硬件和系統(tǒng)事件的響應(yīng)。

系統(tǒng)消息是由 LuatOS 內(nèi)核或底層驅(qū)動自動發(fā)布的全局事件,面向所有訂閱者廣播,適用于硬件狀態(tài)、網(wǎng)絡(luò)事件等。

LuatOS 的系統(tǒng)消息,跟普通的消息并沒有區(qū)別,但是由于是 LuatOS 底層發(fā)布的消息,并沒有指定明確的接收協(xié)程名稱,所以系統(tǒng)消息只能是當(dāng)做全局的廣播消息來處理。

用戶可以使用 sys.WaitUntil 和 sys.subscibe 接口來處理系統(tǒng)消息,不能用 susplus.waitMsg 接口處理系統(tǒng)消息。

以下按功能模塊分類詳細(xì)說明所有系統(tǒng)消息及其觸發(fā)條件和參數(shù):

4.2 系統(tǒng)消息詳解

詳細(xì)的系統(tǒng)消息的定義和解讀,參見如下鏈接:

LuatOS 系統(tǒng)消息詳細(xì)定義:https://docs.openluat.com/osapi/sys_pub/

4.3 補充說明

1, 這些系統(tǒng)消息均為系統(tǒng)自動發(fā)布,不能由用戶主動發(fā)布。

2, 可結(jié)合 LuatOS 庫的 API(如mobile.getCellInfo()、mobile.scell())獲取詳細(xì)數(shù)據(jù)。

五、LuatOS 的定時器機制

LuatOS 定時器機制基于消息驅(qū)動,常用的軟件定時器接口集中在sys庫中。

定時器到時后,會由 sys 庫接收到定時器超時消息,并觸發(fā)注冊的回調(diào)函數(shù)或喚醒掛起的任務(wù)。

下面詳細(xì)介紹其用法和原理。

5.1 LuatOS 定時器的基本原理

wKgZPGjWZ_WAPkc2AAECEysMKYQ744.png

5.2 常用定時器 API 及用法

5.2.1 單次定時器

1,創(chuàng)建方式:

wKgZO2jWaCmAJSeTAADpghOi1xY296.png


2,代碼示例:

wKgZPGjWaFWAOxTlAAD3VRNmWH4049.png

5.2.2 循環(huán)定時器

1, 創(chuàng)建方式:

wKgZO2jWaLGAASrnAADZlAJXTVc114.png

2, 代碼示例

wKgZO2jWaNaAR70BAAEQXixHa8s891.png

5.2.3 停止定時器

1, 創(chuàng)建方式:

(1)停止指定定時器:

wKgZPGjWaPuAS2AMAABEZKnFozI701.png

(2)停止所有綁定到某個回調(diào)的定時器:

wKgZO2jWaR6Af6E9AABQm_XBolw873.png

2,代碼示例

wKgZO2jWaUGAXJQKAADfngyEtB4640.png

5.2.4 在任務(wù)中延時/等待消息

1, 函數(shù)說明

(1)sys.wait(ms):在 task 協(xié)程中掛起指定毫秒數(shù),底層用定時器實現(xiàn)

(2)sys.waitUntil("MSG_ID", timeout_ms):等待某個消息或超時

代碼示例:

wKgZO2jWaXuAAxRnAAIdO46TX6Q070.pngwKgZO2jWaZKAJAnzAAOlSvvAY6s506.png

5.2.5 判斷定時器狀態(tài)

1,使用方式

wKgZPGjWabmAAv-vAABjXJDjGG4868.png

2, 代碼示例

wKgZO2jWafiAZ3WaAAP8iynNgmQ606.png

5.3 總結(jié)

1,sys.waitsys.waitUntilsys.waitMsg只能在 task 協(xié)程中使用。

2, 定時器到時后,底層會向消息隊列推送rtos.MSG_TIMER消息,并附帶定時器 ID。

3, 系統(tǒng)主循環(huán) sys.run() 檢測到該消息后,會查找定時器池,將參數(shù)傳遞給注冊的回調(diào)或喚醒掛起的協(xié)程

4, 定時器總結(jié)表

序號
功能
API 示例
說明
1
單次定時器
sys.timerStart(func, 2000, arg)
2 秒后執(zhí)行一次
2
循環(huán)定時器
sys.timerLoopStart(func, 5000, arg)
每 5 秒執(zhí)行一次
3
停止定時器
sys.timerStop(timer_id)
停止指定定時器
4
停止所有定時器
sys.timerStopAll(func)
停止所有同回調(diào)定時器
5
延時
sys.wait(1000)
協(xié)程中延時 1 秒
6
等待消息
sys.waitUntil("MSG_ID", 5000)
等待消息或超時
7
等待消息
sys.waitMsg("TASK_NAME", "MSG_ID", 5000)
等待發(fā)送給"TASK_NAME"的消息或超時
8
判斷狀態(tài)
sys.timerIsActive(timer_id)
查詢定時器是否激活

六、消息機制的使用流程示例

如下的示例,展示了如何訂閱消息、發(fā)布消息和在任務(wù)中等待消息,幫助理解 LuatOS 消息機制的核心用法。

該示例完整展示了 LuatOS 消息機制的核心用法,建議在真實設(shè)備運行時結(jié)合串口日志觀察執(zhí)行流程。

實際項目中可根據(jù)需要調(diào)整消息類型和定時器間隔。

6.1 代碼示例

wKgZO2jWaqKAJmVeAAs4RUxHv3g041.png

6.2 代碼的執(zhí)行流程說明

1, 初始化階段:

wKgZO2jWaySABAiQAAD1o7M7Kzk340.png


2, 消息傳遞流程:

wKgZPGjWa02Ado41AAD5hOI0Aug737.png

3, 定時器生命周期:

wKgZO2jWa3SAVyTAAAD0iCoEOoc535.png

6.3 執(zhí)行日志

wKgZO2jWa7qAKUSCAAJA4Nem67U707.png


6.4 關(guān)鍵 API 對照表

功能
API
全局消息訂閱
sys.subscribe
定時器管理
sys.timerStart/Stop
定向消息發(fā)送
sys.sendMsg
定向消息接收
sys.waitMsg
任務(wù)間延時
sys.wait
具名任務(wù)創(chuàng)建
sys.taskInitEx

七、總結(jié)

消息機制原理:基于消息隊列和協(xié)程,發(fā)布者將消息放入隊列,訂閱者通過回調(diào)或協(xié)程等待并處理,支持異步事件驅(qū)動。

發(fā)送消息:sys.publish()廣播消息,sys.sendMsg()定向發(fā)送消息。

接收消息:sys.subscribe()訂閱消息,sys.waitUntil()和sys.waitMsg()阻塞等待消息,sys.unsubscribe()取消訂閱。

系統(tǒng)消息:框架預(yù)定義多種系統(tǒng)事件消息,直接訂閱即可響應(yīng)硬件和系統(tǒng)事件。

應(yīng)用場景:網(wǎng)絡(luò)模塊通信、傳感器數(shù)據(jù)廣播、定時器事件處理等。

通過合理使用 LuatOS 的消息機制,可以實現(xiàn)高效、解耦的物聯(lián)網(wǎng)應(yīng)用架構(gòu),支持復(fù)雜的事件驅(qū)動和多任務(wù)協(xié)作。

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

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    134

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    有線通信技術(shù)和無線通信技術(shù)在電能質(zhì)量在線監(jiān)測裝置的應(yīng)用場景有何不同?

    ? 有線通信技術(shù)和無線通信技術(shù)在電能質(zhì)量在線監(jiān)測裝置的應(yīng)用場景差異,核心源于 **“物理布線依賴” 與 “靈活性” 的本質(zhì)區(qū)別 **—— 有線技術(shù)需物理線纜連接,適合固定、高可靠、大
    的頭像 發(fā)表于 10-23 17:47 ?882次閱讀

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

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

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

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

    解碼LuatOS:短信功能的底層運作機制

    短信功能在LuatOS的運行并非表面所見那么簡單。本文將深入系統(tǒng)底層,解碼其通信協(xié)議、數(shù)據(jù)處理與系統(tǒng)交互,呈現(xiàn)完整的運作圖譜。 我們這期主要拆解airsms.lua文件,講清楚,短信功能
    的頭像 發(fā)表于 06-27 18:05 ?440次閱讀
    解碼<b class='flag-5'>LuatOS</b>:短信功能的底層運作<b class='flag-5'>機制</b>

    取樣示波器的技術(shù)原理和應(yīng)用場景

    負(fù)責(zé)對輸入信號進行采樣和保持,采樣速率決定了示波器的帶寬。應(yīng)用場景 信號處理:取樣示波器能夠精確地捕捉和分析信號的波形和參數(shù),幫助工程師更好地理解和優(yōu)化信號處理系統(tǒng)。 通信領(lǐng)域:在通信系統(tǒng)
    發(fā)表于 03-12 14:34

    頻域示波器的技術(shù)原理和應(yīng)用場景

    。 通過觀察信號的頻譜特性,可以判斷故障是否由頻率相關(guān)的問題引起,從而采取相應(yīng)的修復(fù)措施。 信號的高級分析: 在一些高級應(yīng)用場景,頻域示波器還可以用于串行信號的解碼、眼圖分析等。 這有助于深入了解信號
    發(fā)表于 03-11 14:37

    數(shù)據(jù)記錄儀的計數(shù)原理和應(yīng)用場景

    據(jù)記錄儀的內(nèi)部存儲器?,F(xiàn)代數(shù)據(jù)記錄儀通常采用閃存或SD卡等形式的存儲介質(zhì),具有較大的存儲容量和較快的讀取速度。 二、應(yīng)用場景數(shù)據(jù)記錄儀廣泛應(yīng)用于工業(yè)、科研、環(huán)境監(jiān)測等多個領(lǐng)域,具體應(yīng)用場景包括但不
    發(fā)表于 02-24 14:28

    敏捷合成器的技術(shù)原理和應(yīng)用場景

    ,在多個領(lǐng)域具有廣泛的應(yīng)用場景通信測試:在通信設(shè)備的研發(fā)和生產(chǎn)過程,敏捷合成器可用于生成各種調(diào)制信號和測試信號,以驗證設(shè)備的性能和穩(wěn)定性。 雷達(dá)系統(tǒng):雷達(dá)系統(tǒng)需要高精度和高穩(wěn)定性
    發(fā)表于 02-20 15:25

    時域反射計的技術(shù)原理和應(yīng)用場景

    位置及其阻抗值。反射信號的幅度和特性與傳輸線的阻抗密切相關(guān)。應(yīng)用場景時域反射計在多個領(lǐng)域有廣泛的應(yīng)用,具體包括: 電氣工程與通信:用于檢測通信電纜和金屬電纜(如雙絞線、同軸電纜)
    發(fā)表于 02-11 14:39

    LoRaWAN的特點和應(yīng)用場景

    LoRaWAN(Long Range Wide Area Network)是一種針對低功耗廣域網(wǎng)絡(luò)(LPWAN)的通信協(xié)議,旨在為物聯(lián)網(wǎng)設(shè)備提供長距離、低功耗的通信解決方案。本文將從LoRaWAN的、工作原理、特點、應(yīng)用場景
    的頭像 發(fā)表于 02-03 15:26 ?2038次閱讀

    脈沖信號分析儀?的原理和應(yīng)用場景

    規(guī)律。二、應(yīng)用場景脈沖信號分析儀在多個領(lǐng)域都有廣泛的應(yīng)用,以下是一些主要的應(yīng)用場景: 核物理和粒子探測:在核物理研究和粒子探測實驗,脈沖信號分析儀被用于測量和分析粒子的能量、質(zhì)量等參數(shù)。這些參數(shù)對于
    發(fā)表于 01-23 14:00

    混合信號分析儀的原理和應(yīng)用場景

    混合信號分析儀是一種集成度高、功能強大的電子測量設(shè)備,其原理和應(yīng)用場景如下:一、原理混合信號分析儀由模擬部分和數(shù)字部分組成,用于混合信號的分析。其工作原理主要包括以下幾個方面: 信號采樣:混合信號
    發(fā)表于 01-21 16:45

    信號分析儀的原理和應(yīng)用場景

    信號分析儀是一種用于分析電信號頻譜和特性的儀器,其原理和應(yīng)用場景如下:一、信號分析儀的原理信號分析儀的工作原理基于頻譜分析技術(shù)。頻譜表示信號在各個頻率上的能量分布情況。具體過程如下: 信號采樣:信號
    發(fā)表于 01-17 14:37

    多用示波器的原理和應(yīng)用場景

    多用示波器是一種功能強大的電子測量儀器,其原理和應(yīng)用場景如下:一、原理多用示波器主要是利用電子示波管的特性,將人眼無法直接觀測的交變電信號轉(zhuǎn)換成圖像,顯示在熒光屏上以便測量。具體來說,當(dāng)被測信號輸入
    發(fā)表于 01-09 15:42

    測試接收機的技術(shù)原理和應(yīng)用場景

    的應(yīng)用,以下是幾個主要的應(yīng)用場景通信領(lǐng)域:在通信系統(tǒng),測試接收機用于測試和分析信號的傳輸性能、解調(diào)質(zhì)量以及通信協(xié)議的合規(guī)性。通過測量信
    發(fā)表于 12-03 14:23