三级黄色在线视频中文,国产精品一二三区,在线观看三级,成人午夜久久,日韩国产一区二区,韩日免费av,日韩成人一级

ucos的時(shí)間管理機(jī)制

來(lái)源:網(wǎng)絡(luò)

點(diǎn)擊:2440

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞: ucos,時(shí)間管理

      一。時(shí)間管理機(jī)制

      Ucos提供的延時(shí)基于系統(tǒng)時(shí)鐘。在系統(tǒng)初始化時(shí),會(huì)進(jìn)行系統(tǒng)時(shí)鐘的初始化。系統(tǒng)時(shí)鐘一般由硬件的某個(gè)時(shí)鐘提供,該時(shí)鐘會(huì)定時(shí)中斷,稱為一個(gè)tick。在每個(gè)tick發(fā)生時(shí),系統(tǒng)進(jìn)入時(shí)鐘中斷ISR。ISR 調(diào)用OSTimeTick()。 OSTimeTick()對(duì)OSTCBList鏈表中的每個(gè)任務(wù)的進(jìn)行延時(shí)處理,即將任務(wù)的TCB中的.OSTimeDly--。若OSTimeDly=0, 如果任務(wù)不被掛起,則將任務(wù)就緒,等待調(diào)度。OSTCBList包含了系統(tǒng)中所有創(chuàng)建的任務(wù)。

      任務(wù)延時(shí),即將任務(wù)從就緒表中刪除,將OSTimeDly置為合適的值。等待OSTimeDly=0時(shí),再置為就緒,等待調(diào)度。

      因此任務(wù)的延時(shí),并不是要以延時(shí)任務(wù)時(shí)長(zhǎng),理想上總是tick中斷間隔的N倍。

      Ucos還允許對(duì)系統(tǒng)時(shí)鐘tick進(jìn)行計(jì)數(shù),以計(jì)算自系統(tǒng)系統(tǒng)以來(lái)進(jìn)行了多少個(gè)tick.

      二、ucos提供的接口函數(shù)

      void OSTimeDly (INT16U ticks)。

      功能:延時(shí)ticks個(gè)系統(tǒng)tick時(shí)長(zhǎng)。當(dāng)成功延時(shí)后,進(jìn)行任務(wù)調(diào)度。

      INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)

      功能:提供基于毫秒,秒等容易的用戶接口。

      INT8U OSTimeDlyResume (INT8U prio);

      功能:恢復(fù)延時(shí)任務(wù)

      INT32U OSTimeGet (void);

      void OSTimeSet (INT32U ticks);

      功能:返回,設(shè)置系統(tǒng)時(shí)鐘tick計(jì)數(shù)。

      三、關(guān)于延時(shí)功能的使用

      雖然ucos提供了延時(shí)函數(shù),但因?yàn)槭腔谙到y(tǒng)時(shí)鐘中斷的,所有對(duì)于小于時(shí)鐘中斷時(shí)間間隔的延時(shí),并不能提供;只能通過(guò)軟件延時(shí)。

      在很多情況下,可以通過(guò)信號(hào)量、郵箱等方式取代延時(shí)功能。

      特別要注意的是,在多任務(wù)的運(yùn)行環(huán)境中,即使任務(wù)延時(shí)已經(jīng)完畢,但由于此時(shí)有高優(yōu)先級(jí)的任務(wù)運(yùn)行,此時(shí)任務(wù)仍不能運(yùn)行。至任務(wù)可以運(yùn)行時(shí),實(shí)際的延時(shí)已經(jīng)超過(guò)了預(yù)期的延時(shí)。

      附:給出了OSTimeTick () 函數(shù)的具體程序

      void OSTimeTick (void) //這個(gè)節(jié)拍服務(wù)函數(shù)是在OSTickISR函數(shù)中調(diào)用的,目的是在時(shí)鐘節(jié)拍到來(lái)時(shí),檢查每個(gè)任務(wù)的任務(wù)控制塊中的.OSTCBDly-1后是否為0,如果是,那么表明這個(gè)任務(wù)剛才是掛起的狀態(tài),此時(shí)應(yīng)改變?yōu)榫途w態(tài)

      {

      OS_TCB *ptcb;

      OSTimeTickHook(); //

      ptcb = OSTCBList; //時(shí)鐘節(jié)拍到來(lái)時(shí),將控制塊雙向鏈表的第一個(gè)控制塊取出(并不是節(jié)拍之前運(yùn)行的任務(wù))

      while (ptcb-》OSTCBPrio != OS_IDLE_PRIO) { //空閑任務(wù)處于控制塊雙向鏈表的最后一個(gè),如果取出的控制塊為空閑任務(wù)的控制塊,那么已經(jīng)取到最后一個(gè)了,就結(jié)束

      // OS_ENTER_CRITICAL();

      if (ptcb-》OSTCBDly != 0) { //

      if (--ptcb-》OSTCBDly == 0) { //

      if (!(ptcb-》OSTCBStat & OS_STAT_SUSPEND)) { //檢查任務(wù)是否處于強(qiáng)制掛起狀態(tài),如果是,那再掛起一個(gè)時(shí)鐘節(jié)拍,否則就將它就緒

      OSRdyGrp |= ptcb-》OSTCBBitY;

      OSRdyTbl[ptcb-》OSTCBY] |= ptcb-》OSTCBBitX;

      } else { //

      ptcb-》OSTCBDly = 1; //

      } //

      }

      }

      ptcb = ptcb-》OSTCBNext; //下一個(gè)任務(wù)控制塊

      // OS_EXIT_CRITICAL();

      }

      // OS_ENTER_CRITICAL(); //

      OSTime++; //節(jié)拍計(jì)數(shù)器+1

      // OS_EXIT_CRITICAL();

      }

    (審核編輯: 智匯小新)

    聲明:除特別說(shuō)明之外,新聞內(nèi)容及圖片均來(lái)自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請(qǐng)聯(lián)系我們刪除。