<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > μC/OS-II的任務(wù)管理

          μC/OS-II的任務(wù)管理

          作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

          要調(diào)用OSTaskQuery(),如程序清單L4.18中所示的那樣,用戶的應(yīng)用程序必須要為OS_TCB分配存儲空間。這個OS_TCB與μC/OS-Ⅱ分配的OS_TCB是完全不同的數(shù)據(jù)空間。在調(diào)用了OSTaskQuery()后,這個OS_TCB包含了對應(yīng)任務(wù)的OS_TCB的副本。用戶必須十分小心地處理OS_TCB中指向其它OS_TCB的指針(即OSTCBNext與OSTCBPrev);用戶不要試圖去改變這些指針! 一般來說, 本函數(shù)只用來了解任務(wù)正在干什么——本函數(shù)是有用的調(diào)試工具。

          程序清單 L4.18 得到任務(wù)的信息

          OS_TCBMyTaskData;

          voidMyTask(void*pdata)

          {

          pdata=pdata;

          for(;;){

          /* 用戶代碼 */

          err=OSTaskQuery(10,MyTaskData);

          /*Examineerrorcode..*/

          /* 用戶代碼 */

          }

          }

          OSTaskQuery()的代碼如程序清單L4.19所示。注意,筆者允許用戶查詢所有的任務(wù),包括空閑任務(wù)[L4.19(1)]。 用戶尤其需要注意的是不要改變OSTCBNext與OSTCBPrev的指向。

          通常,OSTaskQuery()需要檢驗(yàn)用戶是否想知道當(dāng)前任務(wù)的有關(guān)信息[L4.19(2)]以及該任務(wù)是否已經(jīng)建立了[L4.19(3)]。 所有的域是通過賦值語句一次性復(fù)制的而不是一個域一個域地復(fù)制的[L4.19(4)]。這樣復(fù)制會比較快一點(diǎn),因?yàn)榫幾g器大多都能夠產(chǎn)生內(nèi)存拷貝指令。

          程序清單 L4.19 OSTaskQuery().

          INT8UOSTaskQuery(INT8Uprio,OS_TCB*pdata)

          {

          OS_TCB*ptcb;

          if(prio>OS_LOWEST_PRIOprio!=OS_PRIO_SELF){(1)

          return(OS_PRIO_INVALID);

          }

          OS_ENTER_CRITICAL();

          if(prio==OS_PRIO_SELF){(2)

          prio=OSTCBCur->OSTCBPrio;

          }

          if((ptcb=OSTCBPrioTbl[prio])==(OS_TCB*)0){(3)

          OS_EXIT_CRITICAL();

          return(OS_PRIO_ERR);

          }

          *pdata=*ptcb;(4)

          OS_EXIT_CRITICAL();

          return(OS_NO_ERR);

          }


          上一頁 1 2 3 4 5 6 7 8 9 下一頁

          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();