色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

FreeRTOS的事件標志組

汽車電子技術 ? 來源:玩轉單片機 ? 作者: Julian ? 2023-02-10 15:58 ? 次閱讀

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

事件標志位可以理解為一個Bit位,多個事件位就組成了事件標志組,FreeRTOS可選8個事件標志位或者24個事件標志位,具體是由configUSE_16_BIT_TICKS來確定,它為1的時候是8個標準位,為0時是24個標志位!

創建標志組

EventGroupHandle_t xEventGroupCreate( void );

返回值:

創建失敗返回NULL,創建成功返回句柄

置位API函數

EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup,
                                 const EventBits_t uxBitsToSet );

參數

xEventGroup:需要操作的事件標志組的句柄

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

讀取事件組的位

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

參數:

xEventGroup:事件標志組的句柄

uxBitsToWaitFor:需要等待的標志位

xClearOnExit:是否需要清除標志位

xWaitForAllBits:是否等待所有設定標志位

xTicksToWait:最大等待時間

注意:更多API函數,請參考官方相關

附上簡單使用應用

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


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


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


EventGroupHandle_t Event_Handle = NULL;//事件標志組的句柄


void LED_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;        //定義結構體變量

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

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

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


int main( void ) 
{
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置系統中斷優先級分組 4
  LED_Init(); //初始化 LED
  //創建任務標志組
  Event_Handle = xEventGroupCreate();
  //置位標志位
  xEventGroupSetBits( ( EventGroupHandle_t) Event_Handle,
            ( EventBits_t )       0x08       );

  //創建開始任務
  xTaskCreate(
    (TaskFunction_t )start_task,     //任務函數
    (const char* )"start_task",     //任務名稱
    (uint16_t )START_STK_SIZE,       //任務堆棧大小
    (void* )NULL,             //傳遞給任務函數的參數
    (UBaseType_t )START_TASK_PRIO,     //任務優先級
    (TaskHandle_t* )&StartTask_Handler  //任務句柄 
  );
  vTaskStartScheduler();  //開啟調度
}
//開始任務函數
void start_task(void *pvParameters)
{
  taskENTER_CRITICAL();   //進入臨界區
  //創建 LED0 任務
  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); //刪除開始任務
  taskEXIT_CRITICAL();   //退出臨界區
}


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

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

    vTaskDelay(400);
  }
}

注意:如果LED0任務中的置位函數,那么LED0函數只會運行一次,因為標志位已經清除了,需要再次置位標志位才會繼續運行!

--END--

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

    關注

    12

    文章

    484

    瀏覽量

    62144
  • 信號量
    +關注

    關注

    0

    文章

    53

    瀏覽量

    8333
  • 事件標志組
    +關注

    關注

    0

    文章

    3

    瀏覽量

    1287
收藏 人收藏

    評論

    相關推薦

    使用STM32CubeMX生成的FreeRTOS系統中,似乎沒有新封裝的事件標志,怎么解決?

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

    使用FreeRTOS系統事件標志有些收不到是怎么回事?

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

    轉:freeRTOS事件學習

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

    轉:第18章 FreeRTOS事件標志

    第18章FreeRTOS事件標志 前面的章節我們已經講解了任務管理和時間管理,從本章節開始講解任務間的通信和同步機制。首先講解任務間的通信和同步機制之一,事件標志
    發表于 09-02 12:40

    轉:第26章 FreeRTOS任務事件標志

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

    【NUCLEO-F412ZG試用體驗】FreeRTOS_事件標志實現任務和中斷的同步

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

    UCOS3的事件標志

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

    freertos中斷置位事件標志輸出Error的解決辦法?

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

    【轉載】AT32 FreeRTOS應用筆記

    ........................................83例程介紹 ...................................................... 85FreeRTOS 事件標志
    發表于 08-16 11:56

    怎樣去設置FreeRTOS事件標志的事件位呢

    事件標志是什么意思呢?怎樣去設置FreeRTOS事件標志的事件位呢?
    發表于 02-28 06:44

    UCOS擴展例程-UCOSIII事件標志

    UCOS擴展例程- UCOSIII事件標志
    發表于 12-14 17:24 ?14次下載

    freeRTOS中的消息郵箱

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

    freeRTOS用于任務之間同步的手段事件標志

    freeRTOS中還有一種可以用于任務之間同步的手段 — 事件標志
    的頭像 發表于 02-10 11:10 ?1533次閱讀

    FreeRTOS事件標志介紹

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

    FreeRTOS創建事件標志

    創建事件標志 3、設置事件位 4、獲取事件標志值 5、等待指定的事件位 某個任務可能需要與多個事件進行同步,那么這個任務就需要等待并判斷多個事件位(標 志),使用函數
    的頭像 發表于 07-06 17:23 ?524次閱讀
    <b class='flag-5'>FreeRTOS</b>創建事件<b class='flag-5'>標志</b><b class='flag-5'>組</b>
    主站蜘蛛池模板: 国产区在线不卡视频观看| 亚洲免费综合色视频| 大香交伊人| 日韩中文欧美在线视频| 动漫成人片| 少妇人妻偷人精品视蜜桃| 国产成人免费高清激情视频| 天堂视频在线观看免费完整版| 国产精品www视频免费看| 欧洲最强rapper潮水喷视频| 亚洲 日韩 在线 国产 视频| 国产精品一库二库三库| 性xxx欧美| 国语对白老女人8av| 亚洲三级在线看| 久久久久久天天夜夜天天| 最近更新2019中文字幕国语| 美女张开腿让男人桶爽无弹窗| 99成人在线视频| 日本G奶乳液汁| 国产成人精品s8p视频| 午夜亚洲动漫精品AV网站| 韩国g奶空姐| 岳打开双腿开始配合日韩视频| 蜜芽TV影院在线视频| 被同桌摸出水来了好爽的视频| 骚浪插深些好烫喷了| 国产一区二区高清| 一二三区乱码不卡手机版| 乱亲女H秽乱长久久久| CHINA中国东北GURMA| 色婷婷粉嫩AV精品综合在线| 国产欧美日韩综合精品一区二区| 亚洲三级黄色| 美女张开腿露尿口给男人亲 | 国产午夜一级鲁丝片| 一个人在线观看的视频| 免费视频久久只有精品| 大中国免费视频大全在线观看| 精品香蕉99久久久久网站| 少妇高潮A视频|