lwip

lwip

輕量級IP協議棧
lwip是瑞典計算機科學院(SICS)的AdamDunkels開發的一個小型開源的TCP/IP協議棧。lwipAPI把接收與處理放在一個線程裡面。RAWAPI把協議棧和應用程序放到一個進程裡邊,該接口基于函數回調技術,使用該接口的應用程序可以不用進行連續操作。它提供了創建新任務的系統API調用OSTaskCreate,因此隻要把OSTaskCreate封裝一下,就可以實現sys_thread_new。
    中文名: 外文名:lwip 所屬學科: 開發者:瑞典計算機科學院 說明:Light Weight(輕型)IP協議 模式:RAW API

簡介

LwIP是Light Weight(輕型)IP協議,有無操作系統的支持都可以運行。LwIP實現的重點是在保持TCP協議主要功能的基礎上減少對RAM的占用,一般它隻需要幾百字節的RAM和40K左右的ROM就可以運行,這使LwIP協議棧适合在低端的嵌入式系統中使用。LWIP是一種輕量級的TCP/IP協議棧。

lwIP協議棧主要關注的是怎麼樣減少内存的使用和代碼的大小,這樣就可以讓lwIP适用于資源有限的小型平台例如嵌入式系統。為了簡化處理過程和内存要求,lwIP對API進行了裁減,可以不需要複制一些數據。

相關

不過,這會使應用程序編寫難度加大且代碼不易被理解。為了接收數據,應用程序會向協議棧注冊一個回調函數。該回調函數與特定的連接相關聯,當該關聯的連接到達一個信息包,該回調函數就會被協議棧調用。

這既有優點也有缺點。優點是既然應用程序和TCP/IP協議棧駐留在同一個進程中,那麼發送和接收數據就不再産生進程切換。主要缺點是應用程序不能使自己陷入長期的連續運算中,這樣會導緻通訊性能下降,原因是TCP/IP處理與連續運算是不能并行發生的。這個缺點可以通過把應用程序分為兩部分來克服,一部分處理通訊,一部分處理運算。

這樣隻要處理流程稍微被延遲,接收就會被阻塞,直接造成頻繁丢包、響應不及時等嚴重問題。因此,接收與協議處理必須分開。LwIP的作者顯然已經考慮到了這一點,提供了tcpip_input()函數來處理這個問題,雖然他并沒有在rawapi一文中說明。

應該知道tcpip_input()函數投遞的消息,它們來自于由底層網絡驅動組成的接收線程。在編寫網絡驅動時,其接收部分以任務的形式創建。數據包到達後,去掉以太網包頭得到IP包,然後直接調用tcpip_input()函數将其投遞到mbox郵箱。投遞結束,接收任務繼續下一個數據包的接收,而被投遞得IP包将由TCPIP線程繼續處理。

這樣,即使某個IP包的處理時間過長也不會造成頻繁丢包現象的發生。這就是lwipAPI。

BSDAPI提供了基于open-read-write-close模型的UNIX标準API,它的最大特點是使應用程序移植到其它系統時比較容易,但用在嵌入式系統中效率比較低,占用資源多。這對于嵌入式應用有時是不能容忍的。

移植

為了移植到μC/OS系統中,需要進行以下調整。

(1)信号量

LwIP中需要使用信号量進行通信,所以在sys_arch中應實現相應的信号量結構體structsys_semt和處理函數sys_sem_new()、sys_sem_free()、sys_sem_signal()和sys_arch_sem_wait()。由于μC/OS已經實現了信号量OSEVENT的各種操作,并且功能和LwIP上面幾個函數的目的功能是完全一樣的,所以隻要把μC/OS的函數重新包裝成上面的函數,就可直接使用。

(2)消息隊列

LwIP使用消息隊列來緩沖、傳遞數據報文,因此要實現消息隊列結構sys_mbox_t,以及相應的操作函數:sys_mbox_new()、sys_mbox_free()、sys_mbox_post()和sys_arch_mbox_fetch()。μC/OS實現了消息隊列結構及其操作,但是μC/OS沒有對消息隊列中的消息進行管理,因此不能直接使用,必須在μC/OS的基礎上重新實現。

具體實現時,對隊列本身的管理利用μC/OS自己的OSQ操作完成,然後使用μC/OS中的内存管理模塊實現對消息的創建、使用、删除和回收,兩部分綜合起來形成了LwIP的消息隊列功能。

(3)定時器函數

LwIP中每個和TCP/IP相關的任務的一系列定時事件組成一個單向鍊表,每個鍊表的起始指針存在lwip_timeouts的對應表項中,如圖2所示。移植時需要實現structsys_timeouts*sys_arch_timeouts(void)函數,該函數返回正處于運行态的線程所對應的timeout隊列指針。

(4)創建新線程函數

在μC/OS中,沒有線程(thread)的概念,隻有任務(Task)。需要注意的是LwIP中的thread并沒有μC/OS中優先級的概念,實現時要由用戶事先為LwIP中創建的線程分配好優先級。

上一篇:牛骨

下一篇:陸元方賣宅

相關詞條

相關搜索

其它詞條