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

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

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

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

FreeRTOS的事件標(biāo)志組

汽車電子技術(shù) ? 來源:玩轉(zhuǎn)單片機(jī) ? 作者: Julian ? 2023-02-10 15:58 ? 次閱讀

之前介紹了使用信號量來完成同步,但是使用信號量來同步的話,任務(wù)只能與單個的事件或任務(wù)進(jìn)行同步。有時候某個任務(wù)可能會需要與多個事件或任務(wù)進(jìn)行同步,此時信號量就無能為力了。FreeRTOS 提供了一個可選的解決方法,那就是事件標(biāo)志組。

事件標(biāo)志位可以理解為一個Bit位,多個事件位就組成了事件標(biāo)志組,F(xiàn)reeRTOS可選8個事件標(biāo)志位或者24個事件標(biāo)志位,具體是由configUSE_16_BIT_TICKS來確定,它為1的時候是8個標(biāo)準(zhǔn)位,為0時是24個標(biāo)志位!

創(chuàng)建標(biāo)志組

EventGroupHandle_t xEventGroupCreate( void );

返回值:

創(chuàng)建失敗返回NULL,創(chuàng)建成功返回句柄

置位API函數(shù)

EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup,
                                 const EventBits_t uxBitsToSet );

參數(shù):

xEventGroup:需要操作的事件標(biāo)志組的句柄

uxBitsToSet:寫入數(shù)值,例如0x09就表示置位第0位和第三位

讀取事件組的位

EventBits_t xEventGroupWaitBits( const EventGroupHandle_t xEventGroup,
                                 const EventBits_t uxBitsToWaitFor,
                                 const BaseType_t xClearOnExit,
                                 const BaseType_t xWaitForAllBits,
                                 TickType_t xTicksToWait );

參數(shù):

xEventGroup:事件標(biāo)志組的句柄

uxBitsToWaitFor:需要等待的標(biāo)志位

xClearOnExit:是否需要清除標(biāo)志位

xWaitForAllBits:是否等待所有設(shè)定標(biāo)志位

xTicksToWait:最大等待時間

注意:更多API函數(shù),請參考官方相關(guān)

附上簡單使用應(yīng)用

#include "stm32f10x.h"
#include 
#include "FreeRTOS.h"
#include "task.h"
#include "event_groups.h"


#define START_TASK_PRIO 1      //任務(wù)優(yōu)先級
#define START_STK_SIZE 128      //任務(wù)堆棧大小
TaskHandle_t StartTask_Handler;   //任務(wù)句柄
void start_task(void *pvParameters);//任務(wù)函數(shù)


#define LED0_TASK_PRIO 2       //任務(wù)優(yōu)先級
#define LED0_STK_SIZE 50       //任務(wù)堆棧大小
TaskHandle_t LED0Task_Handler;     //任務(wù)句柄
void led0_task(void *p_arg);     //任務(wù)函數(shù)


EventGroupHandle_t Event_Handle = NULL;//事件標(biāo)志組的句柄


void LED_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;        //定義結(jié)構(gòu)體變量

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  //開啟時鐘

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;            //選擇你要設(shè)置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;      //設(shè)置推挽輸出模式
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;     //設(shè)置傳輸速率
  GPIO_Init(GPIOC,&GPIO_InitStructure);                //初始化GPIO

  GPIO_SetBits(GPIOC,GPIO_Pin_0);             //將LED端口拉高,熄滅LED
}


int main( void ) 
{
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設(shè)置系統(tǒng)中斷優(yōu)先級分組 4
  LED_Init(); //初始化 LED
  //創(chuàng)建任務(wù)標(biāo)志組
  Event_Handle = xEventGroupCreate();
  //置位標(biāo)志位
  xEventGroupSetBits( ( EventGroupHandle_t) Event_Handle,
            ( EventBits_t )       0x08       );

  //創(chuàng)建開始任務(wù)
  xTaskCreate(
    (TaskFunction_t )start_task,     //任務(wù)函數(shù)
    (const char* )"start_task",     //任務(wù)名稱
    (uint16_t )START_STK_SIZE,       //任務(wù)堆棧大小
    (void* )NULL,             //傳遞給任務(wù)函數(shù)的參數(shù)
    (UBaseType_t )START_TASK_PRIO,     //任務(wù)優(yōu)先級
    (TaskHandle_t* )&StartTask_Handler  //任務(wù)句柄 
  );
  vTaskStartScheduler();  //開啟調(diào)度
}
//開始任務(wù)函數(shù)
void start_task(void *pvParameters)
{
  taskENTER_CRITICAL();   //進(jìn)入臨界區(qū)
  //創(chuàng)建 LED0 任務(wù)
  xTaskCreate(
    (TaskFunction_t )led0_task, 
    (const char* )"led0_task", 
    (uint16_t )LED0_STK_SIZE, 
    (void* )NULL,
    (UBaseType_t )LED0_TASK_PRIO,
    (TaskHandle_t* )&LED0Task_Handler
  );
  vTaskDelete(StartTask_Handler); //刪除開始任務(wù)
  taskEXIT_CRITICAL();   //退出臨界區(qū)
}


