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

正文內(nèi)容

畢業(yè)論文-ucos-ii到arm的移植【最終版-資料下載頁(yè)

2025-06-03 20:09本頁(yè)面
  

【正文】 BEventPtr = (OS_EVENT *)0。 endif if OS_MBOX_EN || (OS_Q_EN amp。amp。 (OS_MAX_QS = 2)) ptcbOSTCBMsg = (void *)0。 endif OS_ENTER_CRITICAL()。 (4) OSTCBPrioTbl[prio] = ptcb。 (5) ptcbOSTCBNext = OSTCBList。 ptcbOSTCBPrev = (OS_TCB *)0。 if (OSTCBList != (OS_TCB *)0) { OSTCBListOSTCBPrev = ptcb。 } OSTCBList = ptcb。 OSRdyGrp |= ptcbOSTCBBitY。 (6) OSRdyTbl[ptcbOSTCBY] |= ptcbOSTCBBitX。 OS_EXIT_CRITICAL()。 return (OS_NO_ERR)。 (7) } else { OS_EXIT_CRITICAL()。 return (OS_NO_MORE_TCB)。 } } 當(dāng) OSTCBInit()需要將 OS_TCB 插入到已建立任務(wù)的 OS_TCB 的雙向鏈表中時(shí) [32(5)],它就禁止中斷 [32(4)]。該雙向鏈表開(kāi)始于 OSTCBList,洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 23 而一個(gè)新任務(wù)的 OS_TCB 常常被插入到鏈表的表頭。最后,該任務(wù)處于就緒狀態(tài) [32(6)],并且 OSTCBInit()向它的調(diào)用者 [OSTaskCreate()]返回一個(gè)代碼表明 OS_TCB 已經(jīng)被分配和初始化了 [32(7)]。 現(xiàn)在,我可以繼續(xù)討論 OSTaskCreate()(程序清單 31)函數(shù)了。從OSTCBInit()返回后, OSTaskCreate()要檢驗(yàn)返回代碼 [31(7)],如果成功,就增加 OSTaskCtr[31(8)], OSTaskCtr 用于保存產(chǎn)生的任務(wù)數(shù)目。如果OSTCBInit()返回失敗,就置 OSTCBPrioTbl[prio]的入口為 0[31(12)]以放棄該任務(wù)的優(yōu)先級(jí)。然后, OSTaskCreate()調(diào)用 OSTaskCreateHook()[31(9)],OSTaskCreateHook()是用戶(hù)自己定義的函數(shù),用來(lái)擴(kuò)展 OSTaskCreate()的功能。例如,用戶(hù)可以通過(guò) OSTaskCreateHook()函數(shù)來(lái)初始化和存儲(chǔ)浮點(diǎn)寄存器、 MMU 寄存器的內(nèi)容,或者其它與任務(wù)相關(guān)的內(nèi)容。一般情況下,用 戶(hù) 可 以 在 內(nèi) 存 中 存 儲(chǔ) 一 些 針 對(duì) 用 戶(hù) 的 應(yīng) 用 程 序 的 附 加 信 息 。OSTaskCreateHook() 既 可 以 在 中 定 義 ( 如果OS_CPU_HOOKS_EN 置 1),也可以在其它地方定義。注意, OSTaskCreate()在 調(diào) 用 OSTaskCreateHook() 時(shí) , 中 斷 是 關(guān) 掉 的 , 所 以 用 戶(hù) 應(yīng) 該 使OSTaskCreateHook()函數(shù)中的代碼盡量簡(jiǎn)化,因?yàn)檫@將直接影響中斷的響應(yīng)時(shí)間。 OSTaskCreateHook()在被調(diào)用時(shí)會(huì)收到指向任務(wù)被建立時(shí)的OS_TCB 的指針。這意味著該函數(shù)可以訪(fǎng)問(wèn) OS_TCB 數(shù)據(jù)結(jié)構(gòu)中的所有成員。 如果 OSTaskCreate() 函數(shù)是在某個(gè) 任務(wù)的執(zhí) 行過(guò)程中 被調(diào)用 ( 即OSRunning 置為 True[31(10)]),則任務(wù)調(diào)度函數(shù)會(huì)被調(diào)用 [31(11)]來(lái)判斷是否新建立的任務(wù)比原來(lái)的任務(wù)有更高的優(yōu)先級(jí)。如果新任務(wù)的優(yōu)先級(jí)更高,內(nèi)核會(huì)進(jìn)行一次從舊任務(wù)到新任務(wù)的任務(wù)切換。如果在多任務(wù)調(diào)度開(kāi)始之前 (即用戶(hù)還沒(méi)有調(diào)用 OSStart()),新任務(wù)就已經(jīng)建立了 ,則任務(wù)調(diào)度函數(shù)不會(huì)被調(diào)用。 uC/OSII 事件管理 181。C/OSII 通過(guò) 中定義的 OS_EVENT 數(shù)據(jù)結(jié)構(gòu)來(lái)維護(hù)一個(gè)事件控制塊的所有信息,也就是本章開(kāi)篇講到的事件控制塊 ECB。該結(jié)構(gòu)洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 24 中除了包含了事件本身的定義,如用于信號(hào)量的計(jì)數(shù)器,用于指向郵箱的指針,以及指向消息隊(duì)列的指針數(shù)組等,還定義了等待該事件的所有任務(wù)的列表。 ECB 的數(shù)據(jù)結(jié)構(gòu)代碼如下所示 : typedef struct { void *OSEventPtr。 /*指向消息或者消息隊(duì)列的指針 */ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]。/*等待任務(wù)列表 */ INT16U OSEventCnt。 /*計(jì)數(shù)器 (當(dāng)事件是信號(hào)量時(shí) )*/ INT8U OSEventType。 /*事件類(lèi)型 */ INT8U OSEventGrp。 /*等待任務(wù)所在的組 */ } OS_EVENT。 OSEventPtr 指針 ,只有在所定義的事件是郵箱或者消息隊(duì)列時(shí)才使用。當(dāng)所定義的事件是郵箱時(shí),它指向一個(gè)消息,而當(dāng)所定義的事件是消息隊(duì)列時(shí),它指向一個(gè)數(shù)據(jù)結(jié)構(gòu)。 OSEventTbl[] 和 OSEventGrp 很 像 前 面 講 到 的 OSRdyTbl[] 和OSRdyGrp,只不過(guò)前兩者包含的是等待某事件的任務(wù),而后兩者包含的是系統(tǒng)中處于就緒狀態(tài)的任務(wù)。 OSEventCnt 當(dāng)事件是一個(gè)信號(hào)量時(shí), OSEventCnt 是用于信號(hào)量的計(jì)數(shù)器。 OSEventType 定 義 了 事 件 的 具 體 類(lèi) 型 。 它 可 以 是 信 號(hào) 量( OS_EVENT_SEM)、郵箱( OS_EVENT_TYPE_MBOX )或消息隊(duì) 列( OS_EVENT_TYPE_Q)中的一種。用戶(hù)要根據(jù)該域的具體值來(lái)調(diào)用相應(yīng)的系統(tǒng)函數(shù),以保證對(duì)其進(jìn)行的操作的正確性。 每個(gè)等待事件發(fā)生的任務(wù)都被加入到該事件事 件控制塊中的等待任務(wù)列表中,該列表包括 OSEventGrp 和 OSEventTbl[]兩個(gè)域。變量前面的 [.]說(shuō)明該變量是數(shù)據(jù)結(jié)構(gòu)的一個(gè)域。在這里,所有的任務(wù)的優(yōu)先級(jí)被分成 8組(每組 8 個(gè)優(yōu)先級(jí)),分別對(duì)應(yīng) OSEventGrp 中的 8 位。當(dāng)某組中有任務(wù)處于等待該事件的狀態(tài)時(shí), OSEventGrp 中對(duì)應(yīng)的位就被置位。相應(yīng)地,該任務(wù)在 .OSEventTbl[]中的對(duì)應(yīng)位也被置位。 OSEventTbl[]數(shù)組的大小由系統(tǒng)中任務(wù)的最低優(yōu)先級(jí)決定 , 這個(gè)值由 中的 OS_LOWEST_PRIO常數(shù)定義。這樣,在 任務(wù)優(yōu)先級(jí)比較少的情況下,減少 181。C/OSII 對(duì)系統(tǒng)洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 25 RAM 的占用量。 當(dāng)一個(gè)事件發(fā)生后,該事件的等待事件列表中優(yōu)先級(jí)最高的任務(wù),也即在 .OSEventTbl[]中,所有被置 1 的位中,優(yōu)先級(jí)代碼最小的任務(wù)得到該事件。圖 32 給出了 .OSEventGrp 和 .OSEventTbl[]之間的對(duì)應(yīng)關(guān)系。該關(guān)系可以描述為: 當(dāng) .OSEventTbl[0]中的任何一位為 1 時(shí) , OSEventGrp 中的第 0 位為 1。 當(dāng) .OSEventTbl[1]中的任何一位為 1 時(shí) , OSEventGrp 中的第 1 位為 1。 當(dāng) .OSEventTbl[2]中的任何一位為 1 時(shí) , OSEventGrp 中的第 2 位為 1。 當(dāng) .OSEventTbl[3]中的任何一位為 1 時(shí) , OSEventGrp 中的第 3 位為 1。 當(dāng) .OSEventTbl[4]中的任何一位為 1 時(shí) , OSEventGrp 中的第 4 位為 1。 當(dāng) .OSEventTbl[5]中的任何一位為 1 時(shí) , OSEventGrp 中的第 5 位為 1。 當(dāng) .OSEventTbl[6]中的任何一位為 1 時(shí) , OSEventGrp 中的第 6 位為 1。 當(dāng) .OSEventTbl[7]中的任何一位為 1 時(shí) , OSEventGrp 中的第 7 位為 1。 事件中 的任務(wù)等待列表如圖 32 所示。 76 12345 076 12345 01 51 4 91 01 11 21 3 82 32 2 1 71 81 92 02 1 1 63 13 0 2 52 62 72 82 9 2 43 93 8 3 33 43 53 63 7 3 24 74 6 4 14 24 34 44 5 4 05 55 4 4 95 05 15 25 3 4 86 36 2 5 75 85 96 06 1 5 600 XXYYY X[ 0 ][ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ]任 務(wù) 的 優(yōu) 先 級(jí). O S E v e n t T b l [ O S _ L O W E S T _ P R I O / 8 + 1 ] 圖 32 事件中的任務(wù)等待列表 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 26 181。C/OSII 使 用 四 個(gè) 函 數(shù) 來(lái) 實(shí) 現(xiàn) 控 制 事 件 的 工 作 , 它 們 是 :OSEventWaitListInit(), OSEventTaskRdy(), OSEventWait()和 OSEventTO()。 函數(shù) OSEventWaitListInit()對(duì)事件控制塊中的等待任務(wù)列表進(jìn)行初始化。該函數(shù)初始化一個(gè)空的等待任務(wù)列表,其中沒(méi)有任何任務(wù)。該函數(shù)的調(diào)用參數(shù)只有一個(gè),就是指向需要初始化的事件控制塊的指針 pevent。 函數(shù) OSEventTaskRdy()在當(dāng)發(fā)生了某個(gè)事件,該事件等待任務(wù)列表中的最高優(yōu)先級(jí)任務(wù)( Highest Priority Task – HPT)要置于就緒態(tài)時(shí),該事件對(duì)應(yīng)的 OSSemPost(), OSMboxPost(), OSQPost(),和 OSQPostFront()函數(shù)調(diào)用 OSEventTaskRdy()實(shí)現(xiàn)該操作。換句話(huà)說(shuō),該函數(shù)從等待任務(wù)隊(duì)列中刪除 HPT 任務(wù)( Highest Priority Task),并把該任務(wù)置于就緒態(tài)。 OSEventTaskWait()在當(dāng)某個(gè)任務(wù)要等待一個(gè)事件的發(fā)生時(shí),相應(yīng)事件的 OSSemPend(), OSMboxPend()或者 OSQPend()函數(shù)會(huì)調(diào)用該函數(shù)將當(dāng)前任務(wù)從就緒任務(wù)表中刪除,并放到相應(yīng)事件的事件控制塊的等待任務(wù)表中。 OSEventTO()在當(dāng)在預(yù)先指定的時(shí)間內(nèi)任務(wù)等待的事件沒(méi)有發(fā)生時(shí),OSTimeTick()函數(shù)會(huì)因?yàn)榈却瑫r(shí)而將任務(wù)的狀態(tài)置為就緒。在這種情況下,事件的 OSSemPend(), OSMboxPend()或者 OSQPend()函數(shù)會(huì)調(diào)用OSEventTO()來(lái)完成這項(xiàng)工作。 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)論文 27 第 4 章 移植的硬件平臺(tái) 本章 概要 談到 μC/OSII 的移植,就牽扯到 這樣兩個(gè)問(wèn)題: (1) 我們要把 μC/OSII操作系統(tǒng)移植到哪個(gè)嵌入式系統(tǒng)上,它為操作系統(tǒng)的運(yùn)行提供了哪些可用的資源。 (2) 這個(gè)系統(tǒng)的硬件資源能不能讓 μC/OSII 全部功能得到很好的發(fā)揮。為了弄清以上兩個(gè)問(wèn)題。下面我們就以上兩個(gè)問(wèn)題進(jìn)行展開(kāi)討論對(duì)硬件平臺(tái)移植的可行性進(jìn)行簡(jiǎn)要分析。 ARM7 內(nèi)核特點(diǎn) ARM 內(nèi)核與 CPSR 談到操作系統(tǒng)的移植,它是和硬件系統(tǒng)底層在打交道,所以我們先要有移植對(duì)象(硬件平臺(tái))的一些知識(shí)。首先我們借助下圖分析一下我們用到的 ARM7 處理器內(nèi)核的下特點(diǎn): 圖 41 微處理器邏輯結(jié)構(gòu) 上圖是一個(gè) ARM7 的 邏輯結(jié)構(gòu)圖,圖中將外設(shè)、處理器等等全部掛在一個(gè) ARM7 內(nèi)部 總線(xiàn)上,從邏輯上看, ARM7 的 處理器 系統(tǒng),包括如圖41 所示幾個(gè)部分 組成,下面就以它們的主要功能和它們?cè)谝浦驳闹匾约白⒁馐马?xiàng)作簡(jiǎn)要的介紹 : 寄存器 SFR 寄存器 設(shè)備寄存器 RAM ROM 處理器 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)論文 28 1. 處理器:處理器是核心運(yùn)算模塊,可以工作在多種模式、狀態(tài)下。寄存器 CPSR 標(biāo)記處理器的當(dāng)前狀態(tài)、模式值。 對(duì)于 ARM7 的處理器而言,其采用 馮 諾伊曼 的 結(jié)構(gòu) 設(shè)計(jì)的,程序運(yùn)行支持 三級(jí)流水線(xiàn) 作業(yè)。 ARM7 的三級(jí)流水 是程序 設(shè)計(jì)應(yīng)該考慮到的問(wèn)題,在移植過(guò)程中我們尤其應(yīng)該引起注意,因?yàn)樗?PC 指針地址和程序執(zhí)行地址是不同的,這個(gè)時(shí)候 PC 指針總是指向 PC 加上當(dāng)前執(zhí)行地址的下兩條地址的位置。所以我們?cè)谝浦仓行薷?PC 指針時(shí)一定要小心操作,否則程序很可能并不會(huì)正確的運(yùn)行,造成移植工作的失敗。 2. 寄存器:寄存器通常包括最重要的保存當(dāng)前
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1