?? 21ic ucos+lwip應用心得[社區].htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0062)http://www.21ic.com/new_info/news/files/news/2004130171638.asp -->
<HTML><HEAD><TITLE>21IC: ucos+lwip應用心得[社區]</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
FONT-SIZE: 12px
}
INPUT {
FONT-SIZE: 12px; font-fammily: verdana,宋體
}
A:link {
FONT-SIZE: 12px; COLOR: #0000ff; LINE-HEIGHT: 16px; TEXT-DECORATION: underline
}
A:visited {
FONT-SIZE: 12px; COLOR: #660066; LINE-HEIGHT: 16px; TEXT-DECORATION: underline
}
A:hover {
FONT-SIZE: 12px; COLOR: #ff0000; TEXT-DECORATION: underline
}
.unnamed1 {
FONT-SIZE: 12px; FONT-FAMILY: "Arial", "Helvetica", "sans-serif"
}
.white {
FONT-SIZE: 12px; COLOR: #ffffff; LINE-HEIGHT: 16px
}
.b:link {
FONT-SIZE: 12px; COLOR: #3366cc; LINE-HEIGHT: 18px; TEXT-DECORATION: underline
}
.b:visited {
FONT-SIZE: 12px; COLOR: #813f1b; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
.b:hover {
FONT-SIZE: 12px; COLOR: #ffa037; LINE-HEIGHT: 18px; TEXT-DECORATION: underline
}
.148xg {
FONT-SIZE: 14px; COLOR: #0000ff; LINE-HEIGHT: 14pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: underline
}
.128dt {
FONT-SIZE: 14px; COLOR: #9999cc; LINE-HEIGHT: 14pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.heigh150 {
LINE-HEIGHT: 150%
}
</STYLE>
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff leftMargin=0 topMargin=5>
<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
<TBODY>
<TR>
<TD align=middle width=168 height=80><IMG
src="21IC ucos+lwip應用心得[社區].files/21ic.gif"></TD>
<TD width=472>
<SCRIPT language=JavaScript><!--function SymError(){ return true;}window.onerror = SymError;var SymRealWinOpen = window.open;function SymWinOpen(url, name, attributes){ return (new Object());}window.open = SymWinOpen;//--></SCRIPT>
</TD>
<TD height=80>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=b12 align=middle height=30><FONT
face="Arial, Helvetica, sans-serif" color=#000000>
<SCRIPT language=JavaScript
src="21IC ucos+lwip應用心得[社區].files/date.js"></SCRIPT>
</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=1 width=768 align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width=766 align=left border=0>
<TBODY>
<TR bgColor=#d8d6ba>
<TD width=3 height=20></TD>
<DIV id=Position></DIV>
<TD width=378>
<FORM name=email
action=http://www.21icsearch.com/buzi/mail2/chkemail.asp method=post
target=_blank><B>電子工程周刊:</B> <INPUT class=main
style="BORDER-RIGHT: #0097cf 1px solid; BORDER-TOP: #0097cf 1px solid; BORDER-LEFT: #0097cf 1px solid; BORDER-BOTTOM: #0097cf 1px solid; BACKGROUND-COLOR: #ffffff"
maxLength=255 size=30 value=輸入您的Email name=email> <INPUT class=jbutton type=submit value=訂閱> </TD></FORM>
<DIV></DIV>
<DIV id=Time></DIV>
<DIV id=Image></DIV>
<DIV id=Title></DIV>
<TD width=418>
<MARQUEE onmouseover=this.scrollDelay=99000
onmouseout=this.scrollDelay=80 scrollAmount=2 scrollDelay=80
width="80%"><FONT color=#cc0000><IMG height=12
src="21IC ucos+lwip應用心得[社區].files/xilan_arrow.gif"
width=16>每周自動接收行業新聞,技術資料,設計文章</FONT></MARQUEE></TD>
<DIV></DIV>
<TD width=9></TD></TR></TBODY></TABLE>
<DIV></DIV>
<DIV id=Time></DIV>
<DIV id=Image></DIV>
<DIV id=Title><TD< td></DIV></TD></TR></TBODY></TABLE></TD></TR></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top width=617 height=2>
<TABLE cellSpacing=0 cellPadding=0 width=583 align=center border=0>
<TBODY>
<TR>
<TD align=middle height=31><FONT size=4><B>ucos+lwip應用心得[社區]
</B></FONT></TD></TR>
<TR>
<TD align=middle height=15>文章作者:dake<BR>文章類型:設計應用
文章加入時間:2004年1月30日17:16</TD></TR>
<TR>
<TD align=right><FONT color=#cc0000>文章出處:21icbbs 嵌入式系統版</FONT>
</TD></TR>
<TR>
<TD height=15>
<HR width="100%" noShade SIZE=1>
</TD></TR>
<TR>
<TD height=15>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=530 align=center border=0>
<TBODY>
<TR>
<TD class=heigh150 height=15>
<DIV id=Content>
<TABLE cellSpacing=2 cellPadding=3 width="100%" border=0>
<TBODY>
<TR>
<TD bgColor=#eeeeee><FONT color=black><U><IMG
src="21IC ucos+lwip應用心得[社區].files/mood25.gif"
align=absMiddle></U><STRONG> dake </STRONG>發表于 2003-12-17
21:15 <FONT color=#336699><STRONG>嵌入式系統</STRONG></FONT> <A
href="http://www.21icbbs.com/club/bbs/list.asp?boardid=8"><FONT
color=black>←返回版面</FONT></A> <A
href="http://www.21icbbs.com/club/bbs/queryInfo.asp?key=hH00EpcoY0Y13IwoQo0oMCaM57CZV0ac6F04T%2FMs5oz0mR0tfz0UGEA5p5za&txtname=dake"
target=_blank><IMG alt=按此察看該網友的資料
src="21IC ucos+lwip應用心得[社區].files/profile.gif" border=0></A>
<A
href="http://www.21icbbs.com/club/bbs/info/addToBookMark.asp?type=announce&boardID=8&id=&topic=ucos%2Blwip%D3%A6%D3%C3%D0%C4%B5%C3%28%D3%D0%D0%C2%D4%F6%C4%DA%C8%DD%29&author=dake"><IMG
alt=按此把文章加入收藏夾 src="21IC ucos+lwip應用心得[社區].files/fav.gif"
border=0></A> <A
href="http://www.21icbbs.com/club/bbs/ownerEditAnnounce.asp?v=&id=993901"><IMG
alt=按此編輯本帖 src="21IC ucos+lwip應用心得[社區].files/edit.gif"
border=0></A></FONT></TD></TR>
<TR>
<TD bgColor=#eeeeee><BR>
<TABLE cellSpacing=1 cellPadding=3 width="95%" align=center>
<TBODY>
<TR>
<TD style="FONT-SIZE: 12px; LINE-HEIGHT: 18px">
<P>
經過幾天調試除掉幾個bug以后,ucos+lwip在我的44b0+8019開發板上終于跑得比較穩定了.一只覺得lwip是一個不錯的開放源碼的tcp/ip
協議棧,想把自己對lwip的移植和理解寫出來.但是由于最近比較忙,lwip的移植也是利用業余時間做的,今天寫好了第一部分(lwip的
process
model)先貼上來,如果大家有興趣我再接著往下寫.另外我的移植參看了skyeye揚曄大俠的代碼,大家可以去看看揚曄大俠的lwip在ucos上移植的文章和代碼.</P>
<P> lwip應用心得<BR> lwIP是瑞士計算機科學院(Swedish
Institute of Computer Science)的Adam
Dunkels等開發的一套用于嵌入式系統的開放源代碼TCP/IP協議棧。Lwip既可以移植到操作系統上,又可以<BR>在無操作系統的情況下獨立運行. <BR><BR>LwIP的特性如下:<BR>(1) 支持多網絡接口下的IP轉發<BR>(2) 支持ICMP協議
<BR>(3) 包括實驗性擴展的的UDP(用戶數據報協議)<BR>(4) 包括阻塞控制,RTT估算和快速恢復和快速轉發的TCP(傳輸控制協議)<BR>(5) 提供專門的內部回調接口(Raw
API)用于提高應用程序性能<BR>(6) 可選擇的Berkeley接口API(多線程情況下)<BR>(7) 在最新的版本中支持ppp<BR>(8) 新版本中增加了的IP
fragment的支持.<BR>(9) 支持DHCP協議,動態分配ip地址.<BR><BR>現在網上最新的版本是V0.6.4<BR> 1.lwip的進程模型(process
model)<BR><BR> tcp/ip協議棧的process
model一般有幾種方式.<BR><BR> 1.tcp/ip協議的每一層是一個單獨進程.鏈路層是一個進程,ip層是一個進程,tcp層是一個進程.這樣的好處是網絡協<BR> 議的每一層都非常清晰,代碼的調試和理解都非常容易.但是最大的壞處數據跨層傳遞時會引起上下文切換(context
switch).<BR> 對于接收一個TCP
segment要引起3次context
switch(從網卡驅動程序到鏈路層進程,從鏈路層進程到ip層進程,從ip層進程<BR> 到TCP進程).通常對于操作系統來說,任務切換是要浪費時間的.過頻的context
swich是不可取的.<BR><BR> 2.另外一種方式是TCP/IP協議棧在操作系統內核當中.應用程序通過操作系統的系統調用(system
call)和協議棧來進行通訊.<BR> 這樣TCP/IP的協議棧就限定于特定的操作系統內核了.如windows就是這種方式.<BR> 3.lwip的process
model:所有tcp/ip協議棧都在一個進程當中,這樣tcp/ip協議棧就和操作系統內核分開了.而應用層程序既可以<BR> 是單獨的進程也可以駐留在tcp/ip進程中.如果應用程序是單獨的進程可以通過操作系統的郵箱,消息隊列等和tcp/ip進程進行通訊.</P>
<P> 如果應用層程序駐留tcp/ip進程中,那應用層程序就利用內部回調函數口(Raw
API)和tcp/ip協議棧通訊.對于ucos來說進程就是一個系統任務.lwip的process
model請參看下圖.在圖中可以看到整個tcp/ip協議棧都在同一個任務(tcpip_thread)中.應用層程序既可以是獨立的任務(如圖中的tftp_thread,tcpecho_thread),也可以在tcpip_thread中(如圖左上角)中利用內部回調函數口(Raw
API)和tcp/ip協議棧通訊</P>
<P align=center><IMG
src="21IC ucos+lwip應用心得[社區].files/200312172048210.jpg"
border=0> </P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<P>2 Port Lwip to uCos</P>
<P>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -