在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

ZWave中的消息隊列機制是什么

汽車電子技術(shù) ? 來源:IOT物聯(lián)網(wǎng)小鎮(zhèn) ? 作者:Sewain ? 2023-02-14 13:41 ? 次閱讀

文章主題

在我們的日常編程中,對消息隊列的需求非常常見,使用一個簡潔、高效的消息隊列編程模型,對于代碼邏輯的清晰性,對于事件處理的高效率來說,是非常重要的。這篇文章就來看看 ZWave 中是通過什么機制為我們提供了一個便捷的消息隊列處理機制。



    內(nèi)容導航
  • 消息隊列是什么

  • 我自己寫的消息隊列

  • ZWave 消息隊列的結(jié)構(gòu)

  • ZWave 消息隊列的使用(初始化、存儲消息、取出消息)

    消息隊列是什么
    

    消息隊列最主要特點是:存儲消息,先進先出。

    比如在典型的生產(chǎn)者-消費者編程模型中,先創(chuàng)建一個消息隊列,最大容量是 100。

    當生產(chǎn)者產(chǎn)生一條消息時,如果消息隊列未滿,就放進消息隊列的尾部。

    消費者定期去檢查消息隊列中是否有消息,如果有,則取出最前面的那條消息進行處理,直到把隊列中的所有消息都處理完。

    當然,如果鏈表來創(chuàng)建一個動態(tài)的消息隊列也是可以的,這樣就可以構(gòu)成一個無容量限制的隊列,這個模型有點復(fù)雜,咱們暫且不討論它。

圖片

我自己寫的消息隊列  


在我自己的開發(fā)過程中,經(jīng)常需要使用消息隊列來保存多條消息,每一條消息都存儲長度不等的字符串,于是就自己寫了一個最簡單的消息隊列實現(xiàn)模板,當然對于項目來說也是最合適的,因為是量體裁衣嘛。

一共2個文件(.h, .c),每次項目中需要用到時,就把這2個文件拷貝過來,再簡單修改一下(保存的每條消息滿足應(yīng)用的需求),就直接用上了。簡單、粗暴、有效、好用,每次都能很塊就解決我的問題。

這里簡單截個圖,如果需要,我可以免費分享!

圖片

使用起來也比較簡單,只需要3個步驟。

圖片

ZWave 消息隊列的結(jié)構(gòu)  


ZWave SDK 的每一個 Sample 中已經(jīng)給我們提供了一個很好的消息隊列編程模型,不過它還嵌入了一個 task 任務(wù)管理的機制,后面我會簡單畫一下 task 的處理邏輯,但是不會深入探究。

先來看一下 ZWave 提供的消息隊列的結(jié)構(gòu)。

圖片

請注意:這是消息隊列的結(jié)構(gòu),而這個隊列中存儲的每一條消息是存儲在一個數(shù)組緩沖區(qū)中,通過 array 指針進行引用。因此,在消息隊列初始化的時候,必須提供一個數(shù)組,并把數(shù)組的地址賦值給 array 指針。

關(guān)于這個數(shù)組,從代碼中可以看到 QElementType 其實就是一個無符號字節(jié),因此,這個消息隊列僅僅能存儲最最簡單的消息,即:一個字節(jié)的數(shù)值。可以看一下 SwitchOnOff.c 中所存儲的消息,都是 EVENT_APP 這個枚舉類型的值。


    ZWave 消息隊列的使用

1.消息隊列的初始化

在應(yīng)用程序初始化的時候,ZWave 實例程序為我們已經(jīng)創(chuàng)建好一個消息隊列了,流程如下。

圖片

可以看到,一共有 2 個消息隊列:eventQueue 和 jobQueue,這兩個隊列的實現(xiàn)機制都是一樣的,只不過是把不同類型的消息放在不同的隊列而已,因此,只要分析其中一個 eventQueue 就可以了。

初始化完成之后,存儲消息的數(shù)組是空的,消息隊列的有效消息個數(shù)是 0。

2.存儲消息到消息隊列

