基于Cortex-M3內(nèi)核處理器的嵌入式Web服務(wù)器設(shè)計(jì)
一旦W5100的Socket端口有中斷事件產(chǎn)生時(shí),W5100將通過其中斷引腳INT觸發(fā)STM32的外部中斷,使STM32進(jìn)入外部中斷處理函數(shù)改變WInterFlag,程序接著進(jìn)入處理W5100中斷事件函數(shù),在此函數(shù)中,STM32通過訪問W5100的中斷寄存器(IR)和端口0中斷寄存器(S0_IR)判斷出W5100的端口0產(chǎn)生何種中斷事件,若Socket接收到數(shù)據(jù),則改變SockRecvFlag。
本文引用地址:http://m.butianyuan.cn/article/106453.htm程序檢測(cè)到SockRecvFlag發(fā)生改變,立即進(jìn)入處理接收數(shù)據(jù)函數(shù)。處理接收數(shù)據(jù)函數(shù)是整個(gè)程序的核心,它主要負(fù)責(zé)收發(fā)數(shù)據(jù)、解析HTTP協(xié)議和響應(yīng)用戶的不同請(qǐng)求。圖5為該過程的程序流程圖。
數(shù)據(jù)處理程序
HTTP協(xié)議是一種請(qǐng)求/響應(yīng)協(xié)議。在基于HTTP的客戶/服務(wù)器數(shù)據(jù)交換時(shí),當(dāng)HTTP請(qǐng)求產(chǎn)生時(shí),就開始一次HTTP通信。過程如下:瀏覽器提取出URL中的主機(jī)后,向DNS發(fā)出請(qǐng)求,解析主機(jī)名的IP地址;DNS解析地址并將結(jié)果返回給瀏覽器;瀏覽器向該地址請(qǐng)求建立TCP連接;瀏覽器發(fā)出請(qǐng)求報(bào)文;服務(wù)器向?yàn)g覽器發(fā)送響應(yīng)報(bào)文,并將指定數(shù)據(jù)發(fā)送給瀏覽器;斷開連接。
根據(jù)HTTP協(xié)議規(guī)定,如果客戶端沒有發(fā)出請(qǐng)求,則服務(wù)器不會(huì)自動(dòng)發(fā)送頁面。因此通過在網(wǎng)頁程序中加入標(biāo)記,使瀏覽器在無用戶干預(yù)下周期性地刷新頁面,從而保證用戶及時(shí)地獲得遠(yuǎn)程現(xiàn)場(chǎng)的信息。
HTTP消息包括一個(gè)起始行、零個(gè)或多個(gè)消息頭域、一個(gè)標(biāo)示頭域結(jié)束的實(shí)體行和一個(gè)可能存在的消息體。本程序主要解析消息的起始行,而忽略其它內(nèi)容,這種處理思路也符合嵌入式系統(tǒng)硬件對(duì)軟件實(shí)現(xiàn)的復(fù)雜度要求。請(qǐng)求方法決定了對(duì)請(qǐng)求URI所指定的資源進(jìn)行操作的方式,GET方法讀取URL指定的資源,一般用來向服務(wù)器傳輸少量且透明的數(shù)據(jù),數(shù)據(jù)總量被限制在255個(gè)字符以內(nèi),而POST方法可傳輸大量數(shù)據(jù),與HTML的表單特性相配合以實(shí)現(xiàn)遠(yuǎn)程動(dòng)態(tài)交互控制。
當(dāng)連接開始時(shí),客戶端發(fā)送GET方法請(qǐng)求給服務(wù)器,以訪問服務(wù)器網(wǎng)頁,為限定特定用戶訪問,增加數(shù)據(jù)安全性,在網(wǎng)頁中加入基本認(rèn)證機(jī)制。當(dāng)客戶端請(qǐng)求受基本認(rèn)證機(jī)制保護(hù)的網(wǎng)頁時(shí),服務(wù)器即要求用戶認(rèn)證,服務(wù)器端對(duì)用戶的登陸信息按Base64碼解碼,只有認(rèn)證成功,瀏覽器才能獲得正確的網(wǎng)頁數(shù)據(jù)。正確的控制網(wǎng)頁如圖6所示,若用戶信息有誤,服務(wù)器返回以狀態(tài)碼401為起始行的響應(yīng)消息。
由于服務(wù)器端檢測(cè)的數(shù)據(jù)處在不停的變化之中,為使網(wǎng)頁的數(shù)據(jù)也能及時(shí)地更新,網(wǎng)頁程序初始化時(shí),要顯示的數(shù)據(jù)都使用字符串標(biāo)記暫時(shí)表示,在每次發(fā)送響應(yīng)消息到端口前,再將網(wǎng)頁中定義字符串標(biāo)記用當(dāng)前設(shè)備的實(shí)際值替換。
對(duì)LED的控制,網(wǎng)頁程序采用HTML語言的表單,HTTP協(xié)議請(qǐng)求方法采用POST。POST作為請(qǐng)求方法時(shí),首先和Web服務(wù)器建立連接,成功后瀏覽器將HTML表單中的值發(fā)送給Web服務(wù)器。這種方式?jīng)]有字符長度的限制,表單數(shù)據(jù)是作為附加的文檔發(fā)送而不是作為URL的一部分發(fā)送。服務(wù)器程序通過判斷客戶的不同控制命令即時(shí)做出LED燈的開關(guān)響應(yīng)。
在每次連接成功后,服務(wù)器端程序會(huì)返回以狀態(tài)碼200開頭的響應(yīng)消息,消息的起始行為:HTTP/1.1 200 OK。當(dāng)用戶請(qǐng)求一個(gè)服務(wù)器端不存在的文件時(shí),服務(wù)器返回以狀態(tài)碼404開頭的響應(yīng)消息。
結(jié)語
這種利用硬件實(shí)現(xiàn)TCP/IP協(xié)議的網(wǎng)絡(luò)芯片W5100及具有Cotex-M3內(nèi)核的STM32處理器構(gòu)成嵌入式Web服務(wù)器的方案性價(jià)比高。通過網(wǎng)絡(luò),用戶在瀏覽器端可及時(shí)收到遠(yuǎn)程現(xiàn)場(chǎng)傳感器采集的數(shù)據(jù),遠(yuǎn)程現(xiàn)場(chǎng)的開關(guān)狀態(tài)指示燈可實(shí)時(shí)地響應(yīng)用戶的開關(guān)信號(hào)操作請(qǐng)求。測(cè)試表明該系統(tǒng)傳輸大塊數(shù)據(jù)文件的速率可達(dá)到100kbit/s。為提高網(wǎng)絡(luò)資源的安全性,可采用AES(先進(jìn)加密標(biāo)準(zhǔn))等編碼機(jī)制來加密必須保護(hù)的私有數(shù)據(jù)。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論