摘要:介紹了如何利用現有軟件虛擬模擬高效構筑可現場控制的嵌入式Web服務器,一些方法也可用于其他資源有限的小型嵌入式網絡設備中。 隨著互聯網的日益普及,信息共享的程度不斷提高,網絡儀表及網絡控制設備的流行逐漸成為趨勢。如何通過互聯網共享以單片機應用系統為中心的小型嵌入式設備的信息,成為當今電子界的熱門話題。傳統的互聯網應用以PC為中心。如今,互聯網應用正在轉到以嵌入式設備為中心。用單片機實現嵌入式互聯網方案的技術難點是:如何利用單片機本身有限的資源對信息進行TCP/IP協議處理,使之變成可以在互聯網上傳輸的IP數據包。目前解決這個問題有兩種方案:一種是PC網關+專用網,缺點是要增加布線和第三方協議轉換軟件;另一種是32位MCU+RTOS,弊端是開發難,成本極高。而用軟件方法實現網絡協議比采用集成網絡協議的芯片,具有節省空間、降低成本的優點,更重要的是可以隨意配置甚至修改各種協議,且能通過軟件升級方式跟隨未來的發展。八位單片機目前仍占有很大的市場份額,而通過美國Ubicom公司的SX52微控器進行網絡控制更具其獨特優勢,主要體現在:(1)速度快,在100MHz頻率下能達到100MIPS;(2)現成的協議模塊供使用,即使對不熟悉網絡協議的開發人員也能簡單套用。雖然其它八位單片機也能用軟件實現精簡的TCP/IP協議,如PICl6C76等,但上面所說兩大優點是采用SX52MCU的充分理由。套用成熟的現有程序是最具效率的開發辦法,這也是避免目前國內普遍存在的低水平開發的有效途徑。雖然目前還沒有單獨的TCP/IP軟件虛擬模塊提供,但在演示板程序的基礎上,可以采用其成功的網絡協議模塊和一些適用于小型嵌入系統的做法構筑現場控制Web服務器。 1 SX52控制器簡介 SX52 MCU與PIC單片機有很多地方相似,它也采用RISC指令系統,帶可擦寫上萬次的片上Flash程序存儲器,具在系統編程等。SX52的流水線指令操作可1個時鐘周期執行一條指令。沒有中斷嵌套使中斷響應時間固定為3個時鐘周期,適用于一些要求強實時性的系統。5個可驅動30mA電流的I/O口可自由設置為TI'L或CMOS輸入電子,262×8bit的SRAM數據空間,4096×12bit的EE/Flash程序空間。內部集成有模擬比較器、定時器、捕捉/PWM比較器、欠壓檢測、看門狗等多種功能部件。具有三個特殊器件配置寄存器,其長度分別為12位,(FUSE、FUSEX、DEVICE),硬件配置靈活多樣,加密性能好,能有效地防止產品被盜版或仿制的可能性。已提供的軟件虛擬模塊有UART、A/D、DTMF、PWM、FSK、IRDA、VC等眾多常用功能塊。應用微控器用軟件方法替代硬件功能是一大特色,可以避免一些常用功能的重復開發。 對于資源緊缺的小型嵌入系統,一般都要對TCP/IP協議族做一些精簡處理。Wing Poon等提供的演示板程序集合了如下模塊:ARP、DHCP、ICMP的echo響應,精簡的TCP/IP、HTYP、SMTP等;還可以看到應用了I2C以及∑-△A/D的軟件虛擬模塊。由于程序空間的限制,當實現DHCP時,只能用SMTP。底層采用8019AS網絡接口芯片。網頁通過12C存儲于24C256中,中斷程序可用于A/D虛擬模塊的計數及TCP/IP協議族的各個定時器。 系統設計主程序流程如圖1。當IP包頭有選項或存在分片時,此包被簡單丟棄而不處理。TCP能同時打開兩個連接,連接1用于SMTP(套接字用Bank 3,TCBI_BANK),連接2用于HTTP(套接字用Bank 4,TCB2_BANK)。TCP不使用滑動窗口的流量控制,發送時每發一個分組就停下來等待確認。程序中發送的數據長度放在變量Tcp2Un-AckMSB、Tcp2UnAckLSB中。在接收模塊TcpProcPktln中只有接收到Ack包后才復位這兩個變量;而發送模塊Tcp·Transmit中只有這兩個變量為零才允許發送下一段數據,否則檢查Tcp2TimeMSB是否超時;如是則重發。TCP接收模塊TcpProcPktln檢查端口號及32序列號是否與套接字內的相符,如不符則可能是收到重發的包,TCP簡單地發Ack的空包并丟棄本包;否則處理本包數據同時清除上次發送數據長度變量Tcp2UnAckMSB、Tcp2UnAckLSB,以便在TcpTransmit中能發送下一段數據。 子模塊TcpAppTxBytes、TcpAppRxData是TCP處理發送及接收數據的模塊。用戶如不變更原TCP/IP的精簡設計,只要修改這兩個模塊就能實現自己特定的應用功能。 16位校驗和Checksum的計算對于很少或沒有數據緩沖的系統來說并不容易,一般有兩種方法處理。一是在TCP頭的檢驗和域放任意一個16位數,數據發送的同時計算Checksum,然后在數據最后附加2個字節以保證之前任意取值的正確。這種方法的缺點是要讓接收的應用程序忽略最后2個字節的數據,可能導致許多程序的運行異常。二是先對產生的數據計算Checksum,但不發送,然后再產生同樣的數據加上正確的校驗和發送。顯然要求系統產生重復的數據有時是不現實的,利用網卡芯片8019的緩沖可以解決這一問題,將數據寫入8019的同時計算Checksum,最后將Checksum寫入8019后調用NicSendTxFrame才真正發送數據。 3 Web服務器實現 TCP在Web服務器下采用的狀態轉移見圖2。 (1)服務器在closed狀態下主動打開端口80進入listen狀態; (2)經過3次常規握手后進人establish的數據傳送狀態; (3)服務器發完數據發fin關閉請求進入fin wait-1狀態; (4)收到對方發來的Ack后進入fin wait-2狀態; (5)收到對方發來的fin關閉請求后回送Ack回到closed狀態。 考慮HTYP常用的abs_單片機 嵌入式系統 Internet Web服務器形式的統一資源標識符URI,在資源緊缺的系統中實現完整的文件結構如"images.gif''的查詢與定位,如果采用一般計算機程序中常用的方法則代價很高。一種簡便有效的方法是計算URI各字符的ASCII碼之和。網頁存放于SX52的外部EEPROM中。假設利用前512字節存放最大256個網頁的地址,絕對路徑".btm"的不帶進位ASCII碼之和為#$be,可以到2x#$be+#$17c的地方找到要發送回客戶瀏覽器的數據存放地址;下載網頁到服務器時也用一個程序按上述方法將各網頁排好即可,當然網頁前都加了一段HTYP 1.0的標準響應頭信息。這正是Ubicom公司提供的E2File程序所做的,也可以自己編寫一個這樣的程序以實現HTFP 1.1的除GET、POST方法外的其它方法或擴展功能。 除了用Java Applet實現動態網頁外,利用post方法也可與服務器交互。例如通過IE瀏覽器用復選框按鈕控制并顯示一組燈的開與關的基本Web控制,其HTML網頁的提交表單FORM內應該包含有的類似語句,其中0~n為欲控制燈的編號,name的取值為一位數字或字符,有利于節省SX52的查詢匹配程序空間,E2File程序將網頁中如下顯示燈的狀態的HTML超鏈接語句 (5)在模塊TcpAppRxData的分支:lookforl的開頭增加以下語句: 當然以上密碼通過IE仍以明文傳送,不安全,但是它可以通過常用的IE瀏覽器操作,不需要專用的客戶端軟件。這適用于大企業,它們有局域網,電腦上只能用固定的幾種軟件。當然編寫客戶端軟件加入加密解密算法來適應各種應用環境也是容易實現的。用SX52構建各種小型的現場控制Web服務器只要合理利用相應的網絡協議軟件虛擬模塊,參照演示板的做法在應用子模塊TcpAppTxBytes、TcpAppRxData中對發送及接收數據按照自己特定的要求做處理即可。它還可以通過UDP的方式同時與客戶端軟件傳送語音或視頻數據流,只要增加很少的外圍接口電路并改動相應的UDP處理模塊UDPProcPktIn即可。而如果未來協議的更新也只要下載最新的程序替換即可,開發人員單獨修改特定協議模塊的一些實現方式如增加滑動窗口的TCP/IP等也比重新編寫一個完整的協議族遠為輕松。 |
- 快速實現(4946)
一種嵌入式Web服務器的設計方案
7784實現嵌入式Web服務器設計的方法
嵌入式WEB服務器的相關資料分享
嵌入式Web服務器BOA怎么在ARM9上移植?
嵌入式Web服務器Embedthis Appweb 4.2.0相關資料下載
嵌入式Web服務器為什么不使用jetty
嵌入式Web服務器的設計與實現
嵌入式FTP服務器能實現什么功能?
S3C2440是如何去移植嵌入式Web服務器的
介紹嵌入式Web服務器的工作原理
在嵌入式設備中所使用的web服務器主要有哪些
基于ARM和Linux的嵌入式Web服務器的構建及應用
基于Android的嵌入式Web服務器該怎么設計?
基于Linux的WEB服務器增加了哪些功能?
如何實現嵌入式Web服務器的設計?
如何實現對嵌入式WEB服務器系統的控制設計
如何移植web服務器呢
如何配置嵌入式服務器
常見的嵌入式web服務器有哪些
請問怎樣去設計一種嵌入式Web服務器系統?
采用嵌入式處理器PXA270與ARM-Linux相結合的Web服務器構建
采用GR47和MCU實現無線嵌入式Web Server
基于ARMLinux新型嵌入式Web服務器設計
17嵌入式Web 服務器的分析與研究
20CAN 總線的嵌入式Web 服務器設計
14基于嵌入式WEB的AllLightSYS系統的設計與實現
4嵌入式WEB服務器中TCP/IP協議棧的設計與實現
35用SVG技術實現動態圖形輸出的嵌入式Web服務
19基于嵌入式Web實時監控系統的設計
31低成本嵌入式web服務器的研究
11基于嵌入式web服務器的UPS監測系統
11基于ARM的嵌入式Web服務器的研究與實現
37嵌入式Web服務器Boa的移植及其應用
56基于SOPC的嵌入式Web服務器設計與實現
33基于ARM的嵌入式Web服務器技術研究
27ARM平臺上嵌入式Web服務器實現
30基于Linux的WEB服務器的設計與實現
21基于ARM9的嵌入式Web服務器的移植和應用
64嵌入式WEB服務器及遠程測控應用方案V0.1
36嵌入式Web服務器的設計與研究
17嵌入式Web服務器移植與測試
27CAN總線的嵌入式Web服務器設計
1245
一種嵌入式WEB服務器的設計與實現
1192
基于Linux的WEB服務器的設計與實現
3224
嵌入式Web服務器的實現及其CGI應用
79基于Android的嵌入式Web服務器設計
177嵌入式Web服務器BOA在arm9嵌入式系統設備板上的移植
7基于嵌入式系統的Web服務器建立設計
3731
嵌入式Web服務器BOA移植與測試設計概述
2348
基于ARM的嵌入式Web服務器的設計方案
27學習Spring Boot 嵌入式服務器
7嵌入式web服務器
9嵌入式設備web服務器比較
5嵌入式linux瀏覽器移植,嵌入式Linux WEB服務器BOA的移植方法
10嵌入式web服務器系統設計,嵌入式Web服務器的設計與實現
3arm嵌入式web服務器 性能,基于ARM的嵌入式Web服務器的設計與實現
11嵌入式web服務器系統設計,基于-ARM簡單嵌入式WEB服務器系統設計.doc
21嵌入式項目web服務器,嵌入式WEB服務器
10嵌入式web服務器系統,嵌入式Web服務器的設計與實現
27常見的嵌入式WEB服務器介紹
7149嵌入式Web服務器的 STM32 固件更新代碼
17
電子發燒友App


