哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

RT-Thread任務+消息訂閱管理框架軟件包:thread_manager+event_loop

RT-Thread官方賬號 ? 2026-04-19 15:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一. 有個簡單的問題(什么是愛情)

為什么開源RTOS都只將我們送到Main?卻沒有一個開源的任務管理+消息訂閱框架+延時消息處理框架。就像LVGL好像沒有開源的類似于手表功能頁面切換框架。


上篇文章有個讀者留言,是否可以支持RT-Thread,索性放假也無聊,所以就整了兩個軟件包:event loop+thread_manager



二. event loop軟件包一個是event loop軟件包(實際上這個18年的時候在好吧!再包一層,講講思想講過理論了,只是一直沒有做成軟件包,總想為RT-Thread做點什么,但是一直沒有pr過東西,慚愧,終于算是圓了夢):這個軟件包的主要主要就是當你延時做什么事情時,不需要開關(guān)定時器,幫你包好了。只有三個接口注意入?yún)⑹侵羔槪?可以將指針強轉(zhuǎn)數(shù)值使用):

#defineEVT_LOOP_PUSH(pfunc, pargs, delay) //延時delay執(zhí)行pfunc(pargs)#defineEVT_LOOP_REMOVE(pfunc) //移除已經(jīng)入列的執(zhí)行pfunc#defineEVT_LOOP_REMOVE_WITH_ARGS(pfunc, pargs) //移除已經(jīng)入列的執(zhí)行pfunc并且參數(shù)pargs

e6a5c1ca-3bc2-11f1-ab55-92fbcf53809c.png源碼:?https://github.com/Bluetooth-BLE/event_loop

event_loop/├── README.md # 英文說明├── README_zh.md # 中文說明├── inc/│ └── event_loop.h # 對外 API├── src/│ └── event_loop.c # 實現(xiàn)├── samples/│ └── event_loop_test.c # 可選 MSH 示例└── SConscript # DefineGroup、CPPPATH

readme.md有詳細介紹

e6c66efc-3bc2-11f1-ab55-92fbcf53809c.pnge6e81872-3bc2-11f1-ab55-92fbcf53809c.png

三. thread_manager軟件包

https://github.com/Bluetooth-BLE/thread_manager

thread_manager/├── README.md # 英文說明├── README_zh.md # 中文說明├── inc/ # 對外頭文件(thread.h, thread_msg.h, thread_manager.h, thread_sysready.h 等)│ └── thread_config.h # 應用配置:線程 ID、棧、優(yōu)先級(按產(chǎn)品修改)├── src/│ ├── thread.c # 注冊表引導、thread_task_lookup、thread_spawn_all_registered│ ├── thread_msg.c # 注冊表初始化、分發(fā)、轉(zhuǎn)發(fā)、訂閱 API│ ├── thread_manager.c # 管理線程、啟停同步│ └── thread_sysready.c # 可選 system-ready(開啟 THREAD_SYSTEM_READY 時)├── samples/ # 示例任務 + thread_file_gen.py(生成輔助腳本)└── SConscript # DefineGroup、CPPPATH

e709320a-3bc2-11f1-ab55-92fbcf53809c.png

這個軟件包主要完成以下工作:

  • 任務啟動:協(xié)調(diào)多個應用線程順序啟動,不受任務優(yōu)先級影響,避免任務之間依賴出現(xiàn)的消息無效或其他異常情況;所有任務初始化完畢后,會有一個統(tǒng)一的system-ready事件廣播,然后退出啟動協(xié)調(diào);
  • 任務退出:順序退出,例如可預知的關(guān)機,每個任務可能在關(guān)機前都要做一些本任務需要收尾的工作,例如重要信息存儲等,這樣就不需要將關(guān)機事件在某個地方調(diào)用所有任務提供的api執(zhí)行一遍,自己的事情自己做;

消息訂閱和發(fā)布分發(fā):這個就是上篇文章里面講的內(nèi)容了:Thread msg Topic-pub/sub

延時事件:這個里面就用到了上面的event loop了。


每個thread都是一樣的,所以也寫了py腳本,直接用腳本生成,開發(fā)者只需要關(guān)注自己的棧+優(yōu)先級+事件+消息payload;


四. 使用演示

直接使用thread_manager軟件包,這個會打開event_loop軟件包

RT-Thread online packages systempackages---> [*] Thread manager (task registry, message dispatch,manager thread)---> [*] Publishsystem-ready event after startup sync [*] Build samples (thread_test/thread_test1/thread_test2)

