国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于μC/OS-Ⅱ和LwIP的嵌入式Web服務(wù)器實(shí)現(xiàn)

2011-02-03 03:05楊俊呂建平徐峰柳
電氣自動(dòng)化 2011年3期
關(guān)鍵詞:瀏覽器以太網(wǎng)郵箱

楊俊 呂建平 徐峰柳

(蘇州大學(xué) 電子信息學(xué)院,江蘇蘇州 215006)

0 引言

隨著嵌入式系統(tǒng)和單片機(jī)技術(shù)的發(fā)展,嵌入式以太網(wǎng)的設(shè)計(jì)越來(lái)越受關(guān)注。美國(guó)貝爾實(shí)驗(yàn)室總裁Arun Netravali等一批科學(xué)家曾經(jīng)作出了預(yù)測(cè):未來(lái)"將會(huì)產(chǎn)生比PC時(shí)代多出成百上千倍的瘦服務(wù)器和超級(jí)嵌入式瘦服務(wù)器,這些瘦服務(wù)器將與我們這個(gè)世界你能想象到的各種物理信息、生物信息相連接,通過(guò)Internet自動(dòng)地、實(shí)時(shí)地、方便地、簡(jiǎn)單地提供給需要這些信息的對(duì)象"[1]。因此,研究和設(shè)計(jì)嵌入式網(wǎng)絡(luò)通信將具有十分重要的價(jià)值。本文以LPC1768、DP83848CVVP芯片搭建硬件平臺(tái),構(gòu)建以μC/OS-Ⅱ、LwIP為基礎(chǔ)的軟件系統(tǒng),在此基礎(chǔ)上實(shí)現(xiàn)web服務(wù),從而達(dá)到通過(guò)瀏覽器對(duì)其進(jìn)行訪問(wèn)的目的。

1 μC/OS-Ⅱ系統(tǒng)分析及移植

μC/OS-Ⅱ是由美國(guó)人Jean J.Labrosse編寫的一個(gè)公開(kāi)源代碼的微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng),其實(shí)時(shí)性能和內(nèi)核的健壯性早已經(jīng)在大量的實(shí)際應(yīng)用中得到了證實(shí)。具有如下特點(diǎn):①公開(kāi)源代碼,②移植性好,③可裁剪,④穩(wěn)定性和可靠性高。

1.1 μC/OS-Ⅱ系統(tǒng)分析

μC/OS-Ⅱ是多任務(wù)系統(tǒng),內(nèi)核負(fù)責(zé)管理各個(gè)任務(wù),每個(gè)任務(wù)都有其優(yōu)先級(jí),μC/OS-Ⅱ最多可以管理64個(gè)任務(wù),其每個(gè)任務(wù)都擁有自己獨(dú)立的堆棧。μC/OS-Ⅱ提供了非常豐富的系統(tǒng)服務(wù)功能,比如信號(hào)量、消息郵箱、消息隊(duì)列、事件標(biāo)志、內(nèi)存管理和時(shí)間管理等,這些功能可以幫助用戶實(shí)現(xiàn)非常復(fù)雜的應(yīng)用。

1.2 μC/OS-Ⅱ移植

μC/OS-Ⅱ作為操作系統(tǒng),全部源代碼大約是6000~7000行,文件結(jié)構(gòu)如圖1所示,移植主要是處理與處理器相關(guān)的源文件,即 os_cpu_c.c,os_cpu_a.s,os_cpu.h。其中 os_cpu.h 主要包含編譯器相關(guān)的數(shù)據(jù)類型的定義、堆棧類型的定義以及幾個(gè)宏定義和函數(shù)說(shuō)明,為了便于移植,須重新定義數(shù)據(jù)類型,因?yàn)椴煌木幾g器所提供的同一數(shù)據(jù)類型的數(shù)據(jù)長(zhǎng)度并不相同。os_cpu_c.c文件中主要實(shí)現(xiàn)任務(wù)堆棧的初始化函數(shù)OSTaskStkInit(),任務(wù)創(chuàng)建函數(shù)通過(guò)調(diào)用函數(shù)OSTaskStkInit()初始化任務(wù)堆棧結(jié)構(gòu)。在os_cpu_a.s文件中需要根據(jù)具體的硬件處理器實(shí)現(xiàn)幾個(gè)匯編函數(shù)OSstartHighRdy()、OSCtxSw()、OSIntetxsw以及臨界處理函數(shù)OS_CPU_SR_Save,OS_CPU_SR_Restore。尤其需要注意的是,由于LPC1768是cortex-m3內(nèi)核,故OSCtxSw()、OSIntetxsw函數(shù)都是通過(guò)觸發(fā)pendsv(可掛起中斷服務(wù))來(lái)完成,它負(fù)責(zé)μC/OS-II的全部上下文切換。

