freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm9的μcosⅱ嵌入式系統(tǒng)移植畢業(yè)設(shè)計(jì)(編輯修改稿)

2025-07-21 16:39 本頁面
 

【文章內(nèi)容簡介】 會(huì)出現(xiàn)不兼容的問題,這時(shí)需要對(duì)操作系統(tǒng)進(jìn)行移植,使它能夠在使用的CPU 上運(yùn)行。μC/OSII 的移植需滿足以下的要求:1. 處理器的 C 編譯器可產(chǎn)生可重入代碼; 2. 進(jìn)入和退出臨界區(qū)代碼可以使用 C 進(jìn)行調(diào)用; 3. 處理器必須支持具有定時(shí)中斷源的硬件中斷; 4. 處理器必須能夠容納一定的數(shù)據(jù)硬件堆棧; 5. 處理器需要有交換數(shù)據(jù)的指令,使其能夠在 CPU 的寄存器和內(nèi)核及堆棧間進(jìn)行數(shù)據(jù)的交換。 移植步驟μC/OSⅡ作為實(shí)時(shí)操作系統(tǒng)操作系統(tǒng),在設(shè)計(jì)初期就已經(jīng)充分考慮了可移植性,針對(duì)不同的CPU版本,μC/OSⅡ的移植核心環(huán)節(jié)就是改寫一些與處理器硬件相關(guān)的函數(shù)。移植工作包括以下內(nèi)容:1. 用define設(shè)置一些常量的值()2. 聲明10個(gè)指定的數(shù)據(jù)類型() 3. 用define聲明2個(gè)宏() 4. 用 C 語言編寫6個(gè)簡單函數(shù)() 5. 根據(jù)硬件編寫了4個(gè)函數(shù)(OS_CPU_ ) 。簡而言之。雖然這增加了文件編譯的時(shí)間,但是增強(qiáng)了可移植性。,為了避免重新編譯已編譯的內(nèi)容,增加的頭文件必須添加在頭文件列表的最后。 內(nèi)核是一個(gè)系統(tǒng)的核心,根據(jù)不同的需要和應(yīng)用,我們可以對(duì)內(nèi)核進(jìn)行定制和裁剪,從而提高了實(shí)時(shí)性。 文件 define定義的常量,宏和類型定義(與處理器相關(guān))。眾所周知,不同的處理器字長是不相同的,尤其是,μC/OSⅡ代碼不使用與編譯器相關(guān)的C的short(短整),int(整型)和long(長整)等數(shù)據(jù)類型。所以為了移植的成功,需要對(duì)μC/OSⅡ中的數(shù)據(jù)類型進(jìn)行重新的定義。與所有的實(shí)時(shí)內(nèi)核一樣,μC/OSⅡ需要先將中斷禁止再進(jìn)行訪問代碼臨界段,且在訪問完畢重新允許中斷。μC/OSⅡ定義了兩個(gè)宏來禁止和允許中斷:OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL()。結(jié)構(gòu)常量OS_STK_GROWTH是用來改變堆棧生長方式。因?yàn)椴煌奈⑻幚砥骱臀⒖刂破鞫褩IL方式不同,μC/OSⅡ中可以通過改變OS_STK_GROWTH的值來改變堆棧生長方式當(dāng)把OS_STK_GROWTH值置0,堆棧的生長方式是從下往上長。當(dāng)把OS_STK_GROWTH值置1,堆棧的生長方式是從上往下長。OS_TASK_SW()是一個(gè)在μC/OSⅡ進(jìn)行任務(wù)切換(低任務(wù)優(yōu)先級(jí)級(jí)到最高優(yōu)先級(jí)任務(wù))時(shí)被調(diào)用的宏。任務(wù)切換只是簡單的把處于當(dāng)前優(yōu)先級(jí)任務(wù)處理器的寄存器保存到將被掛起的任務(wù)堆棧中,同時(shí)將更高優(yōu)先級(jí)的任務(wù)從堆棧中恢復(fù)出來。 文件 μC/OSⅡ的移植中需要編寫六個(gè)簡單的C函數(shù):OSTaskStkInit()OSTaskCreateHook()OSTaskDelHook()OSTaskSwHook()OSTaskStatHook()OSTimeTickHook()唯一必要的函數(shù)是OSTaskStkInit(),其它五個(gè)函數(shù)需要聲明但沒必要包含代碼。 OSTaskStkInt()OSTaskCreate()和 OSTaskCreateExt()通過調(diào)用OSTaskStkInt()進(jìn)行任務(wù)的堆棧結(jié)構(gòu)的初始化。OSTaskCreate()和 OSTaskCreateExt()會(huì)得到傳遞任務(wù)地址,pdata指針,任務(wù)堆棧棧頂和任務(wù)優(yōu)先級(jí)等參數(shù),為了堆棧結(jié)構(gòu)初始化的正確性,OSTaskStkInt()只需要上述的三個(gè)和一個(gè)附加在OSTaskCreateExt()中得到的選項(xiàng)。一旦堆棧初始化, OSTaskCreate()和 OSTaskCreateExt()會(huì)獲得OSTaskStkInit()返回堆棧指向的地址,并將其保存至任務(wù)控制塊(OS_TCB)中。處理器文檔會(huì)指明堆棧指針會(huì)是指向下個(gè)堆棧的空閑位置,還是指向了最后存入數(shù)據(jù)的堆棧單元位置。 OSTaskCreateHook()OSTaskCreateHook()是一個(gè)允許擴(kuò)展μC/OSⅡ的功能的函數(shù),在用OSTaskCreate()或OSTaskCreateExt()建立任務(wù)的時(shí)候會(huì)被調(diào)用。當(dāng)OSTaskCreateHook()被調(diào)用時(shí),能夠收到指向已建立的任務(wù)的OS_TCB 的指針,可用于訪問任務(wù)的附加數(shù)據(jù)(MMU 寄存器,浮點(diǎn)寄存器,以及調(diào)試的信息等)和其它所有結(jié)構(gòu)成員。在此移植過程中不需要具體的OSTaskCreateHook()函數(shù)代碼, 置0時(shí)。()OSTaskDelHook()在刪除任務(wù)時(shí)被調(diào)用。當(dāng)OSTaskDelHook()被調(diào)用時(shí),能夠收到指向正被刪除任務(wù)的OS_TCB的指針,可用來檢測(cè)TCB擴(kuò)展建立與否并進(jìn)行某些清楚操作。OSTaskDelHook()無返回值。在此移植過程中不需要具體的OSTaskDelHook()函數(shù)代碼, 置0時(shí)。 OSTaskSwHook()OSTaskSwHook()是一個(gè)與任務(wù)切換相關(guān)的函數(shù)。不論任務(wù)切換是通過OSCtxSw()還是OSIntCtxSw() 進(jìn)行的切換操作,都需要調(diào)用該函數(shù)。注意:在調(diào)用OSTaskSwHook()期間中斷是一直處于禁止?fàn)顟B(tài)。任務(wù)切換的時(shí)間越短,任務(wù)執(zhí)行效率越高,所以在任務(wù)切換的時(shí)候盡量將
點(diǎn)擊復(fù)制文檔內(nèi)容
數(shù)學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1