在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    <address id="qec3z"><var id="qec3z"><center id="qec3z"></center></var></address>

      <span id="qec3z"><code id="qec3z"></code></span>
    • <dfn id="qec3z"></dfn>
      <ruby id="qec3z"><thead id="qec3z"><noscript id="qec3z"></noscript></thead></ruby>
      <label id="qec3z"></label><dfn id="qec3z"><var id="qec3z"></var></dfn>

        新聞中心

        Uc/os-II的移植

        作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

        Uc/os-II的移植與FreeRTOS的移植很相似,F(xiàn)reeRTOS 的移植大致由3 個(gè)文件實(shí)現(xiàn),一個(gè).h 文件定義編譯器相關(guān)的數(shù)據(jù)類(lèi)型和中斷處理的宏定義;一個(gè).c 文件實(shí)現(xiàn)任務(wù)的堆棧初始化、系統(tǒng)心跳的管理和任務(wù)切換的請(qǐng)求;一個(gè).s 文件實(shí)現(xiàn)具體的任務(wù)切換。Uc/os-II的移植主要由OS-CPU.H、OS-CPU-C.C以及OS-CPU-A.ASM實(shí)現(xiàn)。

        本文引用地址:http://www.biyoush.com/article/201609/304842.htm

        1. INCLUDE.H

        INCLUDE.H是一個(gè)主頭文件,它出現(xiàn)在每個(gè).C文件的第1行。

        可以通過(guò)重新編輯INCLUDE.H,增加自己的頭文件,但頭文件必須添加在頭文件列表的最后。

        2. OS-CPU.H

        OS-CPU.H包括了用|define語(yǔ)句定義的、與處理器相關(guān)的常數(shù)、宏以及類(lèi)型。

        3. OS-CPU-C.C

        Uc/os-II的移植要求用戶(hù)編寫(xiě)10個(gè)簡(jiǎn)單的C函數(shù):(Hook結(jié)尾表示相應(yīng)的接口函數(shù))

        (1) OSTaskStkInit( ) 初始化任務(wù)的棧結(jié)構(gòu)

        OSTaskCreate( )和OSTaskCreatExt()通過(guò)調(diào)用它來(lái)初始化任務(wù)的棧結(jié)構(gòu);因此,堆棧看起來(lái)就像中斷剛發(fā)生過(guò)一樣,所有的寄存器都保存在堆棧中。另外,在初始化堆棧以后,OSTaskStkInit( )應(yīng)當(dāng)返回堆棧指針?biāo)赶虻牡刂贰?/p>

        (2) OSTaskCreateHook( )

        每當(dāng)添加任務(wù)時(shí),OS-TCBInit()函數(shù)都會(huì)調(diào)用OSTaskCreateHook( )

        函數(shù),當(dāng)其被調(diào)用時(shí),它會(huì)收到指向剛剛建立任務(wù)的任務(wù)控制塊的指針。這樣,它就可以訪問(wèn)任務(wù)控制塊結(jié)構(gòu)的所有的成員了。若用OSTaskCreate()建立任務(wù),OSTaskCreateHook( )的功能是有限的;但若使用OSTaskCreateExt()建立任務(wù)時(shí),會(huì)得到OS-TCB中的擴(kuò)展指針(OSTCBExtPtr)。該指針可用來(lái)訪問(wèn)任務(wù)的附加數(shù)據(jù),如浮點(diǎn)寄存器、MMU寄存器、任務(wù)計(jì)數(shù)器、以及調(diào)試信息??梢詸z查OS-TCBInit()看做了哪些工作。

        (3) OSTaskDelHook( )

        在任務(wù)從就緒列表或等待列表中被刪除后,OSTaskDel()就會(huì)調(diào)用OSTaskDelHook( )。當(dāng)調(diào)用其時(shí),它會(huì)收到一個(gè)指向正在被刪除任務(wù)的任務(wù)控制塊的指針,使它可以訪問(wèn)任務(wù)控制塊結(jié)構(gòu)的所有的成員。

        (4) OSTaskSwHook( )

        任務(wù)切換時(shí)被調(diào)用,可以直接訪問(wèn)OSTCBCur和OSTCBHighRdy這2個(gè)全局變量。OSTCBCur指向?qū)⒈磺袚Q出去的任務(wù)的任務(wù)控制塊,OSTCBHighRdy指向新任務(wù)的任務(wù)控制塊。

        (5) OSTaskIdleHook( )

        OSTaskIdle()可調(diào)用OSTaskIdleHook( )實(shí)現(xiàn)CPU的低功耗模式。

        (6) OSTaskStatHook( )

        每秒都會(huì)被統(tǒng)計(jì)任務(wù)OSTaskStat()調(diào)用一次,可以用其擴(kuò)展統(tǒng)計(jì)任務(wù)功能。例如,可以跟蹤并顯示每個(gè)任務(wù)的執(zhí)行時(shí)間、每個(gè)任務(wù)所用的CPU份額以及每個(gè)任務(wù)執(zhí)行的頻率等等。

        (7) OSTimeTickHook( )

        每個(gè)時(shí)鐘節(jié)拍都會(huì)被OSTimeTick()調(diào)用。

        (8) OSInitHookBegin( )

        進(jìn)入OSInit()函數(shù)后,OSInitHookBegin( )就立即被調(diào)用,添加其原因在于,這個(gè)函數(shù)使得用戶(hù)可以將自己特定代碼也放在OSInit()中,使代碼簡(jiǎn)潔明了。

        (9) OSInitHookEnd( )

        與OSInitHookBegin( )相似,只是它在OSInit()函數(shù)返回之前被調(diào)用。

        (10)OSTCBInitHook( )

        OS-TCBInit()函數(shù)在調(diào)用OSTaskCreateHook( )之前,會(huì)先調(diào)用OSTCBInitHook( )。原因在于,用戶(hù)可以在OSTCBInitHook( )中做一些與初始化控制塊OS-TCB有關(guān)的處理;在OSTaskCreateHook( )中做一些以初始化任務(wù)有關(guān)的處理。同OSTaskCreateHook( )一樣,OSTCBInitHook( )會(huì)收到指向新添加任務(wù)的任務(wù)控制塊的指針。

        4.OS-CPU-A.ASM

        Uc/os-II的移植要求用戶(hù)編寫(xiě)4個(gè)簡(jiǎn)單的匯編語(yǔ)言函數(shù):

        (1) OSStartHighRdy()

        OSStart()函數(shù)調(diào)用OSStartHighRdy()來(lái)使就緒任務(wù)中優(yōu)先級(jí)最高的任務(wù)開(kāi)始運(yùn)行。切記,在調(diào)用OSStart()之前,要已經(jīng)建立了至少1個(gè)應(yīng)用任務(wù)。

        (2) OSCtxSw()

        任務(wù)級(jí)的切換是通過(guò)執(zhí)行軟中斷指令,或者依據(jù)處理器的不同,TRAP(陷阱)指令來(lái)實(shí)現(xiàn)的。中斷服務(wù)子程序,陷阱或異常處理的向量地址必須指向OSCtxSw()。

        (3) OSIntCtxSw()

        OSIntExit()通過(guò)調(diào)用OSIntCtxSw(),在ISR中執(zhí)行任務(wù)切換功能。OSIntCtxSw()與OSCtxSw()很相似,區(qū)別只是,因?yàn)镮SR已經(jīng)保存了CPU的寄存器,而不需要再在OSIntCtxSw()函數(shù)中保存。



        關(guān)鍵詞:

        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