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

正文內(nèi)容

嵌入式系統(tǒng)開發(fā)畢業(yè)論文(編輯修改稿)

2024-07-25 13:29 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 OSII處理器無(wú)關(guān)的代碼提供了μC/OSII的系統(tǒng)服務(wù),應(yīng)用程序可以使用這些API函數(shù)進(jìn)行內(nèi)存管理、任務(wù)間通信及創(chuàng)建、刪除任務(wù)等。大部分的μC/OSII代碼是使用ANSI C語(yǔ)言書寫的,因此μC/OSII的可移植性好,然而仍需要使用C和匯編語(yǔ)言寫一些處理器相關(guān)代碼。μC/OSII的移植需要滿足以下要求:;;,并且需要一個(gè)定時(shí)中斷源;;。S3C44B0X處理器完全滿足上述要求。 實(shí)時(shí)內(nèi)核μC/OSII在S3C44B0X上的移植我們使用ARM SDT編譯器,移植μC/OSII主要包括以下幾個(gè)步驟。*************************************************與編譯器相關(guān)的數(shù)據(jù)類型*************************************************typedef unsigned char BOOLEAN。typedef unsigned char INT8U。 //8位無(wú)符號(hào)整數(shù)typedef signed char INT8S。 //8位有符號(hào)整數(shù)typedef unsigned short INT16U。 //16位有符號(hào)整數(shù)typedef signed short INT16S。 //16位無(wú)符號(hào)整數(shù)typedef unsigned long INT32U。 //32位無(wú)符號(hào)整數(shù)typedef signed long INT32S。 //32位有符號(hào)整數(shù)typedef float FP32。 //單精度浮點(diǎn)數(shù)typedef double FP64。 //雙精度浮點(diǎn)數(shù)typedef unsigned int OS_STK。 /*堆棧入口寬度為16位與ARM處理器相關(guān)的代碼:*/define OS_ENTER_CRITICAL () ARMEnableInt() //開啟中斷define OS_STK_GROWTH 1 //堆棧由高地址向低地址增長(zhǎng)()void OSTaskStkInit(void(task)(void *pd),void *pdata,void *ptos,INT16U opt){ unsigned int *stk。opt =opt。 /*因“opt”變量沒有用到,防止編譯器產(chǎn)生警告*/stk =(unsigned int *)ptos。 /*裝載堆棧指針*//*為新任務(wù)創(chuàng)建上下文*/*stk=(unsigned int)task。 /*lr*/*stk=(unsigned int)task /*pc*/*stk=0。 /*r12*/*stk=0。 /*r11*/*stk=0。 /*r10*/*stk=0。 /*r9*/*stk=0。 /*r8*/*stk=0。 /*r7*/*stk=0。 /*r6*/*stk=0。 /*r5*/*stk=0。 /*r4*/*stk=0。 /*r3*/*stk=0。 /*r2*/*stk=0。 /*r1*/*stk=(unsigned int)pdata。 /*r0*/*stk=(SVC32MODE|0x0|)。 /*cpsr IRQ,*stk=(SVC32MODE|0x0)。 /*spsr IRQ,關(guān)閉FIQ*/return((void*)stk)。}后5個(gè)函數(shù)是鉤子函數(shù),可以不加代碼:void OSTaskCreateHook(OS_TCB *ptcb)void OSTaksDelHool (OS_TCB *ptcb)void OSTaskSwHook(void)void OSTaskStatHook(void)(3)用匯編語(yǔ)言編寫4個(gè)與處理器相關(guān)的函數(shù)()OSStartHighRdy() ;運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù)LDR r4,addr_OSTCBCur ;得到當(dāng)前任務(wù)的TCB地址LDR r5,addr_OSTCBHighRdy ;得到高優(yōu)先級(jí)任務(wù)的TCB地址LDR r5,addr_OSTCBHighRdy ;得到高優(yōu)先級(jí)任務(wù)的TCB地址LDR r5,[r5] ;得到堆棧指針LDR sp,[r5] ;切換到新的堆棧STR r5,[r4]        ?。辉O(shè)置新的當(dāng)前任務(wù)的TCB地址LDMFD sp!,{r4}MSR CPSR_cxsf,r4LDMFD sp!,{r0r12,lr,pc}  ?。婚_始新的任務(wù)ENDOSCtxsw()           ;任務(wù)級(jí)的任務(wù)切換函數(shù)STMFD sp!,{lr}       ??;保存PC指針STMFD sp!,{lr}       ?。槐4鎙r指針STMFD sp!,{r0r12}    ??;保存寄存器文件和返回地址MRS r4,CPSRSTMFD sp!,{r4}       ??;保存當(dāng)前PSRMRS r4,SPSRSTMFD sp!,{r4}。OSPrioCur=OSPrioHighRdyLDR r4,addr_OSPrioCurLDR r5,addr_OSPrioHighRdyLDRB r6,[r5]STRB r6,[r4];得到當(dāng)前任務(wù)的TCB地址LDR r4,addr_OSTCBCurLDR r5,[r4]STR sp,[r5]         ?。槐4鏃V羔樤谡枷热蝿?wù)的TCB上;取得高優(yōu)先級(jí)任務(wù)的TCB地址LDR r6,addr_OSTCBHighRdyLDR r6,[r6]LDR sp,[r6]          ;得到新任務(wù)的堆棧指針;OSTCBCur=OSTCBHighRdySTR r6,[r4];得到當(dāng)前新任務(wù)的TCB地址LDMFD sp!,{r4}MSR SPSR_cxsf,r4LDMFD sp!,{r4}MSR SPSR_cxsf,r4LDMFD sp!,{r0r12,lr pc}OSIntCtxSw()         ??;中斷級(jí)的任務(wù)切換函數(shù)LDMIA sp!,{alvl,lr}SUBS pc,lr,4SUB lr,lr,4MOV r12,lrMRS lr,SPSRAND lr,lr,0XFFFFFE0ORR lr,lr,0XD3MSR CPSR_CXSF,lrOSTickISR()           ??;中斷服務(wù)函數(shù)STMDB sp!,{r0r11,lr}MRS r0,CPSRORR r0,r0,0x80         ??;設(shè)置中斷禁止標(biāo)志MSR CPSR_cxsf,r0          ;中斷結(jié)束LDR r0,I_ISPCLDR r1,=BIT_TIMER0STR r1,{r0}BL IrqStartBL osTimeTickBL IrqFinishLDR r0,=need_to_swap_contextLDR R2,[R0]CMP r2,1LDREQ pc,=_CON_SW完成上述工作后,μC/OSII就可以運(yùn)行在ARM處理器上了。 使用μC/OSII系統(tǒng)應(yīng)注意的問題,不支持時(shí)間片輪轉(zhuǎn)法。它是一個(gè)基于優(yōu)先級(jí)的實(shí)時(shí)操作系統(tǒng)。每一個(gè)任務(wù)的優(yōu)先級(jí)必須不同(分析它的源碼會(huì)發(fā)現(xiàn),μC/OSII把任務(wù)的優(yōu)先級(jí)當(dāng)作任務(wù)在標(biāo)識(shí)來(lái)使用,如果優(yōu)先級(jí)相同,任務(wù)將無(wú)法區(qū)分)。進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)首先得到CPU的使用權(quán),只有等它交出CPU的使用權(quán)后,其它任務(wù)才可以被執(zhí)行。所以,它只能就是多任務(wù),不能就是多進(jìn)程,至少不是我們所熟悉的那種多進(jìn)程。μC/OSII是一個(gè)支持多任務(wù)的操作系統(tǒng)。我們可以把一個(gè)完整的程序劃分成幾個(gè)任務(wù),不同的任務(wù)執(zhí)行不同的功能。對(duì)于共享資源(比如串口),μC/OSII也提供了很好的解決辦法,一般情況下使用的是信號(hào)量方法。我們創(chuàng)建一個(gè)信號(hào)量并對(duì)它進(jìn)行初始化,當(dāng)一個(gè)任務(wù)需要使用一個(gè)共享資源時(shí),它必須先申請(qǐng)得到這個(gè)信號(hào)量。在這個(gè)過程中即使有優(yōu)先權(quán)更高的任務(wù)進(jìn)入了就緒態(tài),因?yàn)闊o(wú)法得到信號(hào)量,也不能使用該資源。在μC/OSII中稱為優(yōu)先級(jí)反轉(zhuǎn)。簡(jiǎn)單地說,就是高優(yōu)先級(jí)任務(wù)必須等待低優(yōu)先級(jí)任務(wù)的完成。在上述情況下,在兩個(gè)任務(wù)之間發(fā)生優(yōu)先級(jí)后轉(zhuǎn)是無(wú)法避免的。所以不在使用μC/OSII時(shí),必須對(duì)所開發(fā)的系統(tǒng)了解清楚才能選擇對(duì)于某種共享資源是否使用信號(hào)量。在分析許多μC/OSII的應(yīng)用實(shí)例中發(fā)現(xiàn),任務(wù)??臻g和內(nèi)存分區(qū)的創(chuàng)建采用了定義全局?jǐn)?shù)組的方法,這樣實(shí)現(xiàn)起來(lái)固然簡(jiǎn)單,但不夠靈活有效。編譯器會(huì)將全局?jǐn)?shù)組作為未初始化的全局變量,放到應(yīng)用程序映像的數(shù)據(jù)段。數(shù)組的大小是固定的,生成映像后不可能在使用中動(dòng)態(tài)地改變。對(duì)于任務(wù)??臻g來(lái)說,數(shù)組定義大了會(huì)造成內(nèi)存浪費(fèi);定義小了任務(wù)棧溢出,會(huì)造成系統(tǒng)崩潰。對(duì)于內(nèi)存分區(qū),在不知道系統(tǒng)初始化后給用戶留下了多少自由內(nèi)存空間的情況下,很難定義內(nèi)存分區(qū)所使用數(shù)組的大小。此外,現(xiàn)在μC/OSII只支持固定大小的內(nèi)存分區(qū),容易造成內(nèi)存浪費(fèi)。μC/OSII將來(lái)應(yīng)該被改進(jìn)以支持可變大小的內(nèi)存分區(qū)。因此,系統(tǒng)初始化后能清楚地掌握自由內(nèi)存空間的情況是很重要的。所以,應(yīng)避免使用全局?jǐn)?shù)組分配內(nèi)存空間,關(guān)鍵是要知道整個(gè)應(yīng)用程序在編譯、鏈接后代碼段和數(shù)據(jù)段的大小,在目標(biāo)板內(nèi)存中是如何定位,以及目標(biāo)板內(nèi)存的大小。        第4章 網(wǎng)絡(luò)轉(zhuǎn)串口驅(qū)動(dòng)的開發(fā)  Lwip在181。C/OSⅡ上的移植 開源TCP/IP協(xié)議棧LwIP簡(jiǎn)介隨著嵌入式系統(tǒng)與網(wǎng)絡(luò)的日益結(jié)合,在嵌入式實(shí)時(shí)操作系統(tǒng)中引入TCP/IP協(xié)議棧,以支持嵌入式設(shè)備接入網(wǎng)絡(luò),成為嵌入式領(lǐng)域重要的研究方向。uC/0S II是近年來(lái)發(fā)展迅速的一個(gè)開放源碼實(shí)時(shí)操作系統(tǒng),但它只是一個(gè)實(shí)時(shí)的任務(wù)調(diào)度及通信內(nèi)核,缺少對(duì)外圍設(shè)備和接口的支持,如沒有文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議、圖形界面。現(xiàn)在就以TCP/IP協(xié)議棧LwIP為基礎(chǔ),給uC/0S II加上了網(wǎng)絡(luò)支持。LwIP是瑞士計(jì)算機(jī)科學(xué)院(Swedish Institute of Computer Science)的Adam Dunkels等開發(fā)的一套用于嵌入式系統(tǒng)的開放源代碼TCP/IP協(xié)議棧。LwIP的含義是Light Weight(輕型)IP協(xié)議。LwIP可以移植到操作系統(tǒng)上,也可以在無(wú)操作系統(tǒng)的情況下獨(dú)立運(yùn)行。LwIP TCP/IP實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM的占用,一般它只需要幾十K的RAM和40K左右的ROM就可以運(yùn)行,這使LwIP協(xié)議棧適合在低端嵌入式系統(tǒng)中使用。LwIP的特性如下: ■ 支持多網(wǎng)絡(luò)接口下的IP轉(zhuǎn)發(fā) ■ 支持ICMP協(xié)議 ■ 包括實(shí)驗(yàn)性擴(kuò)展的的UDP(用戶數(shù)據(jù)報(bào)協(xié)議) ■ 包括阻塞控制,RTT估算和快速恢復(fù)和快速轉(zhuǎn)發(fā)的TCP(傳輸控制協(xié)議) ■ 提供專門的內(nèi)部回調(diào)接口(Raw API)用于提高應(yīng)用程序性能 ■ 可選擇的Berkeley接口API(多線程情況下) 基于uC/0S II的網(wǎng)絡(luò)平臺(tái)概述 嵌入式操作系統(tǒng)uC/0S II是一個(gè)公開源代碼的占先式多任務(wù)的微內(nèi)核RTOS,其性能和安全性可以與商業(yè)產(chǎn)品競(jìng)爭(zhēng)。uC/0S II的特點(diǎn)可以概括為以下幾個(gè)方面:公開源代碼,代碼結(jié)構(gòu)清晰、明了,注釋詳盡,組織有條理,可移植性好??刹眉簦晒袒?。內(nèi)核屬于搶占式,最多可以管理56個(gè)任務(wù)。uC/0S II自1992年的第一版(uC/0S)以來(lái)已經(jīng)有好幾百個(gè)應(yīng)用,是一個(gè)經(jīng)實(shí)踐證明好用且穩(wěn)定可靠的內(nèi)核。目前國(guó)內(nèi)對(duì)uC/0S II的研究和應(yīng)用都很多。TCP/IP是Internet的基本協(xié)議,以其實(shí)用性、高效性已經(jīng)成為事實(shí)上的工業(yè)標(biāo)準(zhǔn)。嵌入式設(shè)備要與Internet網(wǎng)絡(luò)直接交換信息,就必須支持TCP/IP協(xié)議。目前嵌入式設(shè)備上TCP/IP方案有很多種,但面向低端應(yīng)用的開源嵌入式網(wǎng)絡(luò)平臺(tái)還很少見。uC/0S II是一個(gè)富有開放色彩的RTOS,只要買一本書就可獲得源代碼,對(duì)學(xué)校和教育的使用完全免費(fèi),商業(yè)應(yīng)用的費(fèi)用相對(duì)也很低。但是它目前的一些第三方TCP/IP支持都是完全商業(yè)化的,用戶需要付費(fèi)才能獲得,很少給出源代碼,這影響了uC/0S II的研究和推廣。通過把開放源代碼的TCP/IP協(xié)議棧LwIP移植到uC/0S II上來(lái),就獲得了一套可免費(fèi)研究、學(xué)習(xí)的嵌入式網(wǎng)絡(luò)軟件平臺(tái)。系統(tǒng)示意圖如下圖41: 圖41 uC/0S II+LwIP系統(tǒng)示意圖  LwIP在uC/0S II下的實(shí)現(xiàn) LwIP協(xié)議棧在設(shè)計(jì)時(shí)就考慮到了將來(lái)的移植問題,因此把所有與硬件、OS、編譯器相關(guān)的部份獨(dú)立出來(lái),放在/src/arch目錄下。因此LwIP在uC/0S II上的實(shí)現(xiàn)就是修改這個(gè)目錄下的文件,其它的文件一般不應(yīng)該修改。下面分幾部份分別說明相應(yīng)文件的實(shí)現(xiàn)原理和過程。(process model)  tcp/ip協(xié)議棧的process model一般有幾種方式.?。?)tcp/,ip層是一個(gè)進(jìn)程,tcp層是一個(gè)進(jìn)程?!∵@樣的好處是網(wǎng)絡(luò)協(xié)議的每一層都非常清晰,(context switch).對(duì)于接收一個(gè)TCP segment要引起3次context switch(從網(wǎng)卡驅(qū)動(dòng)程序到鏈路層進(jìn)程,從鏈路層進(jìn)程到ip層進(jìn)程,從ip層進(jìn)程到TCP進(jìn)程).通常對(duì)于操作系統(tǒng)來(lái)說, swich是不可取的.(2)另外一種方式是TCP/(system call)和協(xié)議棧來(lái)進(jìn)行通訊。 這樣TCP/.。(3)lwip的process model:所有tcp/ip協(xié)議棧都在一個(gè)進(jìn)程當(dāng)中。 這樣tcp/,消息隊(duì)列等和tcp/ip進(jìn)程進(jìn)行通訊.如果應(yīng)用層程序駐留tcp/ip進(jìn)程中,那應(yīng)用層程序就利用內(nèi)部回調(diào)函數(shù)口(Raw API)和tcp/ (tcpip_thread)(如圖中的tftp_thread,tcpecho_thread),也可以在tcpip_thread中(如圖左上角)中利用內(nèi)部回調(diào)函數(shù)口(Raw API)和tcp/ip協(xié)議棧通訊 Lwip to uCos 在這個(gè)項(xiàng)目中我用的硬件平臺(tái)是s3c44b0x+。lwip會(huì)為每個(gè)網(wǎng)絡(luò)連接動(dòng)態(tài)分配一些信號(hào)量(semaphone)和消息隊(duì)列(Message Queue),. (1) Lwip的操作系統(tǒng)封裝層(operating layer) Lwip為了適應(yīng)不同的操作系統(tǒng),(定時(shí),進(jìn)程同步,消息傳遞)”mbox”(其實(shí)在ucos的實(shí)現(xiàn)中我們使用的是Message Queue來(lái)實(shí)現(xiàn)lwip中的”mbox”,下面大家可以看到這一點(diǎn)) Operating system emulation layer的原代碼在…/lwip/src/core/../lwip/src/arch/.操作系統(tǒng)封裝層的主要函數(shù)如下:void sys_init(void)
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1