在线观看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

    文章

    7649

    瀏覽量

    152109
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9165

    瀏覽量

    369208
  • 通信
    +關注

    關注

    18

    文章

    6071

    瀏覽量

    136425
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62396
  • 實時操作系統

    關注

    1

    文章

    199

    瀏覽量

    30826

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

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

收藏 人收藏

    評論

    相關推薦

    FreeRTOS介紹與基礎任務創建

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

    FreeRTOS中的任務管理

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

    轉:第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 ?8543次閱讀
    如何輕松幾步<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高級篇2---FreeRTOS任務創建分析

    FreeRTOS基礎系列《FreeRTOS系列第10篇---FreeRTOS任務創建和刪除》中介紹了任務創建API函數xTaskCreat
    發表于 01-26 17:42 ?23次下載
    <b class='flag-5'>FreeRTOS</b>高級篇2---<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 ?1694次閱讀
    <b class='flag-5'>freeRTOS</b>的<b class='flag-5'>任務</b>

    FreeRTOS的二值信號量

    FreeRTOS中的信號量是一種任務通信的方式,信號量包括:二值信號量、互斥信號量、計數信號量,本次實驗只使用二值信號量。信號量用于任務
    的頭像 發表于 02-10 15:07 ?1554次閱讀
    主站蜘蛛池模板: 五月婷婷激情在线 | 欧美熟色妇 | 激情综合站 | 污污视频网址 | 欧美成人午夜不卡在线视频 | 四虎影院wwww | 欧美一级黄色片视频 | 欧美黄色一级视频 | 成年网站在线 | 欧美人与zoxxxx另类 | 精品女同同性视频很黄很色 | 伊人久久成人 | 奇米米奇777 | 婷婷激情综合 | 日本高清免费一本视频在线观看 | 国产一区在线播放 | 成人a区| 国产精品99r8在线观看 | 欧美色惰 | 久青草国产手机在线观 | 99精品在线| 国产精品嫩草影院一二三区入口 | 农村一级片 | 99热久久久久久久免费观看 | 在线观看亚洲专3333 | 亚洲一区二区三区中文字幕5566 | 成人午夜亚洲影视在线观看 | 色 ed2k| 欧美精品一二区 | 国内精品免费视频精选在线观看 | 欧美日韩中文字幕在线 | 全午夜免费一级毛片 | 91桃色国产线观看免费 | 在线观看精品国产福利片100 | 黄色午夜剧场 | 四虎影永久地址www 四虎影永久在线观看精品 四虎影永久在线观看网址 四虎影院.com | 日本一本在线视频 | 一级特黄特黄xxx视频 | 亚洲成片在线观看12345ba | 亚洲综合色婷婷久久 | 手机在线看福利 |