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

正文內(nèi)容

第5章嵌入式操作系統(tǒng)(編輯修改稿)

2025-08-16 12:32 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 式操作系統(tǒng)    (2) 雙向同步。兩個(gè)任務(wù)可以用兩個(gè)信號(hào)量同步它們的行為,如圖 56所示。這種同步稱為雙向同步 (bilateral rendezvous)。 雙向同步與單向同步類似,但是雙向同步不可能在任務(wù)與ISR之間實(shí)施,因?yàn)?ISR運(yùn)行時(shí)不可能等待一個(gè)信號(hào)量。 第 5章  嵌入式操作系統(tǒng) 圖 56 兩個(gè)任務(wù)用兩個(gè)信號(hào)量雙向同步 第 5章  嵌入式操作系統(tǒng) 操作系統(tǒng)的結(jié)構(gòu)和功能  為了滿足嵌入式應(yīng)用,嵌入式實(shí)時(shí)操作系統(tǒng)可以根據(jù)實(shí)際應(yīng)用環(huán)境的要求對(duì)內(nèi)核進(jìn)行裁剪和重新配置。一般的,實(shí)時(shí)操作系統(tǒng)總是由以下幾個(gè)重要部分組成:實(shí)時(shí)內(nèi)核、網(wǎng)絡(luò)組件、文件系統(tǒng)和圖形用戶接口等,其體系結(jié)構(gòu)如圖 57所示。 第 5章  嵌入式操作系統(tǒng) 圖 57 嵌入式實(shí)時(shí)操作系統(tǒng)的體系結(jié)構(gòu) 第 5章  嵌入式操作系統(tǒng) C/OSⅡ 概述      C/OSⅡ 讀作 “ micro C O S 2” , 即 “ 微控制器操作系統(tǒng)版本 2” 。  C/OSⅡ 是一個(gè)免費(fèi)的、源代碼公開(kāi)的嵌入式實(shí)時(shí)多任務(wù)內(nèi)核,是專門(mén)為嵌入式應(yīng)用設(shè)計(jì)的 RTOS, 提供了實(shí)時(shí)系統(tǒng)所需的基本功能?!?C/OSⅡ 的全部功能的核心部分代碼只占用 KB, 用戶還可以針對(duì)自己的實(shí)際系統(tǒng)對(duì)  C/OSⅡ進(jìn)行裁剪 (最少可達(dá) KB)?!?C/OSⅡ 只提供了諸如任務(wù)調(diào)度、任務(wù)管理、時(shí)間管理、內(nèi)存管理、中斷管理和任務(wù)間的同步與通信等實(shí)時(shí)內(nèi)核的基本功能,沒(méi)有提供輸入 /輸出管理、文件系統(tǒng)、圖形用戶接口及網(wǎng)絡(luò)組件之類的額外服務(wù)。但 是,由于 C/OSⅡ 的可移植性和開(kāi)源性,用戶可以根據(jù)實(shí)際應(yīng)用添加所需要的服務(wù)。 C/OSⅡ 簡(jiǎn)介 第 5章  嵌入式操作系統(tǒng)     C/OSⅡ 是在 PC機(jī)上開(kāi)發(fā)的, C編譯器使用的是 Borland C/C++ 。而 PC機(jī)是大家最熟悉的開(kāi)發(fā)環(huán)境,因此在 PC機(jī)上學(xué)習(xí)和使用   C/OSⅡ 非常方便。此外,  C/OSⅡ 作為一個(gè)源代碼公開(kāi)的嵌入式實(shí)時(shí)內(nèi)核,對(duì)開(kāi)發(fā)者學(xué)習(xí)和使用實(shí)時(shí)操作系統(tǒng)提供了極大的幫助。許多開(kāi)發(fā)者已成功地把   C/OSⅡ 應(yīng)用于自己的嵌入式系統(tǒng)中,從而使得   C/OSⅡ 獲得了快速的發(fā)展。從最早的   COS, 以及后來(lái)的   C/OS和   C/OSⅡ , 到現(xiàn)在的   C/OSⅡ , 該內(nèi)核已經(jīng)有十余年的發(fā)展歷史,在諸多領(lǐng)域得到了廣泛應(yīng)用。許多行業(yè)中   C/OSⅡ成功應(yīng)用的實(shí)例,也進(jìn)一步說(shuō)明了該內(nèi)核的實(shí)用性和可靠性。 第 5章  嵌入式操作系統(tǒng) C/OSⅡ 的特點(diǎn)    1.源代碼公開(kāi)    2.可移植性 (portable) 3.可固化 (ROMable) 4.可裁剪 (scalable) 5.占先式 (preemptive) 6.多任務(wù) 7.可確定性 8.任務(wù)棧 9.系統(tǒng)服務(wù) 10.中斷管理 11.穩(wěn)定性與可靠性 第 5章  嵌入式操作系統(tǒng)   C/OSⅡ 的軟件體系結(jié)構(gòu)      C/OSⅡ 的軟件體系結(jié)構(gòu)以及與硬件的關(guān)系如圖 58所示,其軟件體系主要包括以下 4個(gè)部分:    (1) 應(yīng)用軟件層:在應(yīng)用程序中使用  C/OSⅡ 時(shí),用戶開(kāi)發(fā)設(shè)計(jì)的應(yīng)用代碼。   (2) 與應(yīng)用相關(guān)的配置代碼:與應(yīng)用軟件相關(guān)的、  C/OSⅡ 的配置代碼。包括兩個(gè)頭文件,這兩個(gè)頭文件分別定義了與應(yīng)用相關(guān)的控制參數(shù)和所有相關(guān)的頭文件。  第 5章  嵌入式操作系統(tǒng)     (3) 與處理器無(wú)關(guān)的核心代碼:包括與處理器無(wú)關(guān)的 10個(gè)源代碼文件和 1個(gè)頭文件。其中, 10個(gè)源代碼文件分別實(shí)現(xiàn)了 μ C/OSⅡ 內(nèi)核結(jié)構(gòu),即內(nèi)核管理、事件管理、消息郵箱管理、內(nèi)存管理、互斥型信號(hào)量管理、消息隊(duì)列管理、信號(hào)量管理、任務(wù)管理、定時(shí)管理和內(nèi)核管理?! ?(4) 與處理器相關(guān)的設(shè)置代碼:與處理器相關(guān)的源代碼,包括 1個(gè)頭文件、 1個(gè)匯編文件和一個(gè) C文件。在不同處理器上移植 μ C/OSⅡ 時(shí),需要根據(jù)處理器的類型對(duì)這部分代碼重新編寫(xiě)??梢栽?μ C/OSⅡ 的網(wǎng)站 C/OSⅡ .中查找移植范例,也可以閱讀處理器的移植代碼進(jìn)行編譯。 第 5章  嵌入式操作系統(tǒng) 圖 58 μ C/OSⅡ 軟件體系結(jié)構(gòu) 第 5章  嵌入式操作系統(tǒng) μ C/OSⅡ 內(nèi)核結(jié)構(gòu) 臨界段  代碼的臨界段 μ critical sections)是指處理時(shí)不可分割的代碼。一旦這部分代碼開(kāi)始執(zhí)行,就不允許任何中斷進(jìn)入。與其他內(nèi)核一樣, μ C/OSⅡ 為了處理臨界段代碼,也需要關(guān)中斷,處理完畢后,再開(kāi)中斷。關(guān)中斷能夠使 μ C/OSⅡ 避免有其他任務(wù)或中斷服務(wù)同時(shí)進(jìn)入臨界段代碼。但是,關(guān)中斷的時(shí)間會(huì)影響用戶系統(tǒng)對(duì)實(shí)時(shí)事件的響應(yīng)特性,它是實(shí)時(shí)內(nèi)核開(kāi)發(fā)商提供的最重要的指標(biāo)之一。 μ C/OSⅡ 努力使關(guān)中斷時(shí)間降至最短,但在具體使用 μ C/OSⅡ 時(shí),關(guān)中斷的時(shí)間很大程度上取決于微處理器的結(jié)構(gòu)以及編譯器所生成的代碼質(zhì)量。 第 5章  嵌入式操作系統(tǒng)   微處理器一般都具有關(guān)中斷 /開(kāi)中斷指令,用戶使用的 C語(yǔ)言編譯器必須具有能夠在 C中直接實(shí)現(xiàn)關(guān)中斷 /開(kāi)中斷操作的機(jī)制。有些 C編譯器允許在用戶的 C源代碼中插入?yún)R編語(yǔ)言的語(yǔ)句,即通過(guò)插入微處理器指令來(lái)實(shí)現(xiàn)關(guān)中斷 /開(kāi)中斷的操作;而有些編譯器把從 C語(yǔ)言中關(guān)中斷 /開(kāi)中斷的操作放在語(yǔ)言擴(kuò)展部分,從 C語(yǔ)言中直接關(guān)中斷 /開(kāi)中斷。 μ C/OSⅡ 通過(guò)定義兩個(gè)宏 (macros)—— OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(), 來(lái)實(shí)現(xiàn)關(guān)中斷和開(kāi)中斷的操作,從而避免了不同 C編譯器廠商選擇不同的方法處理關(guān)中斷和開(kāi)中斷。 第 5章  嵌入式操作系統(tǒng)     OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()總是成對(duì)使用的,它們把臨界段代碼封裝起來(lái),實(shí)現(xiàn)對(duì)應(yīng)用程序中的臨界段代碼的保護(hù),具體用法如以下代碼所示。{...OS_ENTER_CRITICAL()/* μ C/OSII臨界段代碼 */OS_EXIT_CRITICAL() ;...} 第 5章  嵌入式操作系統(tǒng)   在使用 OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()時(shí)要特別小心,如果在調(diào)用一些如 OSTimeDel()之類的功能函數(shù)之前關(guān)中斷會(huì)導(dǎo)致應(yīng)用程序崩潰 (死機(jī) )。這是因?yàn)槿蝿?wù)被掛起一段時(shí)間直到掛起時(shí)間到,但由于中斷被關(guān)掉了,就無(wú)法得到時(shí)鐘節(jié)拍中斷服務(wù) (即一直處于掛起狀態(tài) )。顯然,所有的掛起類 (PEND)調(diào)用都有這類問(wèn)題。作為一條普遍使用的規(guī)則是:調(diào)用 μ C/OSII的功能函數(shù)時(shí),中斷應(yīng)當(dāng)總是開(kāi)著的。 第 5章  嵌入式操作系統(tǒng) 任務(wù)  在 μ C/OSII中,任務(wù)通常是一個(gè)無(wú)限的循環(huán)。任務(wù)就像其他 C函數(shù)一樣,有返回值類型和參數(shù),但它絕不返回任何數(shù)據(jù),因此返回參數(shù)類型必須定義成 void。 當(dāng)任務(wù)開(kāi)始執(zhí)行時(shí),會(huì)給用戶代碼傳遞一個(gè)形式參數(shù)。這個(gè)參數(shù)是一個(gè)指向 void的指針,以允許用戶應(yīng)用程序向該任務(wù)傳遞任何類型的參數(shù)。任務(wù)的函數(shù)結(jié)構(gòu)必須是以下兩種形式之一: 第 5章  嵌入式操作系統(tǒng) (1) 執(zhí)行無(wú)限循環(huán)的任務(wù)。void YourTask(void *pdata){任務(wù)初始化代碼;for( ; ; ) {用戶代碼;   /* 調(diào)用 μC/OSII 的功能函數(shù),如下列函數(shù)之一 */OSMboxPend() ;OSQPend() ;OSSemPend() ;  OSFlagPend() ;  OSTaskSuspend(OS_PRIO_SELF) ; 第 5章  嵌入式操作系統(tǒng) OSTimeDly() ;OSTimeDlyHMSM() ;...用戶代碼;}} 第 5章  嵌入式操作系統(tǒng) (2) 執(zhí)行一次后自我刪除的任務(wù)。void YourTask(void *pdata){用戶代碼;OSTaskDel(OS_PRIO_SELF) ;} 第 5章  嵌入式操作系統(tǒng) 對(duì)于后一種執(zhí)行自我刪除的任務(wù)來(lái)說(shuō),任務(wù)代碼并非真的刪除了,而是 μ C/OSⅡ 簡(jiǎn)單地不再理會(huì)這個(gè)任務(wù)了。這個(gè)任務(wù)的代碼也不會(huì)再運(yùn)行,而且也絕不會(huì)返回。    μ C/OSⅡ 可以管理多達(dá) 64個(gè)任務(wù),但建議保留 4個(gè)最高優(yōu)先級(jí)和 4個(gè)最低優(yōu)先級(jí)的任務(wù),供以后 μ C/OSⅡ 的版本使用。目前 μ C/OSⅡ 使用了 2個(gè)優(yōu)先級(jí)別: OS_LOWEST_PRIO   (空閑任務(wù) )和 OS_LOWEST_PRIO1(統(tǒng)計(jì)任務(wù) )。必須給每個(gè)任務(wù)賦予不同的優(yōu)先級(jí),優(yōu)先級(jí)號(hào)可以為 0~OS_LOWEST_PRIO2。 優(yōu)先級(jí)號(hào)越低,任務(wù)的優(yōu)先級(jí)越高。 第 5章  嵌入式操作系統(tǒng) 任務(wù)控制塊 OS_TCB   μ C/OSⅡ 對(duì)任務(wù)的管理是通過(guò)任務(wù)控制塊 TCB(Task Control Blocks)進(jìn)行的。任務(wù)控制塊是一個(gè)數(shù)據(jù)結(jié)構(gòu) (OS_TCB), 全部存放在 RAM中。在創(chuàng)建任務(wù)時(shí),該任務(wù)的 TCB被賦值;當(dāng)任務(wù)的 CPU使用權(quán)被剝奪時(shí), μ C/OSⅡ 用 OS_TCB來(lái)保存該任務(wù)的狀態(tài) (即當(dāng)前 CPU寄存器的值 );當(dāng)任務(wù)再次被調(diào)度,重新得到 CPU使用權(quán)時(shí),能夠從任務(wù)控制塊中恢復(fù)該任務(wù)的執(zhí)行狀態(tài),確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)繼續(xù)執(zhí)行。OS_TCB的結(jié)構(gòu)如下所示: 第 5章  嵌入式操作系統(tǒng) typedef struct os_tcb { OS_STK *OSTCBStkPtr。 /* 指向當(dāng)前任務(wù)堆棧棧頂?shù)闹羔? */if OS_TASK_CREAT_EXT_EN /* OS_TASK_CREAT_EXT_EN為 1時(shí)下列數(shù)據(jù)有效 */void *OSTCBExtPtr。 /* 指向用戶定義的任務(wù)控制塊擴(kuò)展 */OS_STK *OSTCBStkBottom。/* 指向任務(wù)堆棧棧底的指針 */INT32U OSTCBStkSize。/* 堆棧中可容納的指針元數(shù)目 */INT16U OSTCBOpt。 /* 指向任務(wù)堆棧棧底的指針 */   INT16U OSTCBId。 /* 存儲(chǔ)任務(wù)的識(shí)別碼 */endif struct os_tcb *OSTCBNext。 /* 指向任務(wù) OS_TCB雙向鏈表中后一個(gè)元素 */ struct os_tcb *OSTCBPrev。 /* 指向任務(wù) OS_TCB雙向鏈表中前一個(gè)元素 */ 第 5章  嵌入式操作系統(tǒng) if ((OS_Q__EN0)amp。amp。(OS_MBOX_QS0))||(OS_MBOX_EN0)||(OS_SEM_EN0)||(OS_MUTEX_EN0) OS_EVENT *OSTCBEventPtr。 /* 指向事件控制塊的指針 */endifif (OS_Q__EN0)amp。amp。(OS_MBOX_QS0)||(OS_MBOX_EN0) void *OSTCBMsg。 /* 指向傳遞給任務(wù)的消息的指針 */endifif OS_TASK_DEL_EN0 OS_FLAG_NODE *OSTCBFlagNode。/* 指向事件標(biāo)志節(jié)點(diǎn)的指針 */endif 第 5章  嵌入式操作系統(tǒng) INT16U OSTCBDly。 /* 用于設(shè)置任務(wù)延時(shí)或等待的最多時(shí)鐘節(jié)拍數(shù) */INT8U OSTCBStat。 /* 任務(wù)的狀態(tài)字 */INT8U OSTCBPrio。 /* 任務(wù)的優(yōu)先級(jí) */INT8U OSTCBX, OSTCBY, OSTCBBitX, OSTCBBitY。/*加速任務(wù)進(jìn)入就緒態(tài)的過(guò)程 */} OS_TCB 第 5章  嵌入式操作系統(tǒng) 任務(wù)調(diào)度   μ C/OSⅡ 是占先式實(shí)時(shí)內(nèi)核,優(yōu)先級(jí)最高的任務(wù)一旦進(jìn)入就緒態(tài),立即擁有 CPU的控制權(quán)并開(kāi)始運(yùn)行。 μ C/OSⅡ 的調(diào)度器 (scheduler)就是用來(lái)查找準(zhǔn)備就緒的優(yōu)先級(jí)最高的任務(wù)并進(jìn)行任務(wù)切換。任務(wù)級(jí)的調(diào)度是由 OSSched()函數(shù)完成的,中斷級(jí)的調(diào)度是由 OSIntExt()函數(shù)完成的?! ≡谶M(jìn)行 μ C/OSⅡ 任務(wù)調(diào)度 (task scheduling)時(shí),首先調(diào)用OSSched()函數(shù),它先判斷要進(jìn)行任務(wù)切換的條件,如果條件允許進(jìn)行任務(wù)調(diào)度,則調(diào)用 OS_TASK_SW()。 OS_TASK_SW()是宏調(diào)用,用來(lái)實(shí)現(xiàn)任務(wù)切換,它先將當(dāng)前任務(wù)的 CPU寄存器的值保存到該任務(wù)的堆棧中,然后獲得最高優(yōu)先級(jí)任務(wù)的堆棧指針,并從中恢復(fù)該任務(wù)的 CPU寄存器的值,使之繼續(xù)執(zhí)行,這時(shí)就完成了一次任務(wù)切換。 第 5章  嵌入式操作系統(tǒng) 任務(wù)管理   μ C/OSⅡ 提供大量的 API函數(shù)實(shí)現(xiàn)對(duì)任務(wù)的管理,圖 59所示是 μ C/OSⅡ 控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖。 第 5章  嵌入式操作系統(tǒng) 圖 59 任務(wù)的狀態(tài)轉(zhuǎn)換 第 5章  嵌入式操作系統(tǒng)    1.建立任務(wù) (OSTaskCreat()和 OSTaskCreatExt())  
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1