這樣會打開event loop

RT-Thread online packages system packages ---> [*] Eventloop(delayed dispatch: mq + soft one-shottimer)---> (32) Maximum delayed slots intable (15)Message queuedepth(immediate + due callbacks) (3072) Event loop thread stacksize(bytes) (12) Event loop threadpriority(smaller = higher5 [*] Build event_loop sample (event_loop_test.c)

我依然使用的是我的曹孟德52840開發(fā)板

menuconfig配置

e71cca72-3bc2-11f1-ab55-92fbcf53809c.gif

更新軟件包 pkgs --update

e73836ea-3bc2-11f1-ab55-92fbcf53809c.png

編譯

e75ec10c-3bc2-11f1-ab55-92fbcf53809c.png

測試

e76fa04e-3bc2-11f1-ab55-92fbcf53809c.png

msh命令

msh >helpRT-Thread shell commands:gpio_sample - gpio sampleevt_loop_test - run event_loop delayed demotmsg_send - send zero-payload event to task mailboxtmsg_send_de - send delayed zero-payload event via event_looptmsg_cal - cancel pending delayed eventfortask/msgpin - pin [option]clear - clear the terminal screenversion - show RT-Thread version informationlist - list objectshelp - RT-Thread shellhelpps - List threadsinthe systemfree - Show the memory usageinthe systembacktrace -printbacktrace of a thread

evt_loop_test - run event_loop delayed demo

主要延時執(zhí)行兩個函數(shù)

e7ceb05c-3bc2-11f1-ab55-92fbcf53809c.png

tmsg_send - send zero-payload event to task mailbox

向某個任務id 發(fā)送消息id, 例如:tmsg_send 1 1 往任務id1發(fā)送msg 1

tmsg_send_de - send delayed zero-payload event via event_loop

向某個任務id 延時發(fā)送消息id, 例如:tmsg_send_de 1 1 5000 往任務id1延時5s后發(fā)送msg 1

tmsg_cal - cancel pending delayed event for task/msg

取消某個任務id的某個事件,例如:tmsg_cal 1 1 取消evt loop事件數(shù)組中往任務id1發(fā)送msg 1



evt_loop_test 3 5 test1執(zhí)行3次, test2執(zhí)行5次

e7edeea4-3bc2-11f1-ab55-92fbcf53809c.gif

tmsg_send 2 1:立刻向thread_test2線程發(fā)送hello消息,因為thread_test1和thread_test都監(jiān)聽了thread_test2的hello消息,可以看到下面有相關(guān)log打印。

tmsg_send_de 2 1 3000:延時3s后thread_test2線程發(fā)送hello消息


e8028cec-3bc2-11f1-ab55-92fbcf53809c.gif

整體測試圖片:

e8186abc-3bc2-11f1-ab55-92fbcf53809c.png

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

    關(guān)注

    26

    文章

    6405

    瀏覽量

    120537
  • 軟件包
    +關(guān)注

    關(guān)注

    0

    文章

    116

    瀏覽量

    12176
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1636

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    RT-Thread記錄(十八、SHT21與24C02軟件包

    本文學習測試一下幾款典型設備的 RT-Thread I2C軟件包
    的頭像 發(fā)表于 07-08 11:07 ?5348次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(十八、SHT21與24C02<b class='flag-5'>軟件包</b>)

    基于RT-Thread的RoboMaster電控框架設計

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇 RT-Thread
    發(fā)表于 09-06 15:21 ?1646次閱讀

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)
    的頭像 發(fā)表于 01-25 09:33 ?5606次閱讀
    <b class='flag-5'>RT-Thread</b> Vector<b class='flag-5'>軟件包</b>:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)

    RT-Thread 軟件包介紹

    RT-Thread 軟件包介紹軟件包的目的軟件包在高級語言中非常常見,很多高級語言都有對應的軟件包平臺,比如 Python 的 PyPi,R
    發(fā)表于 05-21 19:38 ?6055次閱讀

    RT-Thread軟件包定義和使用

    RT-Thread軟件包是運行于RT-Thread物聯(lián)網(wǎng)操作系統(tǒng)平臺上,面向不同應用領(lǐng)域的通用軟件組件 。RT-Thread 同時提供了開放
    的頭像 發(fā)表于 05-21 11:29 ?1.2w次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>軟件包</b>定義和使用

    RT-Thread社區(qū)上有哪些優(yōu)秀的軟件包

    SX12XX 軟件包是基于 semtech 官網(wǎng) Firmware Drivers V2.1.0代碼庫的移植實現(xiàn),目前只支持 SX1278 LoRa設備。該軟件包在原代碼庫功能的基礎(chǔ)上,對接 RT-Thread SPI 設備驅(qū)動
    的頭像 發(fā)表于 04-03 15:35 ?9254次閱讀

    2022 RT-Thread全球技術(shù)大會:RT-Thread軟件包

    RT-Thread在2022年上半年新增幾十個軟件包:rtt-rust、LuatOS、gui-guider-demo。
    的頭像 發(fā)表于 05-27 14:12 ?1681次閱讀
    2022 <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:<b class='flag-5'>RT-Thread</b><b class='flag-5'>軟件包</b>

    RT-Thread全球技術(shù)大會:恩智浦新增100+軟件包

    RT-Thread全球技術(shù)大會:恩智浦新增100+軟件包,支持了很多有用的功能。 ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:26 ?1563次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:恩智浦新增100+<b class='flag-5'>軟件包</b>

    RT-Thread env工具安裝

    env 是 RT-Thread 推出的開發(fā)輔助工具,針對基于 RT-Thread 操作系統(tǒng)的項目工程,提供編譯構(gòu)建環(huán)境、圖形化系統(tǒng)配置及軟件包管理功能。其內(nèi)置的 menuconfig 提供了簡單易用的配置剪裁工具,可對內(nèi)核、組件
    的頭像 發(fā)表于 01-11 09:00 ?3061次閱讀
    <b class='flag-5'>RT-Thread</b> env工具安裝

    RT-Thread在線軟件包改為本地軟件包的方法

    RT-Thread軟件包,使用時需要手動通過 ENV 工具 更新到 本地的 packages 目錄,并且 packages 目錄默認不參與 Git 工程管理軟件包多了,偶爾需要更
    的頭像 發(fā)表于 08-11 15:02 ?2696次閱讀
    <b class='flag-5'>RT-Thread</b>在線<b class='flag-5'>軟件包</b>改為本地<b class='flag-5'>軟件包</b>的方法

    基于 RT-Thread 的 RoboMaster 電控框架(一)

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇 RT-Thread
    的頭像 發(fā)表于 09-19 19:55 ?2616次閱讀

    基于RT-Thread的RoboMaster電控框架(二)

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包
    的頭像 發(fā)表于 09-20 15:16 ?1941次閱讀

    RT-Thread使用cjson軟件包發(fā)送64位長整型數(shù)據(jù)

    開發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源為0.2.2,rt-thread版本為4.1.1,cjson軟件包使
    的頭像 發(fā)表于 10-11 15:09 ?2074次閱讀
    <b class='flag-5'>RT-Thread</b>使用cjson<b class='flag-5'>軟件包</b>發(fā)送64位長整型數(shù)據(jù)

    RT-Thread中Agile Modbus軟件包的使用方法

    開發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源為0.2.2,Agile Modbus軟件包版本為v1.1.2。工程使用上一篇
    的頭像 發(fā)表于 10-11 15:37 ?5957次閱讀
    <b class='flag-5'>RT-Thread</b>中Agile Modbus<b class='flag-5'>軟件包</b>的使用方法

    RT-Thread中mymqtt軟件包的使用方法

    在上一篇文章 RT-Thread中Lan8720和lwip協(xié)議棧的使用的工程基礎(chǔ)上添加mymqtt軟件包。 使能mqtt example和mqtt test,保存,等待下載更新軟件包
    的頭像 發(fā)表于 10-13 10:44 ?2118次閱讀
    <b class='flag-5'>RT-Thread</b>中mymqtt<b class='flag-5'>軟件包</b>的使用方法
    攀枝花市| 额济纳旗| 壶关县| 庆安县| 永顺县| 都兰县| 万安县| 田林县| 平昌县| 正宁县| 金山区| 海门市| 樟树市| 繁峙县| 五寨县| 芒康县| 兴义市| 卓尼县| 镇平县| 汉川市| 灵宝市| 邵阳市| 灵宝市| 芮城县| 奎屯市| 色达县| 西峡县| 尼勒克县| 木里| 华亭县| 阳江市| 新邵县| 黄大仙区| 永顺县| 长海县| 华池县| 常熟市| 兰坪| 长岛县| 军事| 金堂县|