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

正文內(nèi)容

第5章嵌入式操作系統(tǒng)-在線瀏覽

2024-08-30 12:32本頁面
  

【正文】   (1) Delta OS: Delta OS是全中文的嵌入式實時操作系統(tǒng),提供強實時和嵌入式多任務(wù)的內(nèi)核。它適用于內(nèi)在要求較大、可靠性要求較高的嵌入式系統(tǒng)。同時,它還提供了一整套的嵌入式開發(fā)套件 LamdaTOOL。 第 5章  嵌入式操作系統(tǒng)     (2) Hopen OS: Hopen OS由一個體積很小的內(nèi)核以及一些可以根據(jù)需要自行定制的系統(tǒng)模塊組成?! ?(3) HBOS: HBOS系統(tǒng)是浙江大學(xué)自主研制開發(fā)的全中文實時操作系統(tǒng)。 HBOS系統(tǒng)可用于信息家電、智能設(shè)備和儀器儀表等領(lǐng)域開發(fā)應(yīng)用。 第 5章  嵌入式操作系統(tǒng) 操作系統(tǒng)的基本概念 多進程和多線程  許多嵌入式系統(tǒng)并不是單純地完成一種功能。這些不同的任務(wù)構(gòu)成了應(yīng)答機系統(tǒng)功能的各個部分,為了完成多個任務(wù)而組織程序結(jié)構(gòu)的需要,引入了進程的概念。進程是順序執(zhí)行的,而且 CPU一次只能執(zhí)行一個進程。通過改變 CPU中的程序計數(shù)器,使其指向新進程的代碼,同時將新進程的數(shù)據(jù)移入寄存器和主存中,就可以實現(xiàn)進程的切換?! ≡谇度胧较到y(tǒng)中,一個進程的常用形式是線程。線程普遍應(yīng)用于嵌入式系統(tǒng)中 (即任務(wù) ),這樣可以避免存儲管理單元的復(fù)雜,節(jié)約存儲管理單元的消耗。在實時應(yīng)用程序的設(shè)計過程中,要考慮如何將應(yīng)用功能合理地劃分為多個任務(wù),讓每個任務(wù)完成一定的功能,成為整個應(yīng)用的一部分。 第 5章  嵌入式操作系統(tǒng) 圖 52 多任務(wù)堆棧與 CPU寄存器 第 5章  嵌入式操作系統(tǒng)     一般的,每一個任務(wù)都是一個無限的循環(huán),可以處在以下五種狀態(tài)之一:    (1) 休眠態(tài) (Dormant): 是指任務(wù)駐留在內(nèi)存的程序空間中,并未被多任務(wù)內(nèi)核所調(diào)度。   (3) 運行態(tài) (Running): 是指任務(wù)獲得了 CPU的控制權(quán),正在運行中。  第 5章  嵌入式操作系統(tǒng)     (4) 掛起態(tài) (Pending): 也叫作等待事件態(tài) (waiting),是指任務(wù)在等待某一事件的發(fā)生 (如等待某外設(shè)的 I/O操作、等待定時脈沖的到來、等待超時信號的到來以結(jié)束目前的等待,等等 )?! ?(5) 被中斷態(tài) (Interrupt): 是指發(fā)生中斷時, CPU提供相應(yīng)的中斷服務(wù),原來正在運行的任務(wù)暫不能運行,而進入了被中斷狀態(tài)。當(dāng)多任務(wù)內(nèi)核決定運行另外的任務(wù)時,它保存正在運行的任務(wù)的當(dāng)前狀態(tài),即當(dāng)前 CPU寄存器中的全部內(nèi)容;內(nèi)核將這些內(nèi)容保存在該任務(wù)的當(dāng)前狀態(tài)保存區(qū),也就是該任務(wù)自己的棧區(qū)之中 (這個過程稱為 “ 入棧 ”) 。這樣,就完成了一次任務(wù)切換。任務(wù)切換所需要的時間取決于CPU有多少寄存器要入棧。內(nèi)核提供的基本服務(wù)是任務(wù)切換,通過提供必不可少的系統(tǒng)服務(wù),諸如信號量管理、郵箱、消息隊列及時間延時等,使得 CPU的利用更為有效。 第 5章  嵌入式操作系統(tǒng)   但是,內(nèi)核本身也增加了應(yīng)用程序的額外負荷,因為內(nèi)核提供的服務(wù)需要一定的執(zhí)行時間。在設(shè)計得較好的應(yīng)用系統(tǒng)中,內(nèi)核占用2%~ 5%的 CPU負荷。更主要的是,每個任務(wù)都要有自己的??臻g,這會占用相當(dāng)多的內(nèi)存 (由任務(wù)的數(shù)量決定 )。 第 5章  嵌入式操作系統(tǒng) 任務(wù)調(diào)度    1.非占先式內(nèi)核  非占先式內(nèi)核 (nonpreemptive kernel)中各個任務(wù)彼此合作,共享 CPU。中斷服務(wù)可使一個高優(yōu)先級的任務(wù)由掛起態(tài)變?yōu)榫途w態(tài),但中斷服務(wù)以后, CPU的使用權(quán)交回給原來被中斷了的任務(wù),直到該任務(wù)主動釋放 CPU的控制權(quán),一個新的高優(yōu)先級的任務(wù)才能運行。 第 5章  嵌入式操作系統(tǒng) 圖 53 非占先式內(nèi)核 第 5章  嵌入式操作系統(tǒng)   圖 53中,   1:任務(wù)在運行過程中被中斷?!?  3: ISR做事件處理,使一個更高優(yōu)先級的任務(wù)進入就緒態(tài)?! ?5:繼續(xù)執(zhí)行該任務(wù)?! ?7:看到有高優(yōu)先級的任務(wù)處于就緒態(tài),內(nèi)核做任務(wù)切換,高優(yōu)先級的任務(wù)才開始處理 ISR標志的事件?!?  (2) 可以使用不可重入函數(shù)?! ?(3) 共享數(shù)據(jù)方便。在占先式內(nèi)核中,最高優(yōu)先級的任務(wù)一旦就緒,便能得到 CPU的使用權(quán)。如果是中斷服務(wù)子程序使一個高優(yōu)先級的任務(wù)進入就緒態(tài),則當(dāng)中斷完成時,被中斷的任務(wù)被掛起,優(yōu)先級高的任務(wù)開始運行。 第 5章  嵌入式操作系統(tǒng) 圖 54 占先式內(nèi)核 第 5章  嵌入式操作系統(tǒng)   圖 54中, 1:任務(wù)在運行過程中被中斷?!?  3: ISR做事件處理,使一個更高優(yōu)先級的任務(wù)進入就緒態(tài)。    4:這個函數(shù)識別出有一個高優(yōu)先級的任務(wù) (更重要的任務(wù))進入就緒態(tài),內(nèi)核做任務(wù)切換?!?  6:內(nèi)核看到原來的低優(yōu)先級的任務(wù)要運行,進行另一次任務(wù)切換。 第 5章  嵌入式操作系統(tǒng) 任務(wù)間的通信與同步    在多任務(wù)的實時系統(tǒng)中,一項工作可能需要多個任務(wù)或多個任務(wù)與多個中斷處理程序共同完成。實時內(nèi)核提供了任務(wù)間的通信與同步機制以解決這個問題。 任務(wù)間的通信有兩個途徑:共享數(shù)據(jù)結(jié)構(gòu)和消息機制。共享數(shù)據(jù)結(jié)構(gòu)的類型可以是全局變量、指針、緩沖區(qū)等。否則,會導(dǎo)致競爭或?qū)?shù)據(jù)時效的破壞。實現(xiàn)對共享數(shù)據(jù)結(jié)構(gòu)操作的互斥常常采用以下方法:開 /關(guān)中斷、禁止任務(wù)切換以及信號量 (semaphore)機制等。開 /關(guān)中斷實現(xiàn)數(shù)據(jù)共享保護是指在進行共享數(shù)據(jù)結(jié)構(gòu)的訪問時先進行關(guān)中斷操作,在訪問完成后再開中斷。但是,如果關(guān)中斷的時間太長,則可能影響整個實時系統(tǒng)的中斷響應(yīng)時間和中斷延遲時間。禁止任務(wù)切換是指在進行共享數(shù)據(jù)的操作前,先禁止任務(wù)切換,操作完成后再允許任務(wù)切換。需要注意的是,盡管禁止任務(wù)切換,但任務(wù)進行共享數(shù)據(jù)操作時,中斷服務(wù)子程序此時仍然可以搶占 CPU的使用權(quán)。 第 5章  嵌入式操作系統(tǒng)    (3) 信號量。但是,信號量的使用應(yīng)該有所節(jié)制,不能讓所有的互斥處理都使用信號量機制實現(xiàn),因為信號量機制是有一定系統(tǒng)開銷的。只有涉及系統(tǒng)消耗比較大的共享數(shù)據(jù)操作時,才考慮使用信號量,因為如果此時使用開 /關(guān)中斷,就可能會影響系統(tǒng)的中斷響應(yīng)時間。消息通常是內(nèi)存空間的一個數(shù)據(jù)結(jié)構(gòu),通常是一個指針型變量。每個郵箱都有相應(yīng)的正在等待的任務(wù)列表。通常,內(nèi)核允許設(shè)定等待超時,如果等待時間已到仍沒有收到消息,任務(wù)就進入就緒態(tài)并返回等待超時的出錯信息。 第 5章  嵌入式操作系統(tǒng)     (C/OSII只支持基于優(yōu)先級的分配算法,內(nèi)核一般提供以下郵箱服務(wù):● 郵箱內(nèi)消息內(nèi)容的初始化;● 將消息放入郵箱 (POST);● 等待消息進入郵箱 (PEND);● 從郵箱中得到消息。消息隊列實際上是郵箱陣列,在消息隊列中允許存放多個消息。通常,內(nèi)核中提供的消息隊列服務(wù)包括:   ● 消息隊列初始化;   ● 放一則消息到隊列中去 (POST);   ● 等待一則消息的到來 (PEND);   ● 從隊列中等到消息。任務(wù)同步也常常使用信號量。任務(wù)的同步分為單向同步和多向同步。如圖 55所示,圖中用一面旗幟或稱作一個標志來表示信號量。這種類型的同步稱作單向同步 (unilateral rendezvous)。 第 5章  嵌入式操作系統(tǒng) 圖 55 用信號量使任務(wù)與中斷服務(wù) (或任務(wù) )單向同步 第 5章  嵌入式操作系統(tǒng)    (2) 雙向同步。這種同步稱為雙向同步 (bilateral rendezvous)。 第 5章  嵌入式操作系統(tǒng) 圖 56 兩個任務(wù)用兩個信號量雙向同步 第 5章  嵌入式操作系統(tǒng) 操作系統(tǒng)的結(jié)構(gòu)和功能  為了滿足嵌入式應(yīng)用,嵌入式實時操作系統(tǒng)可以根據(jù)實際應(yīng)用環(huán)境的要求對內(nèi)核進行裁剪和重新配置。 第 5章  嵌入式操作系統(tǒng) 圖 57 嵌入式實時操作系統(tǒng)的體系結(jié)構(gòu) 第 5章  嵌入式操作系統(tǒng) C/OSⅡ 概述      C/OSⅡ 讀作 “ micro C O S 2” , 即 “ 微控制器操作系統(tǒng)版本 2” 。  C/OSⅡ 的全部功能的核心部分代碼只占用 KB, 用戶還可以針對自己的實際系統(tǒng)對  C/OSⅡ進行裁剪 (最少可達 KB)。但 是,由于 C/OSⅡ 的可移植性和開源性,用戶可以根據(jù)實際應(yīng)用添加所需要的服務(wù)。而 PC機是大家最熟悉的開發(fā)環(huán)境,因此在 PC機上學(xué)習(xí)和使用   C/OSⅡ 非常方便。許多開發(fā)者已成功地把   C/OSⅡ 應(yīng)用于自己的嵌入式系統(tǒng)中,從而使得   C/OSⅡ 獲得了快速的發(fā)展。許多行業(yè)中   C/OSⅡ成功應(yīng)用的實例,也進一步說明了該內(nèi)核的實用性和可靠性?! ?(2) 與應(yīng)用相關(guān)的配置代碼:與應(yīng)用軟件相關(guān)的、  C/OSⅡ 的配置代碼。  第 5章  嵌入式操作系統(tǒng)     (3) 與處理器無關(guān)的核心代碼:包括與處理器無關(guān)的 10個源代碼文件和 1個頭文件?! ?(4) 與處理器相關(guān)的設(shè)置代碼:與處理器相關(guān)的源代碼,包括 1個頭文件、 1個匯編文件和一個 C文件??梢栽?μ C/OSⅡ 的網(wǎng)站 C/OSⅡ .中查找移植范例,也可以閱讀處理器的移植代碼進行編譯。一旦這部分代碼開始執(zhí)行,就不允許任何中斷進入。關(guān)中斷能夠使 μ C/OSⅡ 避免有其他任務(wù)或中斷服務(wù)同時進入臨界段代碼。 μ C/OSⅡ 努力使關(guān)中斷時間降至最短,但在具體使用 μ C/OSⅡ 時,關(guān)中斷的時間很大程度上取決于微處理器的結(jié)構(gòu)以及編譯器所生成的代碼質(zhì)量。有些 C編譯器允許在用戶的 C源代碼中插入?yún)R編語言的語句,即通過插入微處理器指令來實現(xiàn)關(guān)中斷 /開中斷的操作;而有些編譯器把從 C語言中關(guān)中斷 /開中斷的操作放在語言擴展部分,從 C語言中直接關(guān)中斷 /開中斷。 第 5章  嵌入式操作系統(tǒng)     OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()總是成對使用的,它們把臨界段代碼封裝起來,實現(xiàn)對應(yīng)用程序中的臨界段代碼的保護,具體用法如以下代碼所示。這是因為任務(wù)被掛起一段時間直到掛起時間到,但由于中斷被關(guān)掉了,就無法得到時鐘節(jié)拍中斷服務(wù) (即一直處于掛起狀態(tài) )。作為一條普遍使用的規(guī)則是:調(diào)用 μ C/OSII的功能函數(shù)時,中斷應(yīng)當(dāng)總是開著的。任務(wù)就像其他 C函數(shù)一樣,有返回值類型和參數(shù),但它絕不返回任何數(shù)據(jù),因此返回參數(shù)類型必須定義成 void。這個參數(shù)是一個指向 void的指針,以允許用戶應(yīng)用程序向該任務(wù)傳遞任何類型的參數(shù)。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ù)。這個任務(wù)的代碼也不會再運行,而且也絕不會返回。目前 μ C/OSⅡ 使用了 2個優(yōu)先級別: OS_LOWEST_PRIO   (空閑任務(wù) )和 OS_LOWEST_PRIO1(統(tǒng)計任務(wù) )。 優(yōu)先級號越低,任務(wù)的優(yōu)先級越高。任務(wù)控制塊是一個數(shù)據(jù)結(jié)構(gòu) (OS_TCB), 全部存放在 RAM中。OS_TCB的結(jié)構(gòu)如下所示: 第 5章  嵌入式操作系統(tǒng) typedef struct os_tcb { OS_STK *OSTCBStkPtr。 /* 指向用戶定義的任務(wù)控制塊擴展 */OS_STK *OSTCBStkBottom。/* 堆棧中可容納的指針元數(shù)目 */INT16U OSTCBOpt。 /* 存儲任務(wù)的識別碼 */endif struct os_tcb *OSTCBNext。 /* 指向任務(wù) OS_TCB雙向鏈表中前一個元素 */ 第 5章  嵌入式操作系統(tǒng) if ((OS_Q__EN0)amp。(OS_MBOX_QS0))||(OS_MBOX_EN0)||(OS_SEM_EN0)||(OS_MUTEX_EN0) OS_EVENT *OSTCBEventPtr。if (OS_Q__EN0)amp。(OS_MBOX_QS0)||(OS_MBOX_EN0) void *OSTCBMsg。if OS_TASK_DEL_EN0 OS_FLAG_NODE *OSTCBFlagNode。 /* 用于設(shè)置任務(wù)延時或等待的最多時鐘節(jié)拍數(shù) */INT8U OSTCBStat。 /* 任務(wù)的優(yōu)先級 */INT8U OSTCBX, OSTCBY, OSTCBBitX, OSTCBBitY。 μ C/OSⅡ 的調(diào)度器 (scheduler)就是用來查找準備就緒的優(yōu)先級最高的任務(wù)并進行任務(wù)切換?! ≡谶M行 μ C/OSⅡ 任務(wù)調(diào)度 (task scheduling)時,首先調(diào)用OSSched()函數(shù),它先判斷要進行任務(wù)切換的條件,如果條件允許進行任務(wù)調(diào)度,則調(diào)用 OS_TASK_SW()。 第 5章  嵌入式操作系統(tǒng) 任務(wù)管理   μ C/OSⅡ 提供大量的 API函數(shù)實現(xiàn)對任務(wù)的管理
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1