<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于SOPC 的嵌入式Web 服務器設計與實現(xiàn)

          基于SOPC 的嵌入式Web 服務器設計與實現(xiàn)

          作者: 時間:2012-08-16 來源:網(wǎng)絡 收藏

          在本中uC/OS-II主要完成任務的管理與調度,在網(wǎng)絡協(xié)議棧初始化后,使用標準套接字API創(chuàng)建新任務訪問網(wǎng)絡協(xié)議棧。在本中使用函數(shù)sys_thread_new()創(chuàng)建DHCP超時任務dhcp_timeout_task()來動態(tài)分配IP地址,創(chuàng)建HTTP任務http_task()管理HTTP連接并調用相關的子程序來為HTTP請求服務。這里使用的sys_thread_new()位于LwIP的操作系統(tǒng)封裝層,實際上是調用uC/OS-II的OSTaskCteate()函數(shù)。通過創(chuàng)建消息郵箱、信號量任務與任務之間、任務與中斷服務程序之間的同步與互斥,以保證它們協(xié)調運行。

          5.2、LwIP網(wǎng)絡協(xié)議棧的

          LwIP(輕量級網(wǎng)絡協(xié)議)是TCP/IP協(xié)議棧的一個。LwIP是一種專門針對系統(tǒng)應用而的網(wǎng)絡通信協(xié)議,由于LwIP實現(xiàn)的關鍵在于削減代碼大小和內存消耗,但可以完成傳統(tǒng)的TCP/IP協(xié)議的大部分功能,通常只需要大約40K的ROM和數(shù)十K的RAM即可運行。在保持協(xié)議分層體系結構的前提下,通過采用“零拷貝”技術提高實時性。

          Nios II支持LwIP使用如下的3個基本任務[2]。這些任務在程序創(chuàng)建時添加后連續(xù)運行:首先,被協(xié)議棧使用的主任務。這個任務用來接收包,任務模塊的主函數(shù)用于等待消息郵箱。當一個新的包到來時,產生一個中斷請求,中斷服務程序清除IRQ并且向消息郵箱發(fā)送一個消息。其次,新的消息激活接收任務。這一設計可以使中斷服務程序盡可能快的執(zhí)行,從而減少系統(tǒng)延時的影響。最后,實時器任務在于周期性地調用各種任務所需的時間。上述這些任務將在初始化成功后自動運行。系統(tǒng)初始化后,進入主程序部分。主程序包括兩大部分:對接收到的以太網(wǎng)數(shù)據(jù)幀進行解包和對欲發(fā)送的數(shù)據(jù)進行封裝并發(fā)送。圖4為軟件框圖。

          圖4 軟件框架圖

          6、結語

          經測試,本設計可以正常工作,達到了預期的效果。,其功能可根據(jù)需要定制,非常靈活。該不僅可以廣泛應用于工業(yè)控制領域,實現(xiàn)小型工業(yè)監(jiān)測系統(tǒng)網(wǎng)絡化,具有良好的應用前景。

          作者創(chuàng)新點:本文介紹了軟核處理器的Web服務器實現(xiàn)方法,使設計變得靈活,操作系統(tǒng)的引入,滿足了設計對實時性的要求。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();