就是把一條新消息放入消息隊列的數(shù)組中,然后更新消息隊列的一些狀態(tài)參數(shù),比如:有效消息長度,存儲的這條消息位置等等。

函數(shù)調(diào)用流程如下。

圖片

3.從消息隊列中獲取消息

這個也很好理解,就是通過消息隊列的結(jié)構(gòu)檢查一下是否有消息等待處理。如果是的話,就取出消息,并更新消息隊列的一些狀態(tài)參數(shù)。

函數(shù)調(diào)用流程如下。

圖片

ZWave 文檔中已經(jīng)說明,協(xié)議層會定期調(diào)用應(yīng)用層的函數(shù) ApplicationPoll( ) ,這也是 ZWave 推薦的方式讓應(yīng)用層執(zhí)行自己的邏輯,但是應(yīng)用層不能在這個函數(shù)中執(zhí)行太長時間。

在這個函數(shù)中,我們可以直接去消息隊列中取出一個消息。但是如果這么做的話,就浪費了 ZWave 為我們提供的 Task 機制,因此這里調(diào)用了 TaskApplicationPoll( ),然后我們應(yīng)用層的事件處理函數(shù) AppStateManager( ) 就老老實實的待著,等待別人把事件消息準備好、喂過來。

其實,這也是一種分層編程思想,如下。

圖片

** 總結(jié) **

現(xiàn)在再回頭看一下 ZWave 的消息隊列處理機制,思路非常清晰,而且擴充性非常強。

