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

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

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

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

立創(chuàng)·梁山派開發(fā)板-21年電賽F題-送藥小車數(shù)據(jù)的發(fā)布與訂閱

jf_31863339 ? 來源:jf_31863339 ? 作者:jf_31863339 ? 2023-08-07 09:55 ? 次閱讀

送藥小車代碼倉(cāng)庫(kù):https://gitee.com/lcsc/medical_car

送藥小車數(shù)據(jù)的發(fā)布與訂閱

既然使用了RTOS,就不能像以前裸機(jī)一樣全局變量滿天飛了(當(dāng)然裸機(jī)也不能全局變量滿天飛)。

在實(shí)時(shí)操作系統(tǒng)(RTOS)中,不推薦或不建議使用全局變量來傳遞信息的原因主要有以下幾點(diǎn):

競(jìng)爭(zhēng)條件:在多任務(wù)環(huán)境下,全局變量會(huì)面臨競(jìng)爭(zhēng)條件的問題。當(dāng)多個(gè)任務(wù)同時(shí)讀寫同一個(gè)全局變量時(shí),會(huì)導(dǎo)致數(shù)據(jù)的不一致性和錯(cuò)誤的結(jié)果。這是因?yàn)槿蝿?wù)的執(zhí)行是并發(fā)的,無法控制它們的執(zhí)行順序。

數(shù)據(jù)共享和保護(hù):全局變量被所有任務(wù)共享,這意味著多個(gè)任務(wù)可以同時(shí)訪問和修改該變量。如果沒有正確的數(shù)據(jù)保護(hù)機(jī)制,可能會(huì)導(dǎo)致數(shù)據(jù)損壞或沖突。

可維護(hù)性和調(diào)試?yán)щy:使用全局變量傳遞信息可能導(dǎo)致代碼的可維護(hù)性和調(diào)試的困難。由于全局變量可以被任何任務(wù)修改,追蹤問題的根源和調(diào)試錯(cuò)誤可能會(huì)變得更加困難。

為了避免上述問題,RTOS提供了一些機(jī)制來進(jìn)行任務(wù)間的通信和數(shù)據(jù)傳遞,例如:

消息隊(duì)列:任務(wù)可以通過消息隊(duì)列來發(fā)送和接收消息。每個(gè)任務(wù)有自己的私有消息隊(duì)列,通過發(fā)送和接收消息來進(jìn)行通信,避免了全局變量的競(jìng)爭(zhēng)條件和數(shù)據(jù)共享問題。

信號(hào)量:信號(hào)量可以用于同步任務(wù)的執(zhí)行和共享資源的訪問。任務(wù)可以通過申請(qǐng)和釋放信號(hào)量來控制對(duì)共享資源的訪問,并確保任務(wù)之間的互斥性和同步性。

事件標(biāo)志組:事件標(biāo)志組可以用于任務(wù)之間的通知和事件觸發(fā)。一個(gè)任務(wù)可以等待一個(gè)或多個(gè)事件標(biāo)志的狀態(tài)變化,并在事件發(fā)生時(shí)被喚醒執(zhí)行相應(yīng)的操作。

通過使用這些RTOS提供的通信機(jī)制,可以更安全地在任務(wù)之間傳遞信息,避免競(jìng)爭(zhēng)條件和數(shù)據(jù)共享問題,并提高代碼的可維護(hù)性和調(diào)試效率。

在送藥小車這個(gè)工程中采用RT-Thread軟件包uMCN,uMCN (Micro Multi-Communication Node) 提供了一種基于發(fā)布/訂閱模式的安全跨線程/進(jìn)程的通信方式。在系統(tǒng)中,uMCN 被廣泛應(yīng)用于任務(wù)和模塊間的數(shù)據(jù)通信。使用發(fā)布-訂閱(Publish-Subscribe)機(jī)制可以提供更靈活和高效的任務(wù)間通信方式,支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的通信模式。這種機(jī)制可以解決使用全局變量傳遞信息可能帶來的競(jìng)爭(zhēng)條件和數(shù)據(jù)共享問題。

發(fā)布-訂閱機(jī)制基于事件驅(qū)動(dòng)的思想,其中包含兩個(gè)角色:發(fā)布者(Publisher)和訂閱者(Subscriber)。發(fā)布者負(fù)責(zé)發(fā)布事件或消息,而訂閱者則注冊(cè)對(duì)感興趣的事件或消息進(jìn)行訂閱。他提供了一種松散耦合的通信方式,允許任務(wù)或模塊之間通過發(fā)布和訂閱消息來進(jìn)行通信,而不需要直接知道彼此的存在。

