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

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

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

3天內不再提示

FreeRTOS任務間通信,怎么實現?

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

FreeRTOS 是一個可裁剪、可剝奪型的多任務內核,十分好用,而且沒有任務數限制,在此之前分析過很多了,簡單來說,FreeRTOS實時系統能夠創建多個獨立的任務,并且任務之間互不干擾,為了這一點的實現,每個任務都應該有自己的堆棧空間。當任務進行切換,執行環境則保存到該任務的堆棧中,所以,當一段時間后切換回該任務,它能夠精確地回復上次工作時的狀態。

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

FreeRTOS 提供了實時操作系統所需的所有功能,包括資源管理、同步、任務通信等,本篇主要說一下任務通信,任務創建之后并不是一起運行的,而是通過優先級順序進行任務的調用來實現的。

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

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

首先創建兩個任務myTask01和myTask02,如下圖所示:

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

創建2個事件myEvent01,myEvent02,如下圖所示:

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

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

生成代碼之后任務和事件如下代碼:

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

這個是創建任務的句柄,代碼如下:

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

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

我們改寫代碼,實現task2往task發送信號,實現簡單的任務通信,代碼如下。

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

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

/*USERCODEBEGINHeader_StartTask02*/

osEventFlagsWait函數的具體實現以及定義如下圖所示:

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

osEventFlagsSet就是往某個任務的句柄發送一個信號,實現如下

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

最后就可以實現多個任務間的通信了。

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

    關注

    48

    文章

    7830

    瀏覽量

    153172
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9258

    瀏覽量

    372848
  • 通信
    +關注

    關注

    18

    文章

    6137

    瀏覽量

    137084
  • FreeRTOS
    +關注

    關注

    12

    文章

    485

    瀏覽量

    63302
  • 實時操作系統

    關注

    1

    文章

    201

    瀏覽量

    31113

原文標題:FreeRTOS 任務間通信,怎么實現?

文章出處:【微信號:技術讓夢想更偉大,微信公眾號:技術讓夢想更偉大】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FreeRTOS介紹與基礎任務創建

    本篇介紹FreeRTOS與基礎任務創建
    的頭像 發表于 09-26 09:00 ?2714次閱讀
    <b class='flag-5'>FreeRTOS</b>介紹與基礎<b class='flag-5'>任務</b>創建

    FreeRTOS中的任務管理

    任務FreeRTOS 中最基本的調度單元,它是一段可執行的代碼,可以獨立運行。FreeRTOS 中的任務是基于優先級的搶占式調度,優先級高的任務
    的頭像 發表于 11-27 17:03 ?1193次閱讀

    轉:第27章 FreeRTOS任務消息郵箱

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

    如何去實現基于stm32的FreeRTOS任務程序

    基于 stm32 的 FreeRTOS任務程序實現一、什么是FreeRTOS二、AHT20數據采集原理電路繪制三、FreeRTOS的多
    發表于 08-24 07:45

    任務通信的目的是什么

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

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

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

    FreeRTOS隊列創建任務通信的基本應用程序

    應用程序 : 此代碼是 FreeRTOS 隊列創建任務通信的基本應用程序 。 BSP 版本: M480系列 BSP CMSIS V3.04.000 硬件: NuMaker-PFM-
    發表于 08-22 07:12

    FreeRTOS隊列創建任務通信的基本應用程序

    應用程序 : 此代碼是 FreeRTOS 隊列創建任務通信的基本應用程序 。 BSP 版本: M480系列 BSP CMSIS V3.04.000 硬件: NuMaker-PFM-
    發表于 08-30 07:56

    如何輕松幾步實現在STM32上運行FreeRTOS任務

    輕松幾步實現在STM32上運行FreeRTOS任務
    的頭像 發表于 03-01 12:07 ?8682次閱讀
    如何輕松幾步<b class='flag-5'>實現</b>在STM32上運行<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b>

    (一)FreeRTOS學習之FreeRTOS任務基礎知識

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

    FreeRTOS任務詳解

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

    FreeRTOS系列第11篇---FreeRTOS任務控制

    FreeRTOS任務控制API函數主要實現任務延時、任務掛起、解除任務掛起、任務優先級獲取和設置
    發表于 01-26 17:54 ?12次下載
    <b class='flag-5'>FreeRTOS</b>系列第11篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b>控制

    freeRTOS任務

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

    FreeRTOS的二值信號量

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

    FreeRTOS任務通知簡介

    任務通知簡介 任務通知在 FreeRTOS 中是一個可選的功能,要使用任務通知的話就需要將宏configUSE_TASK_NOTIFICATIONS 定義為 1。
    的頭像 發表于 07-30 11:34 ?872次閱讀
    主站蜘蛛池模板: 天天在线干 | 亚洲伊人99综合网 | 亚洲 欧美 精品 | 在线麻豆国产传媒60在线观看 | 久久老色鬼天天综合网观看 | 久青草视频在线 | 四虎4hu永久在线观看 | 夜夜草天天干 | 日韩美毛片 | 欧美交片 | 天天摸夜夜摸爽爽狠狠婷婷97 | www狠狠干 | 女人牲交一级毛片 | 天天干天天操天天射 | 1024手机最新手机在线 | 爱插综合网 | 免费在线黄色网 | 很黄很色网站 | 性欧美在线 | 黑森林福利视频导航 | 国产一区二区在线观看免费 | 看黄免费在线 | 一区二区三区四区精品 | 欧美一二三区 | 久久精品夜色国产 | 日本特黄色大片 | 中文日产国产精品久久 | 曰本又色又爽又黄三级视频 | 久久精品久噜噜噜久久 | 亚洲男人天堂网址 | 五月天婷婷免费观看视频在线 | 人人搞人人爽 | 国产精品福利在线观看免费不卡 | 1024手机看片你懂得的 日韩欧美 | 亚洲精品欧洲久久婷婷99 | 免费国产不卡午夜福在线 | se色成人亚洲综合 | 欧美成人综合在线 | 100000免费啪啪18免进 | 日本欧美一区二区免费视 | 久久婷婷色|