曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

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

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

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

FreeRTOS任務(wù)間通信,怎么實現(xiàn)?

技術(shù)讓夢想更偉大 ? 來源:技術(shù)讓夢想更偉大 ? 2023-02-23 09:21 ? 次閱讀

FreeRTOS 是一個可裁剪、可剝奪型的多任務(wù)內(nèi)核,十分好用,而且沒有任務(wù)數(shù)限制,在此之前分析過很多了,簡單來說,F(xiàn)reeRTOS實時系統(tǒng)能夠創(chuàng)建多個獨立的任務(wù),并且任務(wù)之間互不干擾,為了這一點的實現(xiàn),每個任務(wù)都應(yīng)該有自己的堆??臻g。當(dāng)任務(wù)進行切換,執(zhí)行環(huán)境則保存到該任務(wù)的堆棧中,所以,當(dāng)一段時間后切換回該任務(wù),它能夠精確地回復(fù)上次工作時的狀態(tài)。

之前也匯總了一些教程,參考精選匯總 | freertos從基礎(chǔ)到高級篇系列

FreeRTOS 提供了實時操作系統(tǒng)所需的所有功能,包括資源管理、同步、任務(wù)通信等,本篇主要說一下任務(wù)通信,任務(wù)創(chuàng)建之后并不是一起運行的,而是通過優(yōu)先級順序進行任務(wù)的調(diào)用來實現(xiàn)的。

輪子也造好了,很多我們可以直接拿來用,ARM Cortex 微控制器軟件接口標(biāo)準(zhǔn)是cmsis,且是與供應(yīng)商無關(guān)的硬件抽象層,CMSIS-RTOS是實時操作系統(tǒng)的通用API,簡單來說就是將Freertos、Rtthread等操作系統(tǒng)再進行一次封裝,形成通用的API函數(shù),目的是使移植更方便。這里我們選用接口是CMSIS_V2,之前也講到過stm32CubeIDE中CMSIS_V1和CMSIS_V2選項的區(qū)別。

3dc91496-b2fc-11ed-bfe3-dac502259ad0.png

首先創(chuàng)建兩個任務(wù)myTask01和myTask02,如下圖所示:

3e027d80-b2fc-11ed-bfe3-dac502259ad0.png

創(chuàng)建2個事件myEvent01,myEvent02,如下圖所示:

3e303c70-b2fc-11ed-bfe3-dac502259ad0.png

拉下來也可以配置以下信息,在此我們默認配置計數(shù)信號量、分配方式、控制塊名稱等配置信息。

生成代碼之后任務(wù)和事件如下代碼:

/*DefinitionsformyTask01*/
osThreadId_tmyTask01Handle;
constosThreadAttr_tmyTask01_attributes={
.name="myTask01",
.stack_size=128*4,
.priority=(osPriority_t)osPriorityLow,
};
...
/*DefinitionsformyEvent02*/
osEventFlagsId_tmyEvent02Handle;
constosEventFlagsAttr_tmyEvent02_attributes={
.name="myEvent02"
};

這個是創(chuàng)建任務(wù)的句柄,代碼如下:

/*creationofmyTask01*/
myTask01Handle=osThreadNew(StartTask01,NULL,&myTask01_attributes);

/*creationofmyTask02*/
myTask02Handle=osThreadNew(StartTask02,NULL,&myTask02_attributes);

我們改寫代碼,實現(xiàn)task2往task發(fā)送信號,實現(xiàn)簡單的任務(wù)通信,代碼如下。

