日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

一. 有個(gè)簡(jiǎn)單的問(wèn)題(什么是愛(ài)情)

為什么開(kāi)源RTOS都只將我們送到Main?卻沒(méi)有一個(gè)開(kāi)源的任務(wù)管理+消息訂閱框架+延時(shí)消息處理框架。就像LVGL好像沒(méi)有開(kāi)源的類似于手表功能頁(yè)面切換框架。


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



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

#defineEVT_LOOP_PUSH(pfunc, pargs, delay) //延時(shí)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 # 英文說(shuō)明├── README_zh.md # 中文說(shuō)明├── inc/│ └── event_loop.h # 對(duì)外 API├── src/│ └── event_loop.c # 實(shí)現(xiàn)├── samples/│ └── event_loop_test.c # 可選 MSH 示例└── SConscript # DefineGroup、CPPPATH

readme.md有詳細(xì)介紹

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

三. thread_manager軟件包

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

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

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

這個(gè)軟件包主要完成以下工作:

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

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

延時(shí)事件:這個(gè)里面就用到了上面的event loop了。


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


四. 使用演示

直接使用thread_manager軟件包,這個(gè)會(huì)打開(kāi)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)

這樣會(huì)打開(kāi)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開(kāi)發(fā)板

menuconfig配置

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

更新軟件包 pkgs --update

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

編譯

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

測(cè)試

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

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

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

tmsg_send - send zero-payload event to task mailbox

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

tmsg_send_de - send delayed zero-payload event via event_loop

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

tmsg_cal - cancel pending delayed event for task/msg

取消某個(gè)任務(wù)id的某個(gè)事件,例如:tmsg_cal 1 1 取消evt loop事件數(shù)組中往任務(wù)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消息,因?yàn)閠hread_test1和thread_test都監(jiān)聽(tīng)了thread_test2的hello消息,可以看到下面有相關(guān)log打印。

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


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

整體測(cè)試圖片:

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

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

    關(guān)注

    26

    文章

    6433

    瀏覽量

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

    關(guān)注

    0

    文章

    117

    瀏覽量

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

    關(guān)注

    32

    文章

    1644

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

    基于RT-Thread的RoboMaster電控框架設(shè)計(jì)

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

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

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

    RT-Thread 軟件包介紹

    RT-Thread 軟件包介紹軟件包的目的軟件包在高級(jí)語(yǔ)言中非常常見(jiàn),很多高級(jí)語(yǔ)言都有對(duì)應(yīng)的軟件包平臺(tái),比如 Python 的 PyPi,R
    發(fā)表于 05-21 19:38 ?6067次閱讀

    RT-Thread軟件包定義和使用

    RT-Thread軟件包是運(yùn)行于RT-Thread物聯(lián)網(wǎng)操作系統(tǒng)平臺(tái)上,面向不同應(yīng)用領(lǐng)域的通用軟件組件 。RT-Thread 同時(shí)提供了開(kāi)放
    的頭像 發(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代碼庫(kù)的移植實(shí)現(xiàn),目前只支持 SX1278 LoRa設(shè)備。該軟件包在原代碼庫(kù)功能的基礎(chǔ)上,對(duì)接 RT-Thread SPI 設(shè)備驅(qū)動(dòng)
    的頭像 發(fā)表于 04-03 15:35 ?9302次閱讀

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

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

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

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

    RT-Thread env工具安裝

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

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

    RT-Thread軟件包,使用時(shí)需要手動(dòng)通過(guò) ENV 工具 更新到 本地的 packages 目錄,并且 packages 目錄默認(rèn)不參與 Git 工程管理軟件包多了,偶爾需要更
    的頭像 發(fā)表于 08-11 15:02 ?2820次閱讀
    <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ū)氛圍,以及設(shè)備驅(qū)動(dòng)框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇 RT-Thread 進(jìn)
    的頭像 發(fā)表于 09-19 19:55 ?2742次閱讀

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

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

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

    開(kāi)發(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 ?2119次閱讀
    <b class='flag-5'>RT-Thread</b>使用cjson<b class='flag-5'>軟件包</b>發(fā)送64位長(zhǎng)整型數(shù)據(jù)

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

    開(kāi)發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源為0.2.2,Agile Modbus軟件包版本為v1.1.2。工程使用上一篇
    的頭像 發(fā)表于 10-11 15:37 ?6005次閱讀
    <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 ?2163次閱讀
    <b class='flag-5'>RT-Thread</b>中mymqtt<b class='flag-5'>軟件包</b>的使用方法
    会泽县| 滨州市| 阿拉善左旗| 繁昌县| 夹江县| 延边| 贺州市| 玉田县| 英山县| 南宫市| 青河县| 常山县| 钟祥市| 成安县| 安新县| 乌拉特中旗| 资溪县| 郑州市| 红桥区| 莎车县| 河东区| 乐清市| 滦南县| 商都县| 久治县| 成武县| 商水县| 巴彦县| 青川县| 金寨县| 资阳市| 旬邑县| 浙江省| 台前县| 阜城县| 略阳县| 裕民县| 滨州市| 潍坊市| 洪洞县| 徐汇区|