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

正文內(nèi)容

ucos移植性分析與應(yīng)用-wenkub

2023-07-10 23:42:53 本頁面
 

【正文】 14)。 uC/OSII的程序結(jié)構(gòu)uC/OSII是完全嵌入于應(yīng)用程序中的,以系統(tǒng)調(diào)用的形式向應(yīng)用程序提供服務(wù)。用戶的應(yīng)用程序可以從不同的內(nèi)存分區(qū)中得到不同大小的內(nèi)存塊。所有的同步對象都有相應(yīng)的創(chuàng)建、等待、所以要避免創(chuàng)建過多的同步對象以節(jié)約系統(tǒng)資源[7]。一個(gè)任務(wù)或者中斷服務(wù)子程序可以通過事件控制塊(ECB,Event ControlBlock)來向另外的任務(wù)發(fā)信號。延時(shí)的任務(wù)可以不等待延時(shí)期滿,而是通過其他任務(wù)取消延時(shí)來使自己處于就緒態(tài),可以通過調(diào)用OSTimeDlyResume()和指定要恢復(fù)的任務(wù)的優(yōu)先級來完成。實(shí)現(xiàn)這個(gè)系統(tǒng)服務(wù)的函數(shù)是OSTimeDly()。系統(tǒng)通過兩種方法進(jìn)行任務(wù)調(diào)度:一是時(shí)鐘節(jié)拍或其它硬件中斷到來,系統(tǒng)會(huì)調(diào)用函數(shù)OSIntCtxSw()執(zhí)行切換功能;二是任務(wù)主動(dòng)進(jìn)入掛起或等待狀態(tài),這時(shí)系統(tǒng)通過發(fā)軟中斷命令或依靠處理器執(zhí)行陷阱指令來完成任務(wù)切換,中斷服務(wù)例程或陷阱處理程序的向量地址必須指向函數(shù)OSCtxSw()[6]。uC/OSII提供的任務(wù)管理的各種函數(shù)調(diào)用,包括:創(chuàng)建任務(wù):OSTaskCreate()或者是OSTaskCreateExt();刪除任務(wù):OSTaskDel();改變?nèi)蝿?wù)的優(yōu)先級:OSTaskChangePrio();掛起任務(wù):OSTaskSuspend();恢復(fù)任務(wù):OSTaskResunte();獲得有關(guān)任務(wù)的信息:OSTaskQuery();系統(tǒng)初始化時(shí)會(huì)自動(dòng)產(chǎn)生兩個(gè)任務(wù):一個(gè)是空閑任務(wù)OSTaskIdle(),它的優(yōu)先級最低,為OS_LOWEST_PRIO;另一個(gè)是統(tǒng)計(jì)任務(wù)OSTaskStat(),它的優(yōu)先級為OS_LOWEST_PRIO1,該任務(wù)每秒運(yùn)行一次,負(fù)責(zé)計(jì)算當(dāng)前CPU的利用率。(4)穩(wěn)定性和可靠性高,抗干擾能力強(qiáng)[5]。3 實(shí)時(shí)操作系統(tǒng)uC/OSII的分析實(shí)時(shí)操作系統(tǒng)uC/OS II有如下特點(diǎn):(1)公開源代碼,且源代碼中有詳細(xì)的注釋,源代碼清晰易讀且結(jié)構(gòu)協(xié)調(diào)、組織有序,對實(shí)時(shí)操作系統(tǒng)的基本原理做了非常詳細(xì)的解釋,實(shí)時(shí)內(nèi)核讓人一目了然,簡單易懂。近幾年來,以太網(wǎng)/互聯(lián)網(wǎng)等網(wǎng)絡(luò)架構(gòu)己逐漸在自動(dòng)化產(chǎn)業(yè)內(nèi)被廣泛的采用,取代傳統(tǒng)的串口通信而成為自動(dòng)化系統(tǒng)通信的主流。,嵌入式系統(tǒng)中的軟件一般都固化在存儲(chǔ)器芯片(外接或CPU內(nèi)置)中,而不是存貯于磁盤等載體中。、半導(dǎo)體技術(shù)和電子技術(shù)與各個(gè)行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物。在中國,嵌入式操作系統(tǒng)可分為兩大類型:一類是自主版權(quán)的操作系統(tǒng),另一類是基于Linux的操作系統(tǒng)。嵌入式系統(tǒng)一旦開始運(yùn)行就不需要人過多的干預(yù)。由于嵌入式系統(tǒng)需要根據(jù)應(yīng)用的要求進(jìn)行裝卸,所以嵌入式操作系統(tǒng)也必須能夠根據(jù)應(yīng)用的要求進(jìn)行裝卸,去掉多余的部分。嵌入式系統(tǒng)所能提供的資源有限,尤其是內(nèi)存資源,所以嵌入式操作系統(tǒng)必須做到小巧以滿足嵌入式系統(tǒng)硬件的限制。相應(yīng)的對嵌入式軟件也提出了與最初不同的要求[2]。如今已有幾十種商業(yè)操作系統(tǒng)可供選擇,出現(xiàn)了許多相互競爭的產(chǎn)品,如Vxworks,Psos,Neculeus、Windows CE、和各種嵌入式Linux等。20世紀(jì)70年代后期,專用于嵌入式系統(tǒng)的操作系統(tǒng)開始出現(xiàn),當(dāng)時(shí)大部分是用匯編語言寫的,僅能用于特定的微處理器。這時(shí)的計(jì)算機(jī)是面向具體應(yīng)用定做的,它們是一些專用指令的引擎以及與之集成在一起的I/O設(shè)備。第五章是uC/OSII的測試程序。第三章是實(shí)時(shí)操作系統(tǒng)uC/OSII的分析。 論文的組織結(jié)構(gòu)論文共分六章,其組織結(jié)構(gòu)為:第一章是緒言。裁減掉不需要的部分,使操作系統(tǒng)變得小巧、靈活,并且能滿足用戶特定操作系統(tǒng)的需要。隨著嵌入式技術(shù)的蓬勃發(fā)展,計(jì)算機(jī)工業(yè)也正邁入一個(gè)充滿挑戰(zhàn)和機(jī)遇的階段——后PC時(shí)代。其中,以計(jì)算機(jī)主機(jī)嵌入于應(yīng)用系統(tǒng)或設(shè)備之中為特征的嵌入式應(yīng)用更是令人矚目。嵌入式系統(tǒng)已經(jīng)廣泛滲透到人們的工作、生活中,包括家用電器、手持通訊設(shè)備、信息終端、儀器儀表、汽車、航空航天、軍事、制造工業(yè)、過程控制等領(lǐng)域。后PC時(shí)代是一個(gè)真實(shí)的階段,而且是一個(gè)可以預(yù)測的時(shí)代。uC/OS對于學(xué)校研究完全免費(fèi),只有在應(yīng)用于盈利項(xiàng)目時(shí)才需要支付少量的版權(quán)費(fèi),特別適合一般使用者的學(xué)習(xí)、研究和開發(fā)[1]。主要講述了本題目的背景。本章對uC/OSII的各個(gè)模塊以及移植性進(jìn)行了系統(tǒng)的分析。通過一個(gè)例子,測試所移植的uC/OSII能夠正常工作,并且反映出操作系統(tǒng)的多任務(wù)調(diào)度、任務(wù)切換等。軟件是由存儲(chǔ)在內(nèi)存的程序和路由信息組成。當(dāng)新的處理器出現(xiàn),則必須為之重新寫一遍。近年來,嵌入式軟件涉及的面也愈發(fā)擴(kuò)大。 嵌入式實(shí)時(shí)操作系統(tǒng)嵌入式實(shí)時(shí)操作系統(tǒng)并不是簡單嵌入的操作系統(tǒng),它與通用操作系統(tǒng)有本質(zhì)區(qū)別。大多數(shù)嵌入式系統(tǒng)的工作過程不需要人的干預(yù)。在這種條件下,要求負(fù)責(zé)系統(tǒng)管理的嵌入式操作系統(tǒng)具有很高的穩(wěn)定性。自主版權(quán)的操作系統(tǒng)方面,國內(nèi)有“女蝸Hopen”操作系統(tǒng)和DeltaOS操作系統(tǒng)等[3]。這一點(diǎn)就決定了它必然是一個(gè)技術(shù)密集、資金密集、不斷創(chuàng)新的知識集成系統(tǒng)。,即設(shè)計(jì)完成以后用戶通常是不能對其中的程序功能進(jìn)行修改的,必須有一套開發(fā)工具和環(huán)境才能進(jìn)行開發(fā)[3]。在這種趨勢下,以TCP/IP和以太網(wǎng)為代表成熟度較高的開放式網(wǎng)絡(luò)技術(shù),正逐漸地被應(yīng)用在各個(gè)自動(dòng)化系統(tǒng),連接并控制所有的設(shè)備。(2)移植性好,絕大部分uC/OS的源代碼是用移植性很強(qiáng)的ANSI C編寫的,與微處理器件相關(guān)的部分是用匯編語言寫的,而且已經(jīng)壓縮到了最低程度,使得uC/OSII便于移植到其它處理器上。 uC/OSII的內(nèi)核結(jié)構(gòu) uC/OSII的任務(wù)管理uC/OSII的任務(wù)管理包括如何在用戶的應(yīng)用程序中建立任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級、掛起和恢復(fù)任務(wù),以及獲得有關(guān)任務(wù)的信息。當(dāng)所有任務(wù)都處于等待事件發(fā)生或者等待延遲時(shí)間結(jié)束的狀態(tài)時(shí),uC/OSII執(zhí)行空閑任務(wù)(idle task),即執(zhí)行OSTaskIdle()函數(shù)。 uC/OSII的時(shí)間管理uC/OSII(和其它內(nèi)核一樣)要求用戶提供定時(shí)中斷來實(shí)現(xiàn)延時(shí)與超時(shí)控制等功能這個(gè)定時(shí)中斷叫做時(shí)鐘節(jié)拍,它應(yīng)該每秒發(fā)生10至100次。調(diào)用該函數(shù)會(huì)讓uC/OSII進(jìn)行一次任務(wù)調(diào)度,并執(zhí)行下一個(gè)優(yōu)先級最高的就緒態(tài)任務(wù)。 uC/OSII任務(wù)間的通信與同步對于一個(gè)多任務(wù)的操作系統(tǒng)來說,任務(wù)間的同步和通信是必不可少的。這里所有的信號都被看成是事件。 uC/OSII的內(nèi)存管理內(nèi)存管理是操作系統(tǒng)的另一項(xiàng)重要功能。但是,特定的內(nèi)存塊在釋放時(shí)必須重新放回它以前所屬的內(nèi)存分區(qū),通過這種方式,uC/OSII解決了內(nèi)存碎片問題。對于應(yīng)用程序,uC/OSII提供一系列的函數(shù)調(diào)用,在編譯應(yīng)用程序時(shí)要將uC/OSII源文件一起編譯、鏈接,使得應(yīng)用程序與uC/OSII靜態(tài)鏈接在一起形成一個(gè)系統(tǒng)映象,這時(shí)可以稱這個(gè)映象為uC/OSII,此時(shí)它己經(jīng)作為靜態(tài)鏈接庫鏈接到應(yīng)用程序中去了。//初始化時(shí)鐘控制器、時(shí)鐘中斷控制器;OSCpuInit()//設(shè)置中斷描述符表,各核心數(shù)據(jù)結(jié)構(gòu)初始化,包括任務(wù)調(diào)度初始化、//任務(wù)間通信初始化、內(nèi)存管理初始化、Idle任務(wù)和統(tǒng)計(jì)任務(wù)初始化;OSInit()。//LWIP TASK//調(diào)度最高優(yōu)先級任務(wù)開始運(yùn)行OSStart()。系統(tǒng)啟動(dòng)時(shí)對8259的初始化工作決定了系統(tǒng)將以何種方式控制外部中斷。outb_p(LATCH8,0x40)。 核心數(shù)據(jù)結(jié)構(gòu)初始化在這一階段對系統(tǒng)用到的全局變量和內(nèi)核各模塊所用到的數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化工作,例如,任務(wù)控制塊數(shù)組初始化(),將系統(tǒng)時(shí)鐘OSTime初始化為0等。OSRdyTbl[]是個(gè)字符型數(shù)組,每一項(xiàng)有8位,每一位對應(yīng)一個(gè)任務(wù),如果OSRdyTb1[]有N個(gè)元素,則可容納N*8個(gè)任務(wù)。/*指向處于就緒態(tài)的優(yōu)先級最高任務(wù)的任務(wù)控制塊的指針初始為零*/OSTCBCur=(OS_TCB)0。/*指針數(shù)組,每一項(xiàng)指向一個(gè)已建立任務(wù),指針數(shù)組下標(biāo)用于按優(yōu)先級檢索任務(wù)*/ 任務(wù)間通信初始化主要是對事件控制塊和消息隊(duì)列控制塊的初始化。除了用戶任務(wù)外,還必須建立任務(wù)Idle,即空閑任務(wù)。如果用戶應(yīng)用程序打算使用統(tǒng)計(jì)任務(wù),用戶必須在初始化時(shí)建立一個(gè)任務(wù),這個(gè)任務(wù)中調(diào)用OSStatInit()。然后,OSStart()調(diào)用高優(yōu)先級就緒任務(wù)啟動(dòng)函數(shù)OSStartHighRdy(),將任務(wù)棧中保存的值彈回到CPU寄存器中,然后執(zhí)行一條中斷返回指令,中斷返回指令強(qiáng)制執(zhí)行該任務(wù)代碼。if(OSRunning=FALSE){y=OSUnMapTbl[OSRdyGrp]。OSTCBHighRdr=OSTCBPrioTbl[OSPrioHighRdy]。為方便移植,大部分的uC/OSⅡ代碼是用C語言寫的,但仍需要用匯編語言寫一些與處理器相關(guān)的代碼,這是因?yàn)閡C/OSⅡ在讀寫處理器和寄存器時(shí)只能通過匯編語言來實(shí)現(xiàn)??芍厝胄秃瘮?shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行,而相應(yīng)數(shù)據(jù)不會(huì)丟失。中斷使得CPU可以在事件發(fā)生時(shí)才予以處理,而不必讓微處理器連續(xù)不斷地查詢((Polling)是否有事件發(fā)生。 (3)C編譯器還要支持匯編語言程序。(4)處理器支持中斷,并可以產(chǎn)生定時(shí)中斷(通常在10到100HZ之間)。 uC/OSII的移植工作uC/,從圖中可以看到,對uC/OSII的移植實(shí)際上就是對與處理器有關(guān)的代碼進(jìn)行重寫或修改。其它文件用C寫成,它們?yōu)橄到y(tǒng)提供任務(wù)管理、任務(wù)之間通信、時(shí)間管理以及內(nèi)存管理等功能[10]。編譯完成后,程序可在PC機(jī)上運(yùn)行。其中AX,BX,DX和DX的高8位和低8位可以獨(dú)立存取,形成AL,AH,BL,BH,CL,CH,DL和DH 8個(gè)8位通用寄存器。在實(shí)模式下,這些段寄存器存放段的基地址。EIP是由IP擴(kuò)展來的,因?yàn)樵趯?shí)模式下段的最大范圍是64K,所以,EIP的高16位是0。(2)。 下面分別進(jìn)行說明。與優(yōu)點(diǎn)相比,多一些編譯時(shí)間還是可以接受的。typedef unsigned char INT8U。 /* 帶符號16位數(shù) */typedef unsigned long INT32U。 /* 雙精度浮點(diǎn)數(shù) */typedef unsigned int OS_STK。 CLI} /* 關(guān)閉中斷 */define OS_EXIT_CRITICAL() asm POPF /* 打開中斷 */endif/******************************************************************** Intel 80x86 (實(shí)模式, 大模式編譯)*******************************************************************/define OS_STK_GROWTH 1 /* 堆棧由高地址向低地址增長 (3)*/define uCOS 0x80 /* 中斷向量0x80用于任務(wù)切換 (4)*/define OS_TASK_SW() asm INT uCOS /* (5) *//******************************************************************* 全局變量 ********************************************************************/OS_CPU_EXT INT8U OSTickDOSCtr。由于在80x86實(shí)模式中堆棧都是按字進(jìn)行操作的,沒有字節(jié)操作,所以Borland C/C++編譯器中堆棧數(shù)據(jù)類型OS_STK 聲明為16 位。Borland C/C++支持嵌入?yún)R編語句,所以加入關(guān)閉/打開中斷的語句是很方便的。此時(shí)需要將OSIntCtxSw()中的常量由10改到8()。80x86提供了256個(gè)軟中斷源可供選用,中斷服務(wù)程序(ISR)(也稱為例外處理過程)的入口點(diǎn)必須指向匯編函數(shù)OSCtxSw()()。一方面200 ,可以經(jīng)過11次延時(shí)再調(diào)用DOS中斷;另一方面,在DOS中,設(shè)定的間隔5ms也可以滿足要求。OSStartHighRdy()默認(rèn)指針OSTCBHighRdy指向優(yōu)先級最高就緒任務(wù)的任務(wù)控制塊(OS_TCB)(在這之前OSTCBHighRdy已由OSStart()設(shè)置好了)。 載入 DSMOV DS, AX 。 (4)。當(dāng)執(zhí)行了IRET指令后,CPU會(huì)從(SS:SP)指向的堆棧中恢復(fù)各個(gè)寄存器的值并執(zhí)行中斷前的指令。軟中斷向量指向OSCtxSw()。PUSHA ;保存當(dāng)前任務(wù)環(huán)境 (2)PUSH ES ;(3)PUSH DS ;(4)。 OSTCBCurOSTCBStkPtr = SS:S(5)MOV ES:[BX+2], SSMOV ES:[BX+0], SP。 OSTCBCur = OSTCBHighRdy (7)MOV DX, WORD PTR DS:_OSTCBHighRdyMOV WORD PTR DS:_OSTCBCur+2, AXMOV WORD PTR DS:_OSTCBCur, DX。SS:SP = OSTCBHighRdyOSTCBStkPtr。(12)IRET 。最后用OSCtxSw()在任務(wù)OS_TCB中保存SS和SP寄存器。如果不使用對外接口函數(shù),請?jiān)陬^文件中把相應(yīng)的開關(guān)選項(xiàng)關(guān)閉,加快任務(wù)切換的速度。 OSIntCtxSw()函數(shù)在μC/OSI
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1