中的"?"編號為非ASCII字符#$f0~#$fn等下載存儲到服務器的EEPROM中。當n用POST方法發送數據給服務器時,SX52服務器計算兩個空格間的abs_單片機 嵌入式系統 Internet Web服務器形式的URI的ASCII字符之和后到相應EEPROM中,用上述下載網頁的計算方法找到該網頁的地址后,跳過HTTP的請求頭匹配l=0&…l=n表示復選框被選中的數據并對相應編號的燈開關后,返回該網頁給IE時會根據實際燈的狀態將EEPROM中存儲網頁的非ASCII字符#$f0~#$fn退換為ASCII字符"n"或"f"。這樣IE就能正確地通過超鏈接再次與服務器交互(GET方法),下載顯示ledon.gif或ledof.gif顯示實際燈的狀態了。而要在IE上正確顯示現場某個控制變量的值時,同樣可以將n位顯示數值編號為非ASCII字符#$f0#$fl…#$fn的形式存儲到服務器中,SX52服務器端先將實際的數值轉換為BCD碼后再用對應的ASCII字符將#Sf0#$f1…#$fn替換返回,從而能在瀏覽器端顯示服務器端控制變量的變化。國內用戶使用的北京革新提供的開發演示板程序較充分地提供了常用的Intemet網絡協議軟件虛擬模塊,也提供了一個基本可實際應用的Web演示控制,只要做較少改動就可以用于實際控制中。不過它只能一次控制一個燈的開關,且任何人都可以輕易地更改。現要求一次能控制所有的燈,但需要在IE瀏覽器上輸入密碼123abc方可生效。程序修改如下:

評論