国产一区二区精品在线_午夜精品视频_亚洲国产高清高潮精品美女_久久久91_午夜精品视频_久久久久亚洲一区二区三区

uCOS II 之事件控制塊學習

來源:網絡

點擊:2355

A+ A-

所屬頻道:新聞中心

關鍵詞: uCOS II,事件控制塊

      一。 事件控制塊ECB數據結構:

      typedef struct

      {

      INT8U OSEventType; //事件類型

      INT8U OSEventGrp; //等待任務所在的組

      INT16U OSEventCnt; //當事件是信號量時的計數器

      void *OSEventPtr; //指向消息或消息隊列的指針

      INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; //等待任務列表

      } OS_EVENT;

      二.關鍵算法:

      1、將一個任務插入到等待事件的任務列表中:

      當調用函數OS_EventTaskWait( )使一個任務進入等待某事件發生時,需要此算法,從而將任務插入到等待事件的任務列表中。

      pevent -》 OSEventGrp |= OSMapTbl[prio 》》 3];

      pevent -》 OSEventTbl[prio》》3] = OSMapTbl[prio & 0x07];

      2、從等待事件的任務列表中使任務脫離等待狀態:

      當調用函數OS_EventTaskRdy( )使一個任務進入就緒態時,需要調用此算法,從而使等待的任務脫離等待狀態進入就緒。

      if ((pevent -》 OSEventTbl[prio 》》3] &= ~OSMapTbl[prio & 0x07]) == 0)

      {

      pevent -》 OSEventGrp &= ~OSMapTbl[prio 》》3];

      }

      3、在等待事件的任務列表中查找優先級最高的任務:

      當調用函數OS_EventTaskRdy( )使一個任務進入就緒態時,需要調用此算法,從而首先找出在等待事件任務列表中最高優先級的任務進入就緒狀態。

      y = OSUnMapTbl[pevent -》 OSEventGrp];

      x = OSUnMapTbl[pevent -》 OSEventTbl[y];

      prio = (y 《《 3) + x;

      三.對事件控制塊ECB的基本操作

      1、初始化一個事件控制塊:

      函數OSSemCreate( ),OSMutexCreate( ),OSMboxCreate( ),OSQCreate( )建立時,必須調用此函數進行初始化,初始化一個空的等待列表,表中沒有任何等待事件的任務。

      OS_EventWaitListInit( );

      2、使一個任務進入就緒態:

      當某個事件發生了時,要將事件等待任務列表中最高優先級的任務進入就緒態,函數OSSemPost,OSMutexPost( ),OSMboxPost( ),OSQPost( )必將調用此函數從而使一個任務進入就緒態。

      OS_EventTaskRdy( );

      3、使一個任務進入等待某事件發生:

      當某個任務須等待一個事件的發生時,信號量、互斥型信號量、郵箱、消息隊列會通過相應的PEND函數來調用這個函數。

      OS_EventTaskWait( );

      4、由于等待超時而將任務置為就緒態:

      如果在預先指定的等待時間內任務等待的事件沒有發生,那么PNED類型函數將會調用此函數從而將等待超時的任務進入就緒態。

      OS_EventTo( );

      四.事件控制塊ECB基本操作代碼的分析。

      1、OS_EventWaitListInit( );

      void OS_EventWaitListInit(OS_EVENT *pevent)

      {

      INT8U *ptbl; //定義指針變量ptbl

      pevent -》 OSEventGrp = 0x00; //清除任務所在的組

      OS_EVENT_TBL_SIZE在UCOS_ II.H中定義大小

      ptbl = &pevent -》 OSEventTbl[0];

      #if OS_EVENT_TBL_SIZE 》 0

      *ptbl++ = 0x00; //清除等待任務列表,在這里沒有使用for循環是為了節省系統開銷

      #endif

      #if OS_EVENT_TBL_SIZE 》 1

      *ptbl++ = 0x00;

      #endif

      #if OS_EVENT_TBL_SIZE 》 2

      *ptbl++ = 0x00;

      #endif

      #if OS_EVENT_TBL_SIZE 》 3

      *ptbl++ = 0x00;

      #endif

      #if OS_EVENT_TBL_SIZE 》 4

      *ptbl++ = 0x00;

      #endif

      #if OS_EVENT_TBL_SIZE 》 5

      *ptbl++ = 0x00;

      #endif

      #if OS_EVENT_TBL_SIZE 》 6

      *ptbl++ = 0x00;

      #endif

      #if OS_EVENT_TBL_SIZE 》 7

      *ptbl++ = 0x00;

      #endif

      }

      2、OS_EventTaskRdy( );

      INT8U OS_EventTaskRdy(OS_EVENT *pevent, void *msg,INT8U msk)

      {

      OS_TCB *ptcb;

      INT8U x;

      INT8U y;

      按照關鍵算法3,在等待事件的任務列表中找到優先級最高的任務,并確定其優先級。

     

      INT8U bitx;

      INT8U bity;

      INT8U prio;

      y = OSUnMapTbl[pevent -》 OSEventGrp];

      bity = OSMapTbl[y];

      x = OSUnMapTbl[pevent -》 OSEventTbl[y]];

      利用算法2,從等待任務列表中刪除此優先級最高的任務。

      bitx = OSMapTbl[x];

      prio = (INT8U)(( y 《《 3) + x);

      if ((pevent -》 OSEventTbl[y] &= ~bitx) == 0x00)

      { pevent -》 OSEventGrp &= ~bity;}

      ptcb = OSTCBPrioTbl[prio]; //知道了任務優先級,從而找到任務控制塊的指針

      ptcb -》 OSTCBDly = 0; //由于此任務已經不再等待事件的發生,因此直接清0

      ptcb -》 OSTCBEventPtr = (OS_EVENT *)0;//由于不再等待事件的發生,使指向事件控制塊的指針指向NULL

      #if ((OS_Q_EN 》 0) && (OS_MAX_QS 》 0)) || (OS_MBOX_EN 》 0)

      ptcb -》 OSTCBMsg = msg;//如果此函數是郵箱或隊列POST函數調用的,則需要將傳遞來的參數放到它的任務控制塊中

      #else

      msg = msg;

      #endif

      ptcb -》 OSTCBStat &= ~msk;

      if (ptcb -》 OSTCBStat == OS_STAT_RDY)]

      {

      OSRdyGrp |= bity; ---最高優先級的任務插入到就緒任務列表,由后續POST函數中的

      OSRdyTbl[y] |= bitx; ---OSSched( )函數進行調度使任務進入就緒,請參考第三章之就緒表

      }

      return (prio);

      }

      3、OS_EventTaskWait( );

      void OS_EventTaskWait(OS_EVENT *pevent)

      {

      OSTCBCur -》 OSTCBEventPtr = pevent;

      if (( OSRdyTbl[OSTCBCur -》 OSTCBY] &= ~OSTCBCur-》OSTCBBitx) == 0x00)

      { OSRdyGrp &= ~OSTCBCur -》 OSTCBBity; } //如果在PEND函數中沒有收到有效的信號量,

      //那么將調用此函數進入睡眠態,在這里將任務在任務就緒列表中刪除

      pevent -》 OSEventTbl[OSTCBCur -》 OSTCBY] |= OSTCBCur -》 OSTCBBitx;

      pevent -》 OSEventGrp |= OSTCBCur -》 OSTCBBity;//把此任務放到ECB的等待事件的任務列表中去

      }

      4、OS_EventTo( );

      void OS_EventTO (OS_EVENT *pevent)

      {

      if (( pevent -》 OSEventTbl[OSTCBCur -》 OSTCBY] &= ~OSTCBCur -》 OSTCBBitx) ==0x00)

      { pevent -》 OSEventGrp &= ~OSTCBCur -》 OSTCBBitY; }//將超時的任務在等待任務列表中刪除

      OSTCBCur -》 OSTCBStat = OS_STAT_RDY; //任務置為就緒態

      OSTCBCur -》 OSTCBEventPtr = (OS_EVENT *)0;

      }

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    国产一区二区精品在线_午夜精品视频_亚洲国产高清高潮精品美女_久久久91_午夜精品视频_久久久久亚洲一区二区三区
    <cite id="gqusq"><tbody id="gqusq"></tbody></cite>
    <strike id="gqusq"><tbody id="gqusq"></tbody></strike>
    <abbr id="gqusq"><rt id="gqusq"></rt></abbr>
  • <strike id="gqusq"><tbody id="gqusq"></tbody></strike>
    <ul id="gqusq"></ul>
    <center id="gqusq"><noscript id="gqusq"></noscript></center>
  • 亚洲精品不卡| 91久久国产综合久久蜜月精品| 国产精品vip| 国产日韩一区二区| 超碰97在线播放| 日本10禁啪啪无遮挡免费一区二区| 欧美国产综合视频| 性色一区二区| 麻豆av一区二区三区| 亚洲国产精品一区二区第四页av| 欧美体内she精视频在线观看| 国产一区二区高清不卡| 狠狠色伊人亚洲综合网站色| 欧美日韩三级电影在线| 久久久久久久久久久一区| 麻豆亚洲一区| 亚洲裸体俱乐部裸体舞表演av| 国产日韩在线一区二区三区| 欧美~级网站不卡| 97久久人人超碰caoprom欧美| 午夜精品一区二区在线观看| 亚洲另类黄色| 日韩欧美精品一区二区三区经典| 国产日韩欧美| 亚洲精品国产精品久久| 午夜一级在线看亚洲| 亚欧精品在线| 国产传媒一区二区三区| 国产在线不卡| 免费日韩av电影| 免费亚洲网站| 一区二区精品在线观看| 99久久无色码| 亚洲理伦在线| 中文视频一区视频二区视频三区 | 韩国成人av| 日韩午夜视频在线观看| 日本欧美精品久久久| 久久综合影音| 亚洲日本激情| 欧美一区二区三区另类| 国产伦理一区二区三区| 宅男噜噜噜66一区二区| 日韩一本精品| 国产日韩欧美精品| 麻豆91精品| 18成人免费观看视频| 奇米视频888战线精品播放| 久久久www免费人成黑人精品| 欧美三区美女| 亚洲午夜激情| 久久大香伊蕉在人线观看热2| 久久av一区二区| 亚洲精品欧洲精品| 欧美日韩三级| 欧美在线播放一区| 欧美一区1区三区3区公司| 超碰97在线播放| 久久xxxx| 另类天堂av| 国产精品日韩高清| 亚洲黄色影片| 亚洲高清激情| 亚洲三级影院| 日韩视频精品| 夜夜精品视频| 一本一道久久综合狠狠老精东影业| 中文精品视频一区二区在线观看| 日本高清一区| 日韩欧美亚洲区| 日韩久久精品一区二区三区| 欧美极品日韩| 日本高清视频一区二区三区 | 91九色视频在线观看| 免费视频一区二区三区在线观看| 国产欧美三级| 美女爽到呻吟久久久久| 久久久一本精品99久久精品66| 香蕉久久夜色| 99电影在线观看| 成人高清在线观看| 国产成人一区二区三区免费看| 91影院未满十八岁禁止入内| 老司机午夜精品视频| 91黄色国产视频| 国产偷国产偷亚洲高清97cao| 国产精品日本一区二区| 久久av一区二区| 日韩精品国内| 欧美一区二视频在线免费观看| 中文一区一区三区免费| 伊人天天综合| 国产精品美女黄网| 久久中文欧美| 欧美18视频| 中文字幕一区二区三区精彩视频| 黄色成人av网站| 国产偷国产偷亚洲高清97cao| 每日更新成人在线视频| 国产日韩亚洲精品| 亚洲精品自在在线观看| 一区在线视频观看| 51精品国产人成在线观看| 激情视频一区二区| 一本一道久久a久久综合精品| 亚洲国产电影| 国产精品白丝jk白祙| 日本成人黄色免费看| 欧美日韩国产综合网| 国产美女精品| 欧美日韩免费观看一区| 亚洲视频狠狠| 99国产超薄丝袜足j在线观看 | 国产欧美日韩综合精品二区| 深夜福利成人| 亚洲乱码久久| 精品麻豆av| 狠久久av成人天堂| 国产日韩欧美一区二区| 女生裸体视频一区二区三区| 久久国产日韩| 一本久道久久综合狠狠爱亚洲精品| 最新国产乱人伦偷精品免费网站| 999精品视频一区二区三区| 亚洲精品在线观看免费| 久久aⅴ国产紧身牛仔裤| 色噜噜狠狠色综合网| 国产精品综合| 一区高清视频| 久久午夜电影| 国产精品激情电影| 麻豆91av| 久久精品一区二区国产| 女同性一区二区三区人了人一 | 亚洲黄页一区| 久久久久久久有限公司| 中文精品在线| 欧美一区二区三区另类| 成人黄色在线免费观看| 伊人久久大香线蕉av超碰演员| 久久99精品国产一区二区三区| 欧美三区在线| 欧美激情第一页在线观看| 国产女优一区| 国内精品久久久久久久果冻传媒 | 久久久久久久久久久久久久久久av | 日本精品国语自产拍在线观看| 亚洲免费不卡| 欧美成人嫩草网站| 国产一区国产精品| 蜜桃av久久久亚洲精品| 狠狠色综合网| 亚洲精品国产系列| 老牛影视免费一区二区| 久久亚洲免费| 一区二区欧美日韩| 欧美私人啪啪vps| 新呦u视频一区二区| 含羞草久久爱69一区| 51蜜桃传媒精品一区二区| 亚洲久久视频| 亚洲视频综合| 欧美精品91| 一区二区三区四区欧美日韩| 久久久精品有限公司| 国产精品传媒毛片三区| 美日韩精品视频| 性感少妇一区| 国产精品一区亚洲| 国产日韩欧美亚洲一区| 亚洲激情二区| 日韩视频三区| 亚洲三级国产| 一区二区欧美日韩| 亚洲精品美女久久7777777| 黄色av一区| 亚洲二区三区四区| 一区二区视频欧美| 在线不卡欧美| 亚洲国产1区| 一本综合久久| 国产精品一区二区三区四区五区| 伊人影院久久| 一区二区三区四区五区视频| 亚洲三级影院| 精品国产免费一区二区三区| 亚洲国产日韩欧美| 亚洲国产精品日韩| 欧美精品大片| 韩国一区二区三区在线观看| 一区二区三区av在线| 伊人久久大香线蕉成人综合网| 日韩欧美一区二区视频在线播放| 日韩精品久久一区| 欧美一区二区三区四区在线观看地址 | 国产视频不卡| 51国偷自产一区二区三区的来源| 99电影网电视剧在线观看| 狠狠色综合一区二区| 欧美日韩最好看的视频|