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

正文內(nèi)容

嵌入式系統(tǒng)開(kāi)發(fā)畢業(yè)論文-閱讀頁(yè)

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

【正文】 D sp!,{r4}       ?。槐4娈?dāng)前PSRMRS r4,SPSRSTMFD sp!,{r4}。 使用μC/OSII系統(tǒng)應(yīng)注意的問(wèn)題,不支持時(shí)間片輪轉(zhuǎn)法。每一個(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ū)分)。所以,它只能就是多任務(wù),不能就是多進(jìn)程,至少不是我們所熟悉的那種多進(jìn)程。μC/OSII是一個(gè)支持多任務(wù)的操作系統(tǒng)。對(duì)于共享資源(比如串口),μC/OSII也提供了很好的解決辦法,一般情況下使用的是信號(hào)量方法。在這個(gè)過(guò)程中即使有優(yōu)先權(quán)更高的任務(wù)進(jìn)入了就緒態(tài),因?yàn)闊o(wú)法得到信號(hào)量,也不能使用該資源。簡(jiǎn)單地說(shuō),就是高優(yōu)先級(jí)任務(wù)必須等待低優(yōu)先級(jí)任務(wù)的完成。所以不在使用μC/OSII時(shí),必須對(duì)所開(kāi)發(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)單,但不夠靈活有效。數(shù)組的大小是固定的,生成映像后不可能在使用中動(dòng)態(tài)地改變。對(duì)于內(nèi)存分區(qū),在不知道系統(tǒng)初始化后給用戶留下了多少自由內(nèi)存空間的情況下,很難定義內(nèi)存分區(qū)所使用數(shù)組的大小。μC/OSII將來(lái)應(yīng)該被改進(jìn)以支持可變大小的內(nèi)存分區(qū)。所以,應(yīng)避免使用全局?jǐn)?shù)組分配內(nèi)存空間,關(guān)鍵是要知道整個(gè)應(yīng)用程序在編譯、鏈接后代碼段和數(shù)據(jù)段的大小,在目標(biāo)板內(nèi)存中是如何定位,以及目標(biāo)板內(nèi)存的大小。C/OSⅡ上的移植 開(kāi)源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)域重要的研究方向。現(xiàn)在就以TCP/IP協(xié)議棧LwIP為基礎(chǔ),給uC/0S II加上了網(wǎng)絡(luò)支持。LwIP的含義是Light Weight(輕型)IP協(xié)議。LwIP TCP/IP實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM的占用,一般它只需要幾十K的RAM和40K左右的ROM就可以運(yùn)行,這使LwIP協(xié)議棧適合在低端嵌入式系統(tǒng)中使用。uC/0S II的特點(diǎn)可以概括為以下幾個(gè)方面:公開(kāi)源代碼,代碼結(jié)構(gòu)清晰、明了,注釋詳盡,組織有條理,可移植性好。內(nèi)核屬于搶占式,最多可以管理56個(gè)任務(wù)。目前國(guó)內(nèi)對(duì)uC/0S II的研究和應(yīng)用都很多。嵌入式設(shè)備要與Internet網(wǎng)絡(luò)直接交換信息,就必須支持TCP/IP協(xié)議。uC/0S II是一個(gè)富有開(kāi)放色彩的RTOS,只要買一本書(shū)就可獲得源代碼,對(duì)學(xué)校和教育的使用完全免費(fèi),商業(yè)應(yīng)用的費(fèi)用相對(duì)也很低。通過(guò)把開(kāi)放源代碼的TCP/IP協(xié)議棧LwIP移植到uC/0S II上來(lái),就獲得了一套可免費(fèi)研究、學(xué)習(xí)的嵌入式網(wǎng)絡(luò)軟件平臺(tái)。因此LwIP在uC/0S II上的實(shí)現(xiàn)就是修改這個(gè)目錄下的文件,其它的文件一般不應(yīng)該修改。(process model)?。?)tcp/,ip層是一個(gè)進(jìn)程,tcp層是一個(gè)進(jìn)程。議的每一層都非常清晰,(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)說(shuō), swich是不可取的. 這樣TCP/.。(3)lwip的process model:所有tcp/ip協(xié)議棧都在一個(gè)進(jìn)程當(dāng)中。 在這個(gè)項(xiàng)目中我用的硬件平臺(tái)是s3c44b0x+。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) //系統(tǒng)初始化sys_thread_t sys_thread_new(void (* function)(void *arg), void *arg,int prio)//創(chuàng)建一個(gè)新進(jìn)程sys_mbox_t sys_mbox_new(void) //創(chuàng)建一個(gè)郵箱voidsys_mbox_free(sys_mbox_t mbox) //釋放并刪除一個(gè)郵箱voidsys_mbox_post(sys_mbox_t mbox, void *data) //發(fā)送一個(gè)消息到郵箱void sys_mbox_fetch(sys_mbox_t mbox, void **msg) //等待郵箱中的消息sys_sem_t sys_sem_new(u8_t count) //創(chuàng)建一個(gè)信號(hào)量void sys_sem_free(sys_sem_t sem) //釋放并刪除一個(gè)信號(hào)量void sys_sem_signal(sys_sem_t sem) //發(fā)送一個(gè)信號(hào)量void sys_sem_wait(sys_sem_t sem) //等待一個(gè)信號(hào)量void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg)//設(shè)置一個(gè)超時(shí)事件void sys_untimeout(sys_timeout_handler h, void *arg) //刪除一個(gè)超時(shí)事件…. (2) Lwip在ucos上的移植.?、?系統(tǒng)初始化sys_int必須在tcpip協(xié)議棧任務(wù)tcpip_thread創(chuàng)建前被調(diào)用.define MAX_QUEUES20define MAX_QUEUE_ENTRIESOS_EVENT*//ucos中指向事件控制塊的指針 //消息隊(duì)列//MAX_QUEUE_ENTRIES消息隊(duì)列中最多消息數(shù)} TQ_DESCR, *PQ_DESCR。//可見(jiàn)lwip中的mbox其實(shí)是ucos的消息隊(duì)列static char pcQueueMemoryPool[MAX_QUEUES * sizeof(TQ_DESCR) ]。void sys_init(void){u8_t i。ucErr。ucErr )。//init lwip_timeouts for every lwip task//初始化lwip定時(shí)事件表,具體實(shí)現(xiàn)參考下面章節(jié)for(i=0。i++){lwip_timeouts[i].next = NULL?!wip中的進(jìn)程就是ucos中的任務(wù),創(chuàng)建一個(gè)新進(jìn)程的代碼如下:define LWIP_STK_SIZE10*1024 /*和tcp/*//*己設(shè)置,44b0開(kāi)發(fā)板上有8M的sdram,所以設(shè)大一點(diǎn)也沒(méi)有關(guān)系*///max number of lwip tasksdefine LWIP_TASK_MAX5 //和tcp/ip相關(guān)的任務(wù)最多數(shù)目//first prio of lwip tasksdefine LWIP_START_PRIO /*和tcp/ip相關(guān)進(jìn)程的堆棧區(qū)*/LWIP_TASK_STK[curr_prio_offset][LWIP_STK_SIZE1],LWIP_START_PRIO+curr_prio_offset )。 return 1。}}從代碼中可以看出tcpip_thread應(yīng)該是最先創(chuàng)建的.③ Lwip中的定時(shí)事件。 //指向下一個(gè)定時(shí)結(jié)構(gòu)u32_t time。 //定時(shí)時(shí)間到后執(zhí)行的函數(shù)void *arg。struct sys_timeouts {struct sys_timeout *next。struct sys_timeouts lwip_timeouts[LWIP_TASK_MAX]。Lwip中的定時(shí)事件表的結(jié)構(gòu)[MAX_LWIP_TASKS]中.struct sys_timeouts null_timeouts。s16_t err,offset。 = NULL。curr_task_pcb)。offset = curr_prio LWIP_START_PRIO。null_timeouts。lwip_timeouts[offset]。ping –l 2000 –t,不間斷用長(zhǎng)度為2000的數(shù)據(jù)報(bào)進(jìn)行ping測(cè)試,(echo端口),往該端口寫(xiě)數(shù)測(cè)試echo功能.在運(yùn)行一段時(shí)間以后,()時(shí)被高優(yōu)先級(jí)任務(wù)打斷改寫(xiě)了curr_task_tcb的值,從而使sys_arch_timeouts返回的指針錯(cuò)誤,:void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg){struct sys_timeouts *timeouts。timeout = memp_malloc(MEMP_SYS_TIMEOUT)。}timeoutnext = NULL。timeoutarg = arg。timeouts = sys_arch_timeouts()。return。//如果鏈表不為空,//時(shí)間相對(duì)于前一事件的時(shí)間的差值if (timeoutsnexttime msecs) {timeoutsnexttime = msecs。timeoutsnext = timeout。 t != NULL。if (tnext == NULL ||}timeoutnext = tnext。break。struct sys_timeout *prev_t, *t。 //返回當(dāng)前任務(wù)定時(shí)事件鏈表起始指針if (timeoutsnext == NULL) //如果鏈表為空直接返回{return。 t != NULL。amp。elseprev_tnext = tnext。memp_free(MEMP_SYS_TIMEOUT, t)。}}return。ucErr。//從消息隊(duì)列內(nèi)存分區(qū)中得到一個(gè)內(nèi)存塊pQDesc = OSMemGet( pQueueMem, amp。(pQDescpvQEntries[0]), MAX_QUEUE_ENTRIES )。}} ■ 發(fā)一條消息給”mbox”const void * const pvNullPointer = 0xffffffff。if( !data ) pvNullPointer。err= OSQPost( mboxpQ, data)。struct sys_timeouts *timeouts。sys_timeout_handler h。again:timeouts = sys_arch_timeouts()。 //無(wú)超時(shí)等待消息} else {if (timeoutsnexttime 0) {}if (time == SYS_ARCH_TIMEOUT) {timeoutsnext = tmptimeoutnext。arg = tmptimeoutarg。//從內(nèi)存中釋放該定時(shí)事件,并執(zhí)行該定時(shí)事件中的函數(shù)if (h != NULL) {h(arg)。}/*因?yàn)槎〞r(shí)事件中的定時(shí)時(shí)間到或者是因?yàn)閟ys_arch_mbo_fetch超時(shí)到而執(zhí)行到*///這里,返回本函數(shù)開(kāi)頭重新等待mbox的消息goto again。} else {timeoutsnexttime = 0。ucErr。//在 lwip中 ,timeout的單位是ms// 在ucosII ,timeout 的單位是timer tick if(timeout != 0){ucos_timeout = (timeout )*( OS_TICKS_PER_SEC/1000)。else if(ucos_timeout 65535)ucos_timeout = 65535。ucErr )。ucErr)。 OSTCBCurOSTCBStat OSTCBCurOSTCBEventPtr = (OS_EVENT *)0。 // zhangzs OS_EXIT_CRITICAL()。timeout = SYS_ARCH_TIMEOUT。pvNullPointer ) *data = NULL。}return timeout。每臺(tái)連到以太網(wǎng)網(wǎng)絡(luò)的計(jì)算機(jī)分配一個(gè)唯一的48位(6字節(jié))數(shù)字,即它的以太網(wǎng)地址。MAC地址屬于物理層的地址,對(duì)于不同類型的網(wǎng)絡(luò),其物理址分配方式不同,但本論文中介紹的設(shè)置方法都適用。它是TCP/IP的設(shè)計(jì)人員選擇的一個(gè)類似于物理網(wǎng)絡(luò)的編址地址。IP地址屬于軟件協(xié)議層的地址。在嵌入式系統(tǒng)中,操作系統(tǒng)和所有的應(yīng)用軟件都被固化到Flash等存儲(chǔ)設(shè)備中。嵌入式系統(tǒng)的啟動(dòng)往往也是“自動(dòng)”的,即從上電到處于工作狀態(tài),不用人的介入。 因?yàn)樵O(shè)計(jì)、研究和生產(chǎn)嵌入式網(wǎng)絡(luò)設(shè)備的廠家比網(wǎng)卡的廠家多得多
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1