后面我希望自己可以抽一點時間,把這里的代碼抽取出來,寫一個通用的、能夠處理一些復(fù)雜消息的消息隊列機制,讓開發(fā)過程變得更加愉悅!
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機制
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    9893
  • Zwave
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    12200
  • 消息隊列
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    3047
收藏 人收藏

    評論

    相關(guān)推薦

    FIFO隊列原理簡述

    FIFO是隊列機制中最簡單的,每個接口上只有一個FIFO隊列,表面上看FIFO隊列并沒有提供什么QoS保證,甚至很多人認為FIFO嚴格意義上不算做一種
    發(fā)表于 07-10 09:22 ?1798次閱讀

    ZWAVE技術(shù)貼

    公司近來發(fā)展zwave產(chǎn)品,zwave確實是很困難并且沒有資料參考。請問各位大神誰知道zwave程序如何燒寫用什么軟件?
    發(fā)表于 09-19 19:29

    zwave 認證資料總結(jié)

    zwave 通訊 認證 相關(guān)的資料學習。
    發(fā)表于 12-01 17:29

    zwave 通訊 資料 zwave 學習資料 翻譯好的一些zwave資料

    zwave通訊資料
    發(fā)表于 12-05 19:20

    Linux等待隊列如何實現(xiàn)

    在軟件開發(fā)任務(wù)經(jīng)常由于某種條件沒有得到滿足而不得不進入睡眠狀態(tài),然后等待條件得到滿足的時候再繼續(xù)運行,進入運行狀態(tài)。這種需求需要等待隊列機制的支持。Linux中提供了等待隊列
    發(fā)表于 08-05 07:47

    基于stm32串口環(huán)形緩沖隊列處理機制是什么

    基于stm32串口環(huán)形緩沖隊列處理機制是什么
    發(fā)表于 12-08 07:06

    怎樣去設(shè)計一種采用覆蓋機制的FIFO隊列模型呢

    FIFO隊列是什么?怎樣去設(shè)計一種采用覆蓋機制的FIFO隊列模型呢?
    發(fā)表于 12-08 06:07

    一種高效的磁盤隊列I/O機制

    分析了傳統(tǒng)磁盤隊列的存儲管理開銷和讀寫性能,針對磁盤隊列I/O已成為影響消息服務(wù)器性能的首要瓶頸,提出了一種高效磁盤隊列I/O機制—FlashQ。FlashQ采用物理上連續(xù)的磁盤塊
    發(fā)表于 05-14 19:51 ?32次下載

    iFix組態(tài)軟件基于隊列的命令處理機制研究

    提出了一種在iFix 組態(tài)軟件創(chuàng)建消息隊列的方法,利用這種消息隊列實現(xiàn)了對控制命令的執(zhí)行情況的跟蹤與處理。這種基于隊列的命令處理機制確保了
    發(fā)表于 12-23 14:06 ?22次下載

    基于多級隊列的云服務(wù)并發(fā)量分級緩存機制

    基于多級隊列的云服務(wù)并發(fā)量分級緩存機制
    發(fā)表于 06-24 11:35 ?15次下載

    SystemVerilog隊列

    隊列是大小可變的有序集合,隊列中元素必須是同一個類型的。隊列支持對其所有元素的訪問以及在隊列的開始或結(jié)束處插入和刪除。
    的頭像 發(fā)表于 10-31 10:09 ?4374次閱讀

    單片機消息隊列的實現(xiàn)原理和機制

    單片機開發(fā)過程通常會用到“消息隊列”,一般實現(xiàn)的方法有多種。 本文給大家分享一下隊列實現(xiàn)的原理和機制
    的頭像 發(fā)表于 05-26 09:50 ?1818次閱讀
    單片機消息<b class='flag-5'>隊列</b>的實現(xiàn)原理和<b class='flag-5'>機制</b>

    RTOS消息隊列的應(yīng)用

    基于RTOS的應(yīng)用,通常使用隊列機制實現(xiàn)任務(wù)間的數(shù)據(jù)交互,一個應(yīng)用程序可以有任意數(shù)量的消息隊列,每個消息隊列都有自己的用途。
    發(fā)表于 05-29 10:49 ?733次閱讀
    RTOS消息<b class='flag-5'>隊列</b>的應(yīng)用

    FreeRTOS消息隊列介紹

    隊列是為了任務(wù)與任務(wù)、任務(wù)與中斷之間的通信而準備的,可以在任務(wù)與任務(wù)、任務(wù)與中斷之間傳遞消息,隊列可以存儲有限的、大小固定的數(shù)據(jù)項目。任務(wù)與任務(wù)、任務(wù)與中斷之間要交流的數(shù)據(jù)保存在隊列
    的頭像 發(fā)表于 07-06 16:58 ?963次閱讀
    FreeRTOS消息<b class='flag-5'>隊列</b>介紹

    zwave與zigbee的區(qū)別

    zwave是一種無線通信技術(shù),允許任何節(jié)點直接或間接與通信范圍內(nèi)的其他鄰近節(jié)點進行通信,具有低成本、低功耗和高可靠性的特征。
    的頭像 發(fā)表于 12-11 16:35 ?839次閱讀
    主站蜘蛛池模板: 男人天堂网在线观看 | 爱情岛网站亚洲禁18进入 | 三级视频在线播放线观看 | 视频在线播放免费 | 婷婷激情视频 | 欧美成人午夜精品免费福利 | 四虎国产永久在线观看 | 欧美不卡视频在线观看 | 色综合天天综一个色天天综合网 | 午夜久久久久久网站 | 免费高清特级毛片 | 欧色美 | 久久天天干 | 亚洲成人国产 | 免费精品美女久久久久久久久 | 男人的天堂在线免费视频 | 国产叼嘿视频网站在线观看 | 午夜国产精品理论片久久影院 | 日本黄色影片在线观看 | 亚洲男人精品 | 朱元璋传奇1998王耿豪版 | 在线观看视频你懂得 | 欧美yw193.c㎝在线观看 | 五月婷综合网 | 国产男人搡女人免费视频 | 视频在线观看高清免费大全 | 欧美一区二区三区综合色视频 | a毛片成人免费全部播放 | 一级全免费视频播放 | 久久青青成人亚洲精品 | 亚洲va久久久噜噜噜久久男同 | 手机在线观看免费视频 | 1024手机看片国产旧版你懂的 | 青青热久久国产久精品秒播 | 日本三级高清 | 天天干天天做天天射 | 影音先锋色天使 | 国模小丫大尺度啪啪人体 | 天天操天天射天天操 | 色.com| 日韩一级片免费在线观看 |