在使用發(fā)布-訂閱模式獲取數(shù)據(jù)時(shí),通常涉及以下角色和操作:

發(fā)布者(Publisher):負(fù)責(zé)生成和發(fā)布數(shù)據(jù)或事件。發(fā)布者將數(shù)據(jù)發(fā)送到一個(gè)或多個(gè)特定的主題(Topic),而不關(guān)心具體的訂閱者。

訂閱者(Subscriber):訂閱者對(duì)特定的主題感興趣,并通過訂閱該主題來接收與之相關(guān)的數(shù)據(jù)或事件。

主題(Topic):主題是數(shù)據(jù)或事件的分類或標(biāo)識(shí)符,發(fā)布者根據(jù)主題將數(shù)據(jù)發(fā)送到相應(yīng)的通道,而訂閱者根據(jù)主題來選擇訂閱的數(shù)據(jù)源。

使用發(fā)布-訂閱模式獲取數(shù)據(jù)的好處在于,系統(tǒng)中的任務(wù)或模塊之間解耦合,發(fā)布者和訂閱者之間不直接依賴于彼此的存在,從而提高了系統(tǒng)的可擴(kuò)展性和靈活性。此外,發(fā)布-訂閱模式還能夠支持多對(duì)多的通信,允許多個(gè)訂閱者同時(shí)接收相同的數(shù)據(jù)或事件,實(shí)現(xiàn)了信息的分發(fā)和共享。

他的優(yōu)勢(shì)如下:

松耦合性:發(fā)布-訂閱機(jī)制使任務(wù)之間的通信更加松耦合。發(fā)布者不需要直接知道訂閱者的存在,也不需要關(guān)心具體的訂閱者數(shù)量和位置。訂閱者只需要訂閱感興趣的事件或消息,從而實(shí)現(xiàn)任務(wù)之間的解耦。

靈活性:發(fā)布-訂閱機(jī)制支持多對(duì)多的通信模式,一個(gè)發(fā)布者可以有多個(gè)訂閱者,一個(gè)訂閱者也可以訂閱多個(gè)發(fā)布者的事件或消息。這種靈活性使得任務(wù)之間可以方便地建立復(fù)雜的通信關(guān)系。

擴(kuò)展性:通過發(fā)布-訂閱機(jī)制,可以方便地?cái)U(kuò)展系統(tǒng),添加新的發(fā)布者或訂閱者,而不需要修改現(xiàn)有的任務(wù)邏輯。這種擴(kuò)展性使得系統(tǒng)更具可維護(hù)性和可擴(kuò)展性。


將各個(gè)數(shù)據(jù)發(fā)布,并對(duì)接上echo輸出函數(shù)后,就可以在RT-Thread的Finsh控制臺(tái)獲取到數(shù)據(jù)信息了(下面是通過uMCN獲取電機(jī)編碼器1的數(shù)據(jù)):

wKgaomTQTyOAbduUAAMQGtcNig4218.jpg

具體使用參考uMCN的倉(cāng)庫(kù)

添加新主題

為了添加新的主題 (topic),你需要先創(chuàng)建一個(gè)主題內(nèi)容。例如:

typedef struct {
        rt_uint32_t a;
        float b;
        int8_t c[4];
} data_content;

uMCN對(duì)主題內(nèi)容的長(zhǎng)度和類型沒有限制,所以理論上可以用來傳輸任何類型的消息。

然后你需要使用宏 MCN_DEFINE(name, size) 來定義主題。一般在發(fā)布主題的源文件的頂部定義主題。例如:

MCN_DEFINE(my_topic, sizeof(data_content));

uMCN 支持一個(gè)主題擁有多個(gè)發(fā)布者和訂閱者。注意同一個(gè)主題名字不同被重復(fù)定義,不然編譯器會(huì)報(bào)錯(cuò)。

下一步就是使用 mcn_advertise() 來注冊(cè)主題。例如:

mcn_advertise(MCN_ID(my_topic), my_topic_echo);

MCN_ID() 宏根據(jù)主題名獲得樞紐節(jié)點(diǎn)。my_topic_echo 是一個(gè)回調(diào)函數(shù),用來打印主題的數(shù)據(jù)。

static int my_topic_echo(void* param)
{
        data_content data;
        if(mcn_copy_from_hub((McnHub*)param, &data) == FMT_EOK){
                printf("a:%d b:%f c:%c %c %c %cn", data.a, data.b, data.c[0], data.c[1], data.c[2], data.c[3]);
        return 0;
        }
        return -1;
}