圖1 μC/OS-Ⅱ系統(tǒng)文件結(jié)構(gòu)

2 LPC1768的網(wǎng)絡(luò)接口設(shè)計(jì)

由于LPC1768的以太網(wǎng)控制器只集成了介質(zhì)訪問(wèn)控制器(MAC),缺少物理層(PHY),故本系統(tǒng)選用的 PHY芯片為DP83848CVV芯片,由 National Semiconductor公司生產(chǎn),RJ45接口選用 HanRun公司生產(chǎn)的 HR911105A接口。DP83848CVV、HR911105A與LPC1768的硬件連接示意圖如圖2所示。1768的以太網(wǎng)模塊使用RMII(簡(jiǎn)化的媒體獨(dú)立接口)協(xié)議和片上MIIM(媒體獨(dú)立接口管理)串行總線、MDIO(管理數(shù)據(jù)輸入/輸出)來(lái)實(shí)現(xiàn)與片外PHY之間的連接,MIMM接口可對(duì)PHY寄存器進(jìn)行訪問(wèn)。RMII對(duì)應(yīng)的引腳為 ENET_TX_EN、ENET_TXD[1:0]、ENET_RXD_[1:0]、ENET_RX_ER、ENET_CRS、ENET_REF_CLK,接口MIMM對(duì)應(yīng)的引腳為ENET_MDC、ENET_MDIO。需要注意的是使用DP83848CVV芯片的RMII模式必須外接50MHz的有源晶振。

圖2 LPC1768網(wǎng)絡(luò)連接示意圖

3 LwIP介紹

LwIP是瑞士計(jì)算機(jī)科學(xué)院(Swedish Institute of Computer Science)Adam Dunkels等開(kāi)發(fā)的一套用于嵌入式系統(tǒng)的開(kāi)放源代碼TCP/IP協(xié)議棧。

3.1 LwIP協(xié)議棧的體系結(jié)構(gòu)

LwIP的體系結(jié)構(gòu)如圖3所示,由圖可知:LwIP由一些相對(duì)獨(dú)立的模塊組成,除TCP/IP協(xié)議的實(shí)現(xiàn)模塊(IP、ICMP、UDP、TCP)外,還包括許多相關(guān)的支持模塊,這些支持模塊包括操作系統(tǒng)模擬層、緩沖與內(nèi)存管理模塊、網(wǎng)絡(luò)接口函數(shù)以及一組Intemct校驗(yàn)和計(jì)算函數(shù)、API接口函數(shù)。

圖3 LwIP協(xié)議棧體系結(jié)構(gòu)

3.2 LwIP移植:實(shí)現(xiàn)操作系統(tǒng)模擬層

LwIP的操作系統(tǒng)模擬層(sys_arch)是底層操作系統(tǒng)和LwIP之間的一個(gè)接口,為L(zhǎng)wIP提供信號(hào)量和郵箱2種進(jìn)程間通信方式。當(dāng)用戶移植LwIP時(shí),只需修改這個(gè)接口即可。主要實(shí)現(xiàn)以下幾種類型的函數(shù),分別是信號(hào)量操作函數(shù)、郵箱操作函數(shù)、臨界保護(hù)函數(shù)、sys_thread_new()函數(shù)、sys_arch_timeouts()函數(shù)。由于μC/OS-II提供了創(chuàng)建任務(wù)函數(shù)、臨界保護(hù)函數(shù)以及豐富的信號(hào)量和郵箱操作函數(shù),所以只需對(duì)這些函數(shù)稍加修改,便可實(shí)現(xiàn)LwIP操作系統(tǒng)模擬層的函數(shù)。

3.3 LwIP協(xié)議棧的TCP通信流程

TCP屬于傳輸層協(xié)議,它為應(yīng)用層提供可靠的字節(jié)流服務(wù),建立在TCP協(xié)議之上的應(yīng)用層協(xié)議有 HTTP等。本文采用的是HTTP協(xié)議。基本的TCP處理過(guò)程被分割為6個(gè)功能函數(shù)來(lái)實(shí)現(xiàn):tcp_input()、tcp_process()、tcp_receive()、tcp_write、tcp_enqueue、tcp_output。實(shí)現(xiàn)框圖如圖4所示。

圖4 TCP層通信流程

3.4 LwIP主線程tcpip_thread

主線程tcpip_thread是一個(gè)主控循環(huán),底層接口函數(shù)通過(guò)tcpip_thread和lwip的內(nèi)部函數(shù)進(jìn)行通信,比如在進(jìn)行tcp傳輸時(shí),底層接口函數(shù)通過(guò)傳遞郵箱mbox的方式進(jìn)入到tcpip_thread,然后在該函數(shù)中,進(jìn)入tcp層的tcpip_input函數(shù)中,實(shí)現(xiàn)tcp層的傳輸。

3.5 LwIP API

LwIP API專為L(zhǎng)wIP設(shè)計(jì),所以它可以充分利用LwIP的內(nèi)部結(jié)構(gòu)以實(shí)現(xiàn)其設(shè)計(jì)目標(biāo),不需要在應(yīng)用程序和協(xié)議棧之間復(fù)制數(shù)據(jù),因此應(yīng)用程序可以巧妙地直接處理內(nèi)部緩沖區(qū)。LwIP API使用2種數(shù)據(jù)類型,分別為:①、netbuf,描述網(wǎng)絡(luò)緩存的數(shù)據(jù)類型,對(duì)應(yīng)的函數(shù)為netbuf_new()、netbuf_delete()、netbuf_alloc()等;②、netconn,描述網(wǎng)絡(luò)連接的數(shù)據(jù)類型,對(duì)應(yīng)的函數(shù)為netconn_new,netconn_delete()、netconn_bind,netconn_connect()、netconn_accept()等。LwIP的上層應(yīng)用程序是基于LwIP API編寫的。

4 HTTP協(xié)議

超文本傳送協(xié)議(HTTP)是實(shí)現(xiàn)www的應(yīng)用層協(xié)議,HTTP負(fù)責(zé)web服務(wù)器與web客戶(瀏覽器)之間的實(shí)際超文本文檔的傳送。

4.1 HTML 語(yǔ)言

網(wǎng)頁(yè)就是一個(gè)HTML語(yǔ)法格式的純文本文檔,HTML是網(wǎng)絡(luò)所基于的標(biāo)準(zhǔn)的格式化語(yǔ)言。HTML文檔與網(wǎng)頁(yè)在瀏覽器的顯示并不相同,瀏覽器顯示的是對(duì)HTML文檔的解釋。

4.2 HTTP 報(bào)文格式

一個(gè)HTTP事物包含一個(gè)HTTP請(qǐng)求和一個(gè)HTTP應(yīng)答報(bào)文,這兩種報(bào)文都遵循一個(gè)通用結(jié)構(gòu),被稱為HTTP報(bào)文格式,如圖5所示。由圖可知,請(qǐng)求行是HTTP請(qǐng)求報(bào)文的起始行,用于指示命令或客戶要求服務(wù)器執(zhí)行的動(dòng)作、方法、要引用的資源以及客戶使用的HTTP版本。該行格式如下:<IMETHOD> <I請(qǐng)求的URI> <IHTTP版本>,其中方法(method)告知服務(wù)器要執(zhí)行的動(dòng)作。方法的種類有"get"、"post"、"HEAD"等。本系統(tǒng)實(shí)現(xiàn)的是利用"get"請(qǐng)求向服務(wù)器提取網(wǎng)頁(yè)。

圖5 HTTP報(bào)文格式

5 系統(tǒng)實(shí)現(xiàn)

本系統(tǒng)的實(shí)現(xiàn)是通過(guò)在μC/OS-Ⅱ下建立的4個(gè)任務(wù)完成,分別是:①起始任務(wù)task_start(),優(yōu)先級(jí)為0,用于創(chuàng)建其他3個(gè)任務(wù)并進(jìn)行LwIP、EMAC的初始化,執(zhí)行之后被掛起,永不再執(zhí)行;② 底層硬件接收任務(wù)ethernetif_input(),優(yōu)先級(jí)為4;③ tcpip_thread()任務(wù),優(yōu)先級(jí)為1;④ http_server任務(wù),優(yōu)先級(jí)為10。任務(wù)②、③、④依靠μC/OS-Ⅱ下的信號(hào)量sem和郵箱mbox進(jìn)入就緒態(tài),否則被掛起。如圖6所示:

圖6 ethernetif_input、tcpip_thread、http_server通信流程

當(dāng)本系統(tǒng)上電時(shí),由于此時(shí)瀏覽器并沒(méi)有發(fā)送數(shù)據(jù),網(wǎng)絡(luò)接口沒(méi)有數(shù)據(jù),故沒(méi)用中斷發(fā)生,sem和mbox無(wú)法投遞,所以此時(shí)這3個(gè)任務(wù)完全由μC/OS-II內(nèi)核的系統(tǒng)定時(shí)器中斷依據(jù)優(yōu)先級(jí)而發(fā)生切換,程序流程如圖7。tcpip_thread的優(yōu)先級(jí)最高,tcpip_thread首先被運(yùn)行,但由于沒(méi)有郵箱被投遞,故該任務(wù)隨之被掛起,在內(nèi)核調(diào)度的作用下,ethernetif_input()任務(wù)開(kāi)始運(yùn)行,同理,sem也沒(méi)有投遞,隨之掛起,然后進(jìn)入到http_server任務(wù),隨之也被掛起,此時(shí)系統(tǒng)進(jìn)入空閑任務(wù),等待中斷的發(fā)生,即等待瀏覽器的訪問(wèn)。

圖7 未發(fā)生中斷時(shí),系統(tǒng)程序流程圖

web服務(wù)器的實(shí)現(xiàn):

http_server任務(wù)是基于lwip API編程的,程序流程如圖8所示,由圖可以看出,在進(jìn)入到netconn_accept函數(shù)時(shí),等待郵箱accept_mbox的到來(lái),否則被掛起。accept_mbox郵箱是在瀏覽器和服務(wù)器三次握手之后由accept_function()投遞,此時(shí)程序進(jìn)入netconn_recv()函數(shù),等待recv_mbox的到來(lái)。recv_mbox的投遞發(fā)生在數(shù)據(jù)被傳至tcp層時(shí),由 recv_tcp函數(shù)投遞的。一旦 recv_mbox被 post,則進(jìn)入到netbuf_data()函數(shù),用于獲得接收數(shù)據(jù)指針,這個(gè)指針指向netbuf的第一個(gè)數(shù)據(jù)片段且這個(gè)片段包含HTTP請(qǐng)求,若是"get"請(qǐng)求,則發(fā)送網(wǎng)頁(yè),若不是則關(guān)閉連接,等待下一個(gè)連接到來(lái)。

圖8 http_server任務(wù)流程圖

6 結(jié)束語(yǔ)

本文詳細(xì)介紹了利用LPC1768以太網(wǎng)控制模塊,在μC/OS-II操作系統(tǒng)的基礎(chǔ)上,移植LwIP協(xié)議棧,搭建嵌入式web服務(wù)器的過(guò)程。由于搭建的web服務(wù)器具有網(wǎng)頁(yè)數(shù)據(jù)動(dòng)態(tài)顯示功能,可以滿足一般的嵌入式設(shè)備進(jìn)行遠(yuǎn)程監(jiān)控,所以本系統(tǒng)實(shí)現(xiàn)對(duì)嵌入式設(shè)備的遠(yuǎn)程檢測(cè)和控制具有很好的借鑒意義。

[1] 李紀(jì)栓.嵌入式INTERNET接入模塊的設(shè)計(jì)[J].機(jī)械管理開(kāi)發(fā),2006,5.

[2] 焦海波,劉健康.嵌入式網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)-基于Atmel ARM7系列[M].北京:北京航空航天大學(xué)出版社,2008.4.

[3] (美)JEAN J.LABROSSE.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II(第2版)[M].邵貝貝譯.北京:北京航空航天大學(xué)出版社,2003.5.

[4] 鄭巨明,張和生,賈利民等.基于μC/OS-II和LwIP的嵌入式以太網(wǎng)接口設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2009,17(11).

[5] 熊海泉.μ C/OS II下LwIP協(xié)議的移植實(shí)現(xiàn)[J].科技廣場(chǎng),2005.2.

[6] 蘇義鑫,毛曉磊.uIP在S3C44B0X上的移植研究及webserver實(shí)現(xiàn)[J].微型電腦應(yīng)用,2008,24(2).

猜你喜歡
瀏覽器以太網(wǎng)郵箱
基于1500以太網(wǎng)養(yǎng)豬場(chǎng)的智能飼喂控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
反瀏覽器指紋追蹤
沒(méi)問(wèn)題郵箱
談實(shí)時(shí)以太網(wǎng)EtherCAT技術(shù)在變電站自動(dòng)化中的應(yīng)用
關(guān)于停止使用dianxunjishu@china.com郵箱的通知
環(huán)球?yàn)g覽器
一種90W高功率以太網(wǎng)供電系統(tǒng)的設(shè)計(jì)
淺談EPON與工業(yè)以太網(wǎng)在貴遵高速公路中的應(yīng)用
郵箱變更
《胃腸病學(xué)》郵箱更改啟事