新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 移植μC/OS-Ⅱ

        移植μC/OS-Ⅱ

        作者: 時間:2016-10-08 來源:網絡 收藏

        只用當OS_CFG.H中的OS_CPU_HOOKS_EN被置為1時才會產生 OSTaskSwHook()的代碼。

        本文引用地址:http://www.104case.com/article/201610/305739.htm

        8.05.05OSTaskStatHook()

        OSTaskStatHook()每秒鐘都會被OSTaskStat()調用一次。用戶可以用OSTaskStatHook()來擴展統計功能。例如,用戶可以保持并顯示每個任務的執行時間,每個任務所用的CPU份額,以及每個任務執行的頻率等等。OSTaskStatHook()沒有任何參數,也不返回任何值。

        只用當OS_CFG.H中的OS_CPU_HOOKS_EN被置為1時才會產生OSTaskStatHook()的代碼。

        8.05.06OSTimeTickHook()

        OSTaskTimeHook()在每個時鐘節拍都會被OSTaskTick()調用。實際上,OSTaskTimeHook()是在節拍被μC/OS-Ⅱ真正處理,并通知用戶的移植實例或應用程序之前被調用的。OSTaskTimeHook()沒有任何參數,也不返回任何值。

        只用當OS_CFG.H中的OS_CPU_HOOKS_EN被置為1時才會產生OSTaskTimeHook()的代碼。

        無論何時建立任務,在分配好和初始化TCB后就會調用該函數,當然任務的堆棧結構也已經初始化好了。OSTaskCreateHook()允許用戶用自己的方式來擴展任務建立函數的功能。例如用戶可以初始化和存儲與任務相關的浮點寄存器,MMU寄存器以及其它寄存器的內容。通常,用戶可以存儲用戶的應用程序所分配的附加的內存信息。用戶還可以通過使用OSTaskCreateHook()來觸發示波器或邏輯分析儀,以及設置斷點。

        參數

        ptcb是指向所創建任務的任務控制塊的指針。

        返回值

        注意事項

        該函數在被調用的時候中斷是禁止的。 因此用戶應盡量減少該函數中的代碼以縮短中斷

        的響應時間。

        范例

        該例子假定了用戶是用OSTaskCreateExt()建立任務的,因為它希望在任務OS_TCB中

        有.OSTCBExtPtr域,該域包含了指向浮點寄存器的指針。

        VoidOSTaskCreateHook(OS_TCB*ptcb)

        {

        if(ptcb->OSTCBExtPtr!=(void*)0){

        /* 儲存浮點寄存器的內容到..*/

        /*..TCB擴展域中 */

        }

        }

        當用戶通過調用OSTaskDel()來刪除任務時都會調用該函數。這樣用戶就可以處理OSTaskCreateHook()所分配的內存。 OSTaskDelHook()就在TCB從TCB鏈中被移除前被調用。

        用戶還可以通過使用OSTaskDelHook()來觸發示波器或邏輯分析儀,以及設置斷點。

        參數

        ptcb是指向所創建任務的任務控制塊的指針。

        返回值

        注意事項

        該函數在被調用的時候中斷是禁止的。 因此用戶應盡量減少該函數中的代碼以縮短中斷

        的響應時間。

        范例

        voidOSTaskDelHook(OS_TCB*ptcb)

        {

        /* 輸出信號觸發示波器 */

        }

        當執行任務切換時都會調用該函數。全局變量OSTCBHighRdy指向得到CPU的任務的TCB,而OSTCBCur指向被切換出去的任務的TCB。OSTaskSwHook()在保存好了任務的寄存器和保存好了指向當前任務TCB的堆棧指針后馬上被調用。 用戶可以用該函數來保存或恢復浮點寄存器或MMU寄存器的內容,來得到任務執行時間的軌跡以及任務被切換進來的次數等等。

        參數

        返回值

        注意事項

        該函數在被調用的時候中斷是禁止的。 因此用戶應盡量減少該函數中的代碼以縮短中斷的響應時間。

        范例

        voidOSTaskSwHook(void)

        {

        /* 將浮點寄存器的內容儲存在當前任務的TCB擴展域中。 */

        /* 用新任務的TCB擴展域中的值更新浮點寄存器的內容。 */

        }

        該函數每秒鐘都會被μC/OS-Ⅱ的統計任務調用。OSTaskStatHook()允許用戶加入自己的統計功能。

        參數

        返回值

        注意事項

        統計任務大概在調用OSStart()后再過5秒開始執行。注意,當OS_TASK_STAT_EN或者

        OS_TASK_CREATE_EXT_EN被置為0時,該函數不會被調用。

        范例

        voidOSTaskStatHook(void)

        {

        /* 計算所有任務執行的總時間 */

        /* 計算每個任務的執行時間在總時間內所占的百分比 */

        }

        只要發生時鐘節拍,該函數就會被OSTimeTick()調用。一旦進入OSTimeTick()就會馬上調用OSTimeTickHook()以允許執行用戶的應用程序中的與時間密切相關的代碼。用戶還可以通過使用該函數觸發示波器或邏輯分析儀來調試,或者為仿真器設置斷點。

        參數

        返回值

        注意事項

        OSTimeTick()通常是被ISR調用的, 所以時鐘節拍ISR的執行時間會因為用戶在該函數

        中提供的代碼而增加。當OSTimeTick()被調用的時候,中斷可以是禁止的也可以是允許的,

        這主要取決于該處理器上的移植是怎樣進行的。如果中斷是禁止的,該函數將會影響到中斷

        響應時間。

        范例

        voidOSTimeTickHook(void)

        {

        /* 觸發示波器 */

        }


        上一頁 1 2 3 4 5 6 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 连江县| 澄城县| 新郑市| 出国| 镇赉县| 阜康市| 武冈市| 营口市| 寻乌县| 汉源县| 当雄县| 启东市| 临安市| 石狮市| 炎陵县| 蕲春县| 曲靖市| 同仁县| 印江| 铜川市| 习水县| 老河口市| 奇台县| 察隅县| 西峡县| 克山县| 且末县| 唐河县| 东乌| 汕尾市| 霍城县| 乐陵市| 威信县| 玉田县| 五指山市| 疏附县| 彭泽县| 金沙县| 吴堡县| 舟曲县| 徐州市|