發(fā)布主題

可以在系統(tǒng)的任意位置使用函數(shù) mcn_publish() 來發(fā)布一個(gè)主題。例如:

data_content my_data = {50, -2.0, {1,2,3,4}};
mcn_publish(MCN_ID(my_topic), &my_data);

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

    關(guān)注

    8

    文章

    7249

    瀏覽量

    91401
  • RTOS
    +關(guān)注

    關(guān)注

    24

    文章

    845

    瀏覽量

    120879
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5590

    瀏覽量

    103211
收藏 人收藏

    評(píng)論

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

    創(chuàng)梁山的華秋DFM解析講解(上)

    可制造性設(shè)計(jì)(DFM)就是從產(chǎn)品開發(fā)設(shè)計(jì)時(shí)起,就考慮到可制造性和可測(cè)試性,使設(shè)計(jì)和制造之間緊密聯(lián)系,實(shí)現(xiàn)從設(shè)計(jì)到制造一次成功的目的。這是保證PCB設(shè)計(jì)質(zhì)量的最有效方法。基于華秋DFM來看一下創(chuàng)開源
    的頭像 發(fā)表于 12-12 09:07 ?4711次閱讀
    <b class='flag-5'>立</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>梁山</b><b class='flag-5'>派</b>的華秋DFM解析講解(上)

    創(chuàng)·梁山開發(fā)板-21F-送藥小車-K210更換固件-運(yùn)行基礎(chǔ)顏色識(shí)別例程

    K210更換固件,他的IDE叫CanMV,看起來應(yīng)該是官方合作出品的。但是實(shí)際使用的時(shí)候發(fā)現(xiàn)他里面的函數(shù)都比較老舊,連接IDE的時(shí)候經(jīng)常性出現(xiàn)連不上或者連上很久之后才有反應(yīng)。而且對(duì)機(jī)器視覺的適配沒有Maixpy好,所以開始之前我們先給這個(gè)K210更換一下固件。
    的頭像 發(fā)表于 07-28 11:27 ?1837次閱讀
    <b class='flag-5'>立</b><b class='flag-5'>創(chuàng)</b>·<b class='flag-5'>梁山</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b>-<b class='flag-5'>21</b><b class='flag-5'>年</b><b class='flag-5'>電</b><b class='flag-5'>賽</b><b class='flag-5'>F</b><b class='flag-5'>題</b>-<b class='flag-5'>送藥</b><b class='flag-5'>小車</b>-K210更換固件-運(yùn)行基礎(chǔ)顏色識(shí)別例程

    創(chuàng)·梁山開發(fā)板-21F-送藥小車-K210的KPU數(shù)字識(shí)別訓(xùn)練

    210自帶 KPU(通用的神經(jīng)網(wǎng)絡(luò)處理器),非常適合用來作數(shù)字識(shí)別。要采集的數(shù)據(jù)集圖像尺寸為 224*224(這是目前最常用的網(wǎng)絡(luò)數(shù)據(jù)大小),為了讓結(jié)果更準(zhǔn)確,所以要訓(xùn)練的數(shù)據(jù)集要盡可能多,每種
    的頭像 發(fā)表于 07-31 10:29 ?1608次閱讀
    <b class='flag-5'>立</b><b class='flag-5'>創(chuàng)</b>·<b class='flag-5'>梁山</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b>-<b class='flag-5'>21</b><b class='flag-5'>年</b><b class='flag-5'>電</b><b class='flag-5'>賽</b><b class='flag-5'>F</b><b class='flag-5'>題</b>-<b class='flag-5'>送藥</b><b class='flag-5'>小車</b>-K210的KPU數(shù)字識(shí)別訓(xùn)練

    創(chuàng)·梁山開發(fā)板-21F-送藥小車-K210功能實(shí)現(xiàn)代碼講解

    關(guān)鍵的注釋都添加了,可以幫助理解代碼,這段代碼同時(shí)實(shí)現(xiàn)了尋紅線和數(shù)字識(shí)別,但是還做不到同時(shí)運(yùn)行,在尋紅線的時(shí)候沒法數(shù)字識(shí)別,這兩個(gè)狀態(tài)之間的切換可以通過長(zhǎng)按K210上的用戶按鍵或者由創(chuàng)梁山派來控制
    的頭像 發(fā)表于 08-01 09:49 ?1456次閱讀

    開發(fā)板-21F-送藥小車-小車尋紅線環(huán)的調(diào)試與實(shí)現(xiàn)

    PID控制來說,測(cè)量值是紅線相較屏幕中線的偏移,目標(biāo)值是想讓紅線偏移為0,輸出值是電機(jī)的速度。 根據(jù)14_創(chuàng)梁山與K210串口通信協(xié)議框架搭建.md文檔我們的
    的頭像 發(fā)表于 08-03 10:10 ?1740次閱讀

    創(chuàng)·梁山開發(fā)板-21F-送藥小車實(shí)現(xiàn)思路

    基本要求 1. 根據(jù)走廊上的標(biāo)識(shí)信息自動(dòng)識(shí)別,尋徑將藥品送到指定病房,投影要在門口區(qū)域內(nèi), 2. 到了指定病房后,點(diǎn)亮紅色指示燈,等待卸載藥品。 3. 人工卸掉藥品后,小車自動(dòng)熄滅紅色指示燈,開始返回。 4. 自動(dòng)返回藥房,點(diǎn)亮綠色指示燈。
    的頭像 發(fā)表于 08-08 09:44 ?1129次閱讀
    <b class='flag-5'>立</b><b class='flag-5'>創(chuàng)</b>·<b class='flag-5'>梁山</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b>-<b class='flag-5'>21</b><b class='flag-5'>年</b><b class='flag-5'>電</b><b class='flag-5'>賽</b><b class='flag-5'>F</b><b class='flag-5'>題</b>-<b class='flag-5'>送藥</b><b class='flag-5'>小車</b>實(shí)現(xiàn)思路

    用悟空全志H3開發(fā)板做一個(gè)基于ROS系統(tǒng)的全向輪小車

    這個(gè)強(qiáng)大的開發(fā)板的一些關(guān)鍵特性以及我是如何利用它來打造一個(gè)全向輪的小車的。 2、產(chǎn)品設(shè)計(jì)介紹 本次設(shè)計(jì)的全向輪小車是在一個(gè)圓形底盤上安裝了三個(gè)帶有反饋編碼器的全向輪,控制中心是悟空
    發(fā)表于 05-06 11:15

    怎樣去設(shè)計(jì)一個(gè)智能送藥小車

    2021F智能送藥小車原文鏈接:openmv巡線代碼:數(shù)字識(shí)別代碼:HAL庫(kù)keil工程(
    發(fā)表于 01-07 08:19

    創(chuàng)梁山-21F-智能送藥小車-按鍵檢測(cè)的消抖和實(shí)現(xiàn)

    按鍵檢測(cè)的消抖和實(shí)現(xiàn) 在送藥小車中,預(yù)留了三個(gè)按鍵,藥品裝載檢測(cè)是通過一個(gè)輕觸開關(guān)來實(shí)現(xiàn)的,也可以把他理解成一個(gè)按鍵。 按鍵的實(shí)際電路如下: 我們通常用的按鍵內(nèi)部都是機(jī)械彈性開關(guān),當(dāng)它按下彈起
    發(fā)表于 08-04 09:48

    【悟空H3開發(fā)板免費(fèi)體驗(yàn)】基于ROS系統(tǒng)的全向輪小車

    /STM32F100RBT_robot.git 悟空: 1、開場(chǎng)白 大家好,我是FFD80。很高興能夠在這里和大家分享一些關(guān)于我使用悟空H3開發(fā)板構(gòu)建全向輪
    發(fā)表于 11-12 01:00

    創(chuàng)梁山的華秋DFM解析講解(下)

    創(chuàng)開源的梁山開發(fā)板已經(jīng)大批量生產(chǎn),其中一些細(xì)節(jié)和布線布局規(guī)則還是很值得我們學(xué)習(xí)的。上期已經(jīng)介紹電氣信號(hào),最小線寬,最小間距,SMD間距的
    的頭像 發(fā)表于 12-12 13:17 ?2638次閱讀
    <b class='flag-5'>立</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>梁山</b><b class='flag-5'>派</b>的華秋DFM解析講解(下)

    梁山開發(fā)板-21F-送藥小車-分析

    全國(guó)產(chǎn)開源開發(fā)板,基于GD32F4系列,21F
    的頭像 發(fā)表于 07-31 10:13 ?1731次閱讀
    <b class='flag-5'>梁山</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b>-<b class='flag-5'>21</b><b class='flag-5'>年</b><b class='flag-5'>電</b><b class='flag-5'>賽</b><b class='flag-5'>F</b><b class='flag-5'>題</b>-<b class='flag-5'>送藥</b><b class='flag-5'>小車</b>-<b class='flag-5'>賽</b><b class='flag-5'>題</b>分析

    創(chuàng)梁山開發(fā)板-21F-送藥小車-小車角度環(huán)的調(diào)試與實(shí)現(xiàn)

    來達(dá)到目標(biāo)值。 第二種是在實(shí)現(xiàn)小車輪子位置環(huán)的基礎(chǔ)上,控制兩邊輪子同時(shí)向不同的方向旋轉(zhuǎn)一定的圈數(shù)(編碼器脈沖),在小車輪子不打滑的情況下轉(zhuǎn)過的角度就是一個(gè)確定的值,在送藥小車的地圖中
    的頭像 發(fā)表于 07-27 10:18 ?1268次閱讀
    <b class='flag-5'>立</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>梁山</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b>-<b class='flag-5'>21</b><b class='flag-5'>年</b><b class='flag-5'>電</b><b class='flag-5'>賽</b><b class='flag-5'>F</b><b class='flag-5'>題</b>-<b class='flag-5'>送藥</b><b class='flag-5'>小車</b>-<b class='flag-5'>小車</b>角度環(huán)的調(diào)試與實(shí)現(xiàn)

    創(chuàng)·梁山開發(fā)板-21F-送藥小車-與K210串口通信協(xié)議框架搭建

    在K210可以識(shí)別到色塊和識(shí)別數(shù)字后,就需要把這些信息傳遞給創(chuàng)梁山派了。而立創(chuàng)梁山也需要控制
    的頭像 發(fā)表于 08-02 10:57 ?1004次閱讀

    創(chuàng)梁山-21F-智能送藥小車-按鍵檢測(cè)的消抖和實(shí)現(xiàn)

    我們通常用的按鍵內(nèi)部都是機(jī)械彈性開關(guān),當(dāng)它按下彈起的時(shí)候,機(jī)械觸點(diǎn)會(huì)因?yàn)閺椥宰饔枚陂]合和斷開的瞬間伴隨著一連串的抖動(dòng)。這種抖動(dòng)會(huì)導(dǎo)致輸入信號(hào)在高低電位之間彈跳,產(chǎn)生不正確的輸入。 這里面電阻的作用是限流(害怕初學(xué)者不小心給設(shè)置成推挽輸出了),在這里要注意的是要在芯片內(nèi)部設(shè)置一個(gè)下拉(電路圖上是沒有加下拉電阻得到)。電容作用是硬件去抖,不過軟件上還是需要軟件消抖,硬件去抖只能改善不能消除,所以在有一些批量電路中,這個(gè)電容都是可以省去的,畢竟還是省不了軟件消抖的。
    的頭像 發(fā)表于 08-04 10:09 ?904次閱讀
    <b class='flag-5'>立</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>梁山</b><b class='flag-5'>派</b>-<b class='flag-5'>21</b><b class='flag-5'>年</b><b class='flag-5'>電</b><b class='flag-5'>賽</b><b class='flag-5'>F</b><b class='flag-5'>題</b>-智能<b class='flag-5'>送藥</b><b class='flag-5'>小車</b>-按鍵檢測(cè)的消抖和實(shí)現(xiàn)
    主站蜘蛛池模板: 国产亚洲papapa| 日日干狠狠操 | 1v1双性受整夜不拔bl | aaa一级片| 亚洲伦理中文字幕一区 | 狼人久久尹人香蕉尹人 | 97av免费视频| 羞羞漫画喷水漫画yy漫画 | 国产精品莉莉欧美自在线线 | 天天操中文字幕 | 关晓彤被调教出奶水的视频 | 五月婷婷网址 | 日本三黄色大 | 深爱开心激情网 | 日本不卡高清免费v日本 | 国产玖玖在线 | 亚洲第一在线视频 | 西西人体大胆高清啪啪欧洲 | 韩国三级观影久久 | 人人爱天天做夜夜爽 | 色偷偷亚洲男人 | 免费观看成年欧美1314www色 | 亚洲日本一区二区三区在线不卡 | 成人啪啪免费视频 | bt天堂bt在线网 | 思思久久96热在精品不卡 | 国产一区二区三区欧美精品 | 精品一区二区三区自拍图片区 | 免费啪视频在线观看免费的 | 久久久久久噜噜噜久久久精品 | 久久久久国产精品免费网站 | 欧美猛操 | 影院成人区精品一区二区婷婷丽春院影视 | 欧美黑人粗硬大在线看 | 日本三级香港三级人妇99 | 福利视频免费观看 | 欧美日韩国产成人高清视频 | 天天干天天色综合 | 蜜月mv国产精品 | 欧美一区二区三区高清视频 | 俺去久久 |