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

正文內(nèi)容

嵌入式復習總結[五篇](編輯修改稿)

2024-11-19 01:33 本頁面
 

【文章內(nèi)容簡介】 息隊列:消息隊列用于給任務發(fā)消息。消息隊列實際上是郵箱陣列。通常,先進入消息隊列的消息先傳給任務,也就是說,任務先得到的是最先進入消息隊列的消息,即先進先出原則(FIFO)。然而μC/OSⅡ也允許使用后進先出方式(LIFO)。內(nèi)核提供的消息隊列服務如下:消息隊列初始化。隊列初始化時總是清為空;放一則消息到隊列中去(Post);等待一則消息的到來(Pend);如果隊列中有消息則任務可以得到消息,但如果此時隊列為空,內(nèi)核并不將該任務掛起(Accept)。如果有消息,則消息從隊列中取走。沒有消息則用特別的返回代碼通知調(diào)用者,隊列中沒有消息。任務的組成:代碼、TCB、私有堆棧。一個任務通常是一個無限的循環(huán),絕不會返回的,但可通過調(diào)用函數(shù)自我刪除,也可建立新任務。OS的內(nèi)核原理:(1)任務狀態(tài)圖(任務狀態(tài)的切換過程):睡眠態(tài)(DORMANT)指任務駐留在程序空間之中,還沒有交給μC/OSⅡ管理,把任務交給μC/OSⅡ是通過調(diào)用下述兩個函數(shù)之一:OSTaskCreate()或OSTaskCreateExt()。當任務一旦建立,這個任務就進入就緒態(tài)準備運行。任務的建立可以是在多任務運行開始之前,也可以是動態(tài)地被一個運行著的任務建立。如果一個任務是被另一個任務建立的,而這個任務的優(yōu)先級高于建立它的那個任務,則這個剛剛建立的任務將立即得到CPU的控制權。一個任務可以通過調(diào)用OSTaskDel()返回到睡眠態(tài),或通過調(diào)用該函數(shù)讓另一個任務進入睡眠態(tài)。調(diào)用OSStart()可以啟動多任務。OSStart()函數(shù)運行進入就緒態(tài)的優(yōu)先級最高的任務。就緒的任務只有當所有優(yōu)先級高于這個任務的任務轉(zhuǎn)為等待狀態(tài),或者是被刪除了,才能進入運行態(tài)。正在運行的任務可以通過調(diào)用兩個函數(shù)之一將自身延遲一段時間,這兩個函數(shù)是OSTimeDly()或OSTimeDlyHMSM()。這個任務于是進入等待狀態(tài),等待這段時間過去,下一個優(yōu)先級最高的、并進入了就緒態(tài)的任務立刻被賦予了CPU的控制權。等待的時間過去以后,系統(tǒng)服務函數(shù)OSTimeTick()使延遲了的任務進入就緒態(tài)。正在運行的任務期待某一事件的發(fā)生時也要等待,手段是調(diào)用以下3個函數(shù)之一:OSSemPend(),OSMboxPend(),或OSQPend()。調(diào)用后任務進入了等待狀態(tài)(WAITING)。當任務因等待事件被掛起(Pend),下一個優(yōu)先級最高的任務立即得到了CPU的控制權。當事件發(fā)生了,被掛起的任務進入就緒態(tài)。事件發(fā)生的報告可能來自另一個任務,也可能來自中斷服務子程序。正在運行的任務是可以被中斷的,除非該任務將中斷關了,或者μC/OSⅡ?qū)⒅袛嚓P了。被中斷了的任務就進入了中斷服務態(tài)(ISR)。響應中斷時,正在執(zhí)行的任務被掛起,中斷服務子程序控制了CPU的使用權。中斷服務子程序可能會報告一個或多個事件的發(fā)生,而使一個或多個任務進入就緒態(tài)。在這種情況下,從中斷服務子程序返回之前,μC/OSⅡ要判定,被中斷的任務是否還是就緒態(tài)任務中優(yōu)先級最高的。如果中斷服務子程序使一個優(yōu)先級更高的任務進入了就緒態(tài),則新進入就緒態(tài)的這個優(yōu)先級更高的任務將得以運行,否則原來被中斷了的任務才能繼續(xù)運行。當所有的任務都在等待事件發(fā)生或等待延遲時間結束,μC/OSⅡ執(zhí)行空閑任務(idle task),執(zhí)行OSTaskIdle()函數(shù)。(2)局部結構——任務控制塊TCB:一旦任務建立了,任務控制塊OS_TCBs將被賦值。任務控制塊是一個數(shù)據(jù)結構,當任務的CPU使用權被剝奪時,μC/OSⅡ用它來保存該任務的狀態(tài)。當任務重新得到CPU使用權時,任務控制塊能確保任務從當時被中斷的那一點絲毫不差地繼續(xù)執(zhí)行。實際上,任務狀態(tài)的改變就是修改TCB的過程,OS_TCBs全部駐留在RAM中。任務建立的時候,OS_TCBs就被初始化了。應用程序中可以有的最多任務數(shù)(OS_MAX_TASKS)。這個最多任務數(shù)也是μC/OSⅡ分配給用戶程序的最多任務控制塊OS_TCBs的數(shù)目。將OS_MAX_TASKS的數(shù)目設置為用戶應用程序?qū)嶋H需要的任務數(shù)可以減小RAM的需求量。所有的任務控制塊OS_TCBs都是放在任務控制塊列表數(shù)組OSTCBTbl[]中的。μC/OSⅡ分配給系統(tǒng)任務OS_N_SYS_TASKS若干個任務控制塊,供其內(nèi)部使用。目前,一個用于空閑任務,另一個用于任務統(tǒng)計。在μC/OSⅡ初始化的時候,所有任務控制塊OS_TCBs被鏈接成單向空任務鏈表。當任務一旦建立,空任務控制塊指針OSTCBFreeList指向的任務控制塊便賦給了該任務,然后OSTCBFreeList的值調(diào)整為指向下鏈表中下一個空的任務控制塊。一旦任務被刪除,任務控制塊就還給空任務鏈表。(3)全局結構——就緒表:將任務放入就緒表程序清單: OSRdyGrp |= OSMapTbl[prio 3]。OSRdyTbl[prio 3] |= OSMapTbl[prio amp。 0x07]。任務優(yōu)先級的低三位用于確定任務在總就緒表OSRdyTbl[]中的所在位。接下去的三位用于確定是在OSRdyTbl[]數(shù)組的第幾個元素。OSMapTbl[]是在ROM中的屏蔽字,用于限制OSRdyTbl[]數(shù)組的元素下標在0到7之間。程序清單:從就緒表中刪除一個任務if((OSRdyTbl[prio 3] amp。= ~OSMapTbl[prio amp。 0x07])== 0)OSRdyGrp amp。= ~OSMapTbl[prio 3]。程序清單:找出進入就緒態(tài)的優(yōu)先級最高的任務y = OSUnMapTbl[OSRdyGrp]。x = OSUnMapTbl[OSRdyTbl[y]]。prio =(y if((OSLockNesting | OSIntNesting)== 0){ y = OSUnMapTbl[OSRdyGrp]。OSPrioHighRdy =(INT8U)((y OSTCBHighRdy= TCBPrioTbl[OSPrioHighRdy]。OSCtxSwCtr++。OS_TASK_SW()。} } OS_EXIT_CRITICAL()。}μC/OSⅡ任務調(diào)度所花的時間是常數(shù),與應用程序中建立的任務數(shù)無關??臻e任務(Idle Task):μC/OSⅡ總是建立一個空閑任務,這個任務在沒有其它任務進入就緒態(tài)時投入運行??臻e任務[OSTaskIdle()]永遠設為最低優(yōu)先級??臻e任務OSTaskIdle()什么也不做,只是在不停地給一個32位的名叫OSIdleCtr的計數(shù)器加1,統(tǒng)計任務使用這個計數(shù)器以確定現(xiàn)行應用軟件實際消耗的CPU時間??臻e任務不可能被應用軟件刪除,但可以通過時間中斷喚醒其他任務進入就緒態(tài)后,退出空閑任務。統(tǒng)計任務:提供運行時間統(tǒng)計的任務,叫做OSTaskStat(),如果用戶將系統(tǒng)定義常數(shù)OS_TASK_STAT_EN設為1,這個任務就會建立。一旦得到了允許,OSTaskStat()每秒鐘運行一次,計算當前的CPU利用率。注意:在調(diào)用系統(tǒng)啟動函數(shù)OSStart()之前,用戶初始代碼必須先建立一個任務,在這個任務中調(diào)用系統(tǒng)統(tǒng)計初始化函數(shù)OSStatInit(),然后再建立應用程序中的其它任務。μC/OSⅡ初始化:μC/OSⅡ要求用戶首先調(diào)用系統(tǒng)初始化函數(shù)OSIint()。OSIint()初始化μC/OSⅡ所有的變量和數(shù)據(jù)結構。OSInit()建立空閑任務idle task,統(tǒng)計任務OSTaskStat()并且讓其進入就緒態(tài)。以上兩個任務的任務控制塊(OS_TCBs)是用雙向鏈表鏈接在一起的。還初始化了4個空數(shù)據(jù)結構緩沖區(qū):空任務控制塊緩沖區(qū)、空事件表、空隊列表、空存儲區(qū)。先做好準備,目的是為了保證CPU的運行速度。注意:初始化后數(shù)據(jù)結構:包括就緒表、優(yōu)先級表、空閑任務和統(tǒng)計任務TCB、及其各自私有堆棧。μC/OSⅡ的啟動:程序清單初始化和啟動μC/OSⅡ: void main(void){ OSInit()。/* 初始化uC/OSII */..通過調(diào)用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個任務。..OSStart()。/* 開始多任務調(diào)度!OSStart()永遠不會返回 */}任務數(shù)據(jù)結構:void YourTask(void *pdata){ for(。){ /* 用戶代碼 */ 調(diào)用181。C/OSⅡ的服務例程之一: OSMboxPend()。OSQPend()。OSSemPend()。OSTaskDel(OS_PRIO_SELF)。OSTaskSuspend(OS_PRIO_SELF)。OSTimeDly()。OSTimeDlyHMSM()。/* 用戶代碼 */ } } 或void YourTask(void *pdata){ /* 用戶代碼 */ OSTaskDel(OS_PRIO_SELF)。}事件控制塊ECB:一個數(shù)據(jù)結構(類似TCB),包含了事件本身的定義,如用于信號量的計數(shù)器,用于指向郵箱的指針,以及指向消息隊列的指針數(shù)組等,還定義了等待該事件的所有任務的列表。分為OSEventGrp/OSEventTbl兩個變量。任務調(diào)度算法也和TCB相似。程序清單:將一個任務插入到事件的等待任務列表中 peventOSEventGrp |= OSMapTbl[prio 3]。peventOSEventTbl[prio 3] |= OSMapTbl[prio amp。 0x07]。其中,prio是任務的優(yōu)先級,pevent是指向事件控制塊的指針。該算法的原理:[]中的位置,[]中的字節(jié)索引。該算法中用到的查找表OSMapTbl[]一般在ROM中實現(xiàn)。(1)在181。C/OSII中,事件控制塊的總數(shù)由用戶所需要的信號量、郵箱和消息隊列的總數(shù)決定。在調(diào)用OSInit()時,所有事件控制塊被鏈接成一個單向鏈表——空閑事件控制塊鏈表。每當建立一個信號量、郵箱或者消息隊列時,就從該鏈表中取出一個空閑事件控制塊,并對它進行初始化。因為信號量、郵箱和消息隊列一旦建立就不能刪除,所以事件控制塊也不能放回到空閑事件控制塊鏈表中。(2)對于事件控制塊進行的一些通用操作包括:初始化一個事件控制塊;使一個任務進入就緒態(tài);使一個任務進入等待該事件的狀態(tài);因為等待超時而使一個任務進入就緒態(tài)。為了避免代碼重復和減短程代碼長度,181。C/OSII將上面的操作用4個系統(tǒng)函數(shù)實現(xiàn),它們是:OSEventWaitListInit(),OSEventTaskRdy(),OSEventWait()和OSEventTO()。181。C/OSII系統(tǒng)多任務的意義:多任務使事件簡單化,任務與任務之間的關系使松耦合而不是緊耦合,每個任務只要考慮當前事件,而不需考慮全局事件,全局事件由操作系統(tǒng)來考慮,利用操作系統(tǒng)的一些通訊機制,將多個任務聯(lián)系起來共同完成一個功能,同時采用多人機制,OS可以同時運行多個應用程序,提高了CPU的使用效率。1操作系統(tǒng)在嵌入式系統(tǒng)中的地位:操作系統(tǒng)在嵌入式系統(tǒng)中扮演管理者的角色,主要任務使完成多任務之間的調(diào)度和同步,同時也是上層應用軟件和底層硬件的接口,負責全部軟硬件資源的分配和回收、控制與協(xié)調(diào)等并發(fā)活動。同時嵌入式實時操作系統(tǒng)提高了系統(tǒng)的可靠性;提高了開發(fā)效率,縮短了開發(fā)周期,嵌入式RTOS充分發(fā)揮了32位CPU的多任務潛力。1文件系統(tǒng):(定義),管理文件的存儲、檢索、更新,提供安全可靠的共享和保護手段,并且方便用戶使用。功能:文件的構造、命名、存取、保護等。(2)基于NAND FLASH的嵌入式文件系統(tǒng):FLASH讀寫的特點:必須以Page為單位進行讀寫;寫之前必須先擦除原有內(nèi)容;擦除操作必須對Block進行,即一次至少擦除一個Block的內(nèi)容。針對這種情況,將Flash的一個Page定為1個扇區(qū),將其1個Block,32個扇區(qū)定為一個簇,這樣,簇的容量剛好為512*32=16K,滿足FAT16對簇大小的要求。(3)FLASH文件系統(tǒng)的要求:掉電安全、平均使用、高效垃圾回收、低空間消耗:指文件系統(tǒng)管理結構在FLASH存儲器上的空間消耗,該空間用于FS建立,而不能用于實際數(shù)據(jù)的存儲,可以提高有用數(shù)據(jù)的存儲空間。(4)FLASH文件系統(tǒng)的分類:集中管理文件系統(tǒng)、線性文件系統(tǒng)、日志文件系統(tǒng)。(5)幾種開源文件系統(tǒng):TFS(Tiny File System):線性結構的文件系統(tǒng),優(yōu)點:TFS提供了掉電安全機制和垃圾回收機制。需要額外的輔助空間,用于垃圾回收時的文件緩存和過程狀態(tài),如果出現(xiàn)終止,系統(tǒng)根據(jù)輔助空間的信息進行文件系統(tǒng)的恢復。缺點:文件的插入、剪切和個性需要較大的運行開銷,即使是很小的修改,也要求將整個文件重寫。JFFS:主要針對NOR型Flash存儲器設計,提供了掉電安全,平均使用等特性,是基于Linux,由于遵循GPL開放源代碼,易實現(xiàn)移植。日志文件系統(tǒng);提供了更好的崩潰、掉電安全保護;jffs2支持對flash的均勻磨損;在扇區(qū)級別上執(zhí)行閃存擦除/寫/讀操作功能較好;文件系統(tǒng)接近滿時,JFFS2 會大大放慢運行速度——垃圾收集。Nand上yaffs文件系統(tǒng)的優(yōu)勢:專門為Nand flash設計的日志文件系統(tǒng);jffs/jffs2不適合大容量的Nand flash;jffs的日志通過jffs_node建立在RAM中,占用RAM空間:對于128MB的Nand大概需要4MB的空間來維護節(jié)點;啟動的時候需要掃描日志節(jié)點,不適合大容量的Nand flash;FAT系統(tǒng)沒有日志。(6)NAND和NOR——性能比較:NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術。NOR的讀速度比NAND稍快一些;NAND的寫入速度比NOR快很多;NAND的擦除速度遠比NOR的快;大多數(shù)寫入操作需要先進行擦除操作;NAND的擦除單元更小,相應的擦除電路更少。接口差別:NOR flash帶有SRAM接口,線性尋址,可以很容易地存取其內(nèi)部的每一個字節(jié);NAND flash使用復用接口和控制IO多次尋址存取數(shù)據(jù);NAND讀和寫操作采用512字節(jié)的塊,這一點有點像硬盤管理此類操作易于取代硬盤等類似的塊設備。容量和成本:NAND flash生產(chǎn)過程更為簡單,成本低;常見的NOR flash為128KB~16MB,而NANDflash通常有8~128M
點擊復制文檔內(nèi)容
范文總結相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1