/*USERCODEENDHeader_StartTask01*/
voidStartTask01(void*argument)
{
/*USERCODEBEGINStartTask01*/
/*Infiniteloop*/
osStatus_tos_Status;

while(1)
{
os_Status=osEventFlagsWait(myTask02Handle,/*事件標(biāo)志組ID*/
COMM2_EVENT,/*等待事件標(biāo)志位0與事件標(biāo)志位1*/
osFlagsWaitAny,/*邏輯或*/
osWaitForever/*一直等待*/
);
if(os_Status==COMM1_EVENT)
{
printf("startTask02isrunning.
");
}
}
/*USERCODEENDStartTask01*/
}

/*USERCODEBEGINHeader_StartTask02*/

osEventFlagsWait函數(shù)的具體實現(xiàn)以及定義如下圖所示:

3e64a050-b2fc-11ed-bfe3-dac502259ad0.png

osEventFlagsSet就是往某個任務(wù)的句柄發(fā)送一個信號,實現(xiàn)如下

/*USERCODEENDHeader_StartTask02*/
voidStartTask02(void*argument)
{
/*USERCODEBEGINStartTask02*/
/*Infiniteloop*/
for(;;)
{
osEventFlagsSet(myEvent01Handle,COMM1_EVENT);
osDelay(1);
}
/*USERCODEENDStartTask02*/
}

最后就可以實現(xiàn)多個任務(wù)間的通信了。

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

    關(guān)注

    48

    文章

    7872

    瀏覽量

    153488
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9279

    瀏覽量

    374010
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6152

    瀏覽量

    137242
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    485

    瀏覽量

    63592
  • 實時操作系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    202

    瀏覽量

    31165

原文標(biāo)題:FreeRTOS 任務(wù)間通信,怎么實現(xiàn)?

文章出處:【微信號:技術(shù)讓夢想更偉大,微信公眾號:技術(shù)讓夢想更偉大】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

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

    FreeRTOS介紹與基礎(chǔ)任務(wù)創(chuàng)建

    本篇介紹FreeRTOS與基礎(chǔ)任務(wù)創(chuàng)建
    的頭像 發(fā)表于 09-26 09:00 ?2906次閱讀
    <b class='flag-5'>FreeRTOS</b>介紹與基礎(chǔ)<b class='flag-5'>任務(wù)</b>創(chuàng)建

    FreeRTOS中的任務(wù)管理

    任務(wù)FreeRTOS 中最基本的調(diào)度單元,它是一段可執(zhí)行的代碼,可以獨立運行。FreeRTOS 中的任務(wù)是基于優(yōu)先級的搶占式調(diào)度,優(yōu)先級高的任務(wù)
    的頭像 發(fā)表于 11-27 17:03 ?1237次閱讀

    轉(zhuǎn):第27章 FreeRTOS任務(wù)消息郵箱

    本章節(jié)為大家講解FreeRTOS消息隊列(消息隊列長度固定為1)的另一種實現(xiàn)方式----基于任務(wù)通知(Task Notifications)的消息隊列,這里我們將這種方式實現(xiàn)的消息隊
    發(fā)表于 09-09 07:52

    如何去實現(xiàn)基于stm32的FreeRTOS任務(wù)程序

    基于 stm32 的 FreeRTOS任務(wù)程序實現(xiàn)一、什么是FreeRTOS二、AHT20數(shù)據(jù)采集原理電路繪制三、FreeRTOS的多
    發(fā)表于 08-24 07:45

    任務(wù)通信的目的是什么

    嵌入式操作系統(tǒng)中任務(wù)之間的交互與Linux同一進程的不同線程之間的交互完全類似,可以通過全局變量和任務(wù)通信機制兩種方法來實現(xiàn)。這種交互包括
    發(fā)表于 12-24 08:16

    請問ESP32單核如何使用FreeRTOS測試隊列進行任務(wù)通信

    請問ESP32單核如何使用FreeRTOS測試隊列進行任務(wù)通信?
    發(fā)表于 01-14 07:12

    FreeRTOS隊列創(chuàng)建任務(wù)通信的基本應(yīng)用程序

    應(yīng)用程序 : 此代碼是 FreeRTOS 隊列創(chuàng)建任務(wù)通信的基本應(yīng)用程序 。 BSP 版本: M480系列 BSP CMSIS V3.04.000 硬件: NuMaker-PFM-
    發(fā)表于 08-22 07:12

    FreeRTOS隊列創(chuàng)建任務(wù)通信的基本應(yīng)用程序

    應(yīng)用程序 : 此代碼是 FreeRTOS 隊列創(chuàng)建任務(wù)通信的基本應(yīng)用程序 。 BSP 版本: M480系列 BSP CMSIS V3.04.000 硬件: NuMaker-PFM-
    發(fā)表于 08-30 07:56

    如何輕松幾步實現(xiàn)在STM32上運行FreeRTOS任務(wù)

    輕松幾步實現(xiàn)在STM32上運行FreeRTOS任務(wù)
    的頭像 發(fā)表于 03-01 12:07 ?8727次閱讀
    如何輕松幾步<b class='flag-5'>實現(xiàn)</b>在STM32上運行<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>

    (一)FreeRTOS學(xué)習(xí)之FreeRTOS任務(wù)基礎(chǔ)知識

    功能,初學(xué)者必須先掌握——任務(wù)的創(chuàng)建、刪除、掛起和恢復(fù)等操作。本章節(jié)分為如下幾部分:*什么是多任務(wù)系統(tǒng)*FreeRTOS任務(wù)與協(xié)程*初次使用*任務(wù)
    發(fā)表于 12-23 19:57 ?3次下載
    (一)<b class='flag-5'>FreeRTOS</b>學(xué)習(xí)之<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>基礎(chǔ)知識

    FreeRTOS任務(wù)詳解

    詳細講解freeRTOS任務(wù)
    發(fā)表于 12-23 20:01 ?11次下載
    <b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>任務(wù)</b>詳解

    FreeRTOS系列第11篇---FreeRTOS任務(wù)控制

    FreeRTOS任務(wù)控制API函數(shù)主要實現(xiàn)任務(wù)延時、任務(wù)掛起、解除任務(wù)掛起、任務(wù)優(yōu)先級獲取和設(shè)置
    發(fā)表于 01-26 17:54 ?12次下載
    <b class='flag-5'>FreeRTOS</b>系列第11篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>控制

    freeRTOS任務(wù)

    freeRTOS系統(tǒng)的任務(wù)切換的具體過程最終都是在pendSV中斷服務(wù)函數(shù)里面完成的。
    的頭像 發(fā)表于 02-10 11:02 ?1898次閱讀
    <b class='flag-5'>freeRTOS</b>的<b class='flag-5'>任務(wù)</b>

    FreeRTOS的二值信號量

    FreeRTOS中的信號量是一種任務(wù)通信的方式,信號量包括:二值信號量、互斥信號量、計數(shù)信號量,本次實驗只使用二值信號量。信號量用于任務(wù)
    的頭像 發(fā)表于 02-10 15:07 ?1663次閱讀

    FreeRTOS任務(wù)通知簡介

    任務(wù)通知簡介 任務(wù)通知在 FreeRTOS 中是一個可選的功能,要使用任務(wù)通知的話就需要將宏configUSE_TASK_NOTIFICATIONS 定義為 1。
    的頭像 發(fā)表于 07-30 11:34 ?909次閱讀