//LED0 任務(wù)函數(shù)
void led0_task(void *pvParameters)
{
  while(1)
  {
    xEventGroupWaitBits( ( EventGroupHandle_t ) Event_Handle,  //句柄
               ( EventBits_t        ) 0x08,      //需要等待的位
               ( BaseType_t         ) pdTRUE ,    //需要清零
               ( BaseType_t         ) pdTRUE,      //等待所有設(shè)定標(biāo)志位
               ( TickType_t         ) portMAX_DELAY );//死等待

    if(GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_0))
    {
      GPIO_ResetBits( GPIOC, GPIO_Pin_0);
    }
    else
    {
      GPIO_SetBits( GPIOC, GPIO_Pin_0);
    }
    //置位標(biāo)志位
    xEventGroupSetBits( ( EventGroupHandle_t) Event_Handle,
              ( EventBits_t )       0x08         );

    vTaskDelay(400);
  }
}

注意:如果LED0任務(wù)中的置位函數(shù),那么LED0函數(shù)只會運(yùn)行一次,因為標(biāo)志位已經(jīng)清除了,需要再次置位標(biāo)志位才會繼續(xù)運(yùn)行!

--END--

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

    關(guān)注

    12

    文章

    490

    瀏覽量

    63774
  • 信號量
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    8502
  • 事件標(biāo)志組
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    1375
收藏 人收藏

    評論

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

    使用STM32CubeMX生成的FreeRTOS系統(tǒng)中,似乎沒有新封裝的事件標(biāo)志,怎么解決?

    使用STM32CubeMX生成的FreeRTOS系統(tǒng)中,似乎沒有新封裝的事件標(biāo)志,如果按照原生的FreeRTOS使用事件標(biāo)志
    發(fā)表于 03-22 08:34

    使用FreeRTOS系統(tǒng)事件標(biāo)志有些收不到是怎么回事?

    教下,使用FreeRTOS的的件標(biāo)志, 任務(wù)貌似有些標(biāo)志位收不到,是怎么回事啊 ? 比如事件標(biāo)志
    發(fā)表于 04-26 06:53

    轉(zhuǎn):freeRTOS事件學(xué)習(xí)

    像其他RTOS一樣,freeRTOS同樣有對事件標(biāo)志位的創(chuàng)建和處理,在中斷中可以通過事件傳遞信息給其他的任務(wù),那么如何創(chuàng)建事件呢?要使用創(chuàng)建Event的API,首先必須配置,且包含
    發(fā)表于 08-12 18:29

    轉(zhuǎn):第18章 FreeRTOS事件標(biāo)志

    第18章FreeRTOS事件標(biāo)志 前面的章節(jié)我們已經(jīng)講解了任務(wù)管理和時間管理,從本章節(jié)開始講解任務(wù)間的通信和同步機(jī)制。首先講解任務(wù)間的通信和同步機(jī)制之一,事件標(biāo)志
    發(fā)表于 09-02 12:40

    轉(zhuǎn):第26章 FreeRTOS任務(wù)事件標(biāo)志

    本章節(jié)為大家講解FreeRTOS事件標(biāo)志的另一種實現(xiàn)方式----基于任務(wù)通知(Task Notifications)的事件標(biāo)志,這里我們
    發(fā)表于 09-08 06:48

    【NUCLEO-F412ZG試用體驗】FreeRTOS_事件標(biāo)志實現(xiàn)任務(wù)和中斷的同步

    使用事件標(biāo)志可以實現(xiàn)任務(wù)和任務(wù)之間以及任務(wù)和中斷之間的通信或者同步。首先說明,本例程參考了《安富萊_STM32-V5開發(fā)板_FreeRTOS教程(V1.0)》,是在上上期報告的基礎(chǔ)上,把按鍵中斷由
    發(fā)表于 12-28 21:19

    UCOS3的事件標(biāo)志

    我理解的事件標(biāo)志主要功能就是根據(jù)同步標(biāo)志組里面的信號的標(biāo)志位來執(zhí)行語句。比如有A,B,C三個信號,當(dāng)我們有一個任務(wù)D需要ABC三個信號都到了之后再去執(zhí)行任務(wù)D.這時候就可以用到任務(wù)
    發(fā)表于 05-11 14:27

    freertos中斷置位事件標(biāo)志輸出Error的解決辦法?

    新人求教,在原子里的程序加了置位標(biāo)志,串口輸出Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,680,但是不影響程序的運(yùn)行,這個是什么原因
    發(fā)表于 06-18 09:00

    【轉(zhuǎn)載】AT32 FreeRTOS應(yīng)用筆記

    ........................................83例程介紹 ...................................................... 85FreeRTOS 事件標(biāo)志
    發(fā)表于 08-16 11:56

    怎樣去設(shè)置FreeRTOS事件標(biāo)志的事件位呢

    事件標(biāo)志是什么意思呢?怎樣去設(shè)置FreeRTOS事件標(biāo)志的事件位呢?
    發(fā)表于 02-28 06:44

    UCOS擴(kuò)展例程-UCOSIII事件標(biāo)志

    UCOS擴(kuò)展例程- UCOSIII事件標(biāo)志
    發(fā)表于 12-14 17:24 ?16次下載

    freeRTOS中的消息郵箱

    freeRTOS中的消息郵箱使用是比較靈活的,它可以實現(xiàn)二值信號量、計數(shù)信號量、事件標(biāo)志、消息隊列等通知方式。
    的頭像 發(fā)表于 02-10 11:05 ?1991次閱讀
    <b class='flag-5'>freeRTOS</b>中的消息郵箱

    freeRTOS用于任務(wù)之間同步的手段事件標(biāo)志

    freeRTOS中還有一種可以用于任務(wù)之間同步的手段 — 事件標(biāo)志。
    的頭像 發(fā)表于 02-10 11:10 ?1816次閱讀

    FreeRTOS事件標(biāo)志介紹

    1、事件位(事件標(biāo)志) 事件位用來表明某個事件是否發(fā)生,事件位通常用作事件標(biāo)志,比如下面的幾個例子: ● 當(dāng)收到一條消息并且把這條消息處理掉以后就可以將某個位(標(biāo)志)置 1,當(dāng)隊列中沒有消息需要處理
    的頭像 發(fā)表于 07-06 17:22 ?768次閱讀

    FreeRTOS創(chuàng)建事件標(biāo)志

    創(chuàng)建事件標(biāo)志 3、設(shè)置事件位 4、獲取事件標(biāo)志值 5、等待指定的事件位 某個任務(wù)可能需要與多個事件進(jìn)行同步,那么這個任務(wù)就需要等待并判斷多個事件位(標(biāo) 志),使用函數(shù)
    的頭像 發(fā)表于 07-06 17:23 ?683次閱讀
    <b class='flag-5'>FreeRTOS</b>創(chuàng)建事件<b class='flag-5'>標(biāo)志</b><b class='flag-5'>組</b>
    主站蜘蛛池模板: 亚洲欧洲色 | 伊人久久大香线蕉资源 | 黄色成人毛片 | 农村苗族一级特黄a大片 | 美女扒开尿口给男人看大全 | www.天天操| 伊人精品成人久久综合欧美 | 日本高清视频一区 | 国产精品第页 | 国产黄mmd在线观看免费 | 精品女同同性视频很黄很色 | 国产成人综合网在线播放 | 深夜国产成人福利在线观看女同 | 黄色绿像一级片 | 丁香午夜婷婷 | 天天干夜夜操 | 国内真实下药迷j在线观看 国内自拍 亚洲系列 欧美系列 | 好吊日在线 | 波多野结衣在线观看一区二区 | 四虎新网站 | 天天操欧美 | 久久这里精品青草免费 | 色偷偷网| 午夜影院h | 午夜剧场官网 | 四虎三级 | 性瘾高h姚蕊全文免费阅读 性做久久久久 | 日本黄视频在线播放 | 亚洲成网777777国产精品 | 黄网站在线观看视频 | 天堂网中文在线 | 久久伊人男人的天堂网站 | 日本特黄特色视频 | 精品精品国产理论在线观看 | 亚洲欧美国产视频 | 边摸边吃奶边做视频叫床韩剧 | 国产精品香蕉成人网在线观看 | 37pao强力打造免费高速高清 | 亚洲午夜精品久久久久久成年 | 成人欧美网站 | 三级黄色一级视频 |