⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 21ic ucos+lwip应用心得[社区].htm

📁 44b0+lwip
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!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.2737.800" 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 
      src="21IC ucos+lwip应用心得[社区].files/ads.htm"></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&amp;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&amp;boardID=8&amp;id=&amp;topic=ucos%2Blwip%D3%A6%D3%C3%D0%C4%B5%C3%28%D3%D0%D0%C2%D4%F6%C4%DA%C8%DD%29&amp;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=&amp;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                        经过几天调试除掉几个bug以后,ucos+lwip在我的44b0+8019开发板上终于跑得比较稳定了.一只觉得lwip是一个不错的开放源码的tcp/ip 
                        协议栈,想把自己对lwip的移植和理解写出来.但是由于最近比较忙,lwip的移植也是利用业余时间做的,今天写好了第一部分(lwip的 
                        process 
                        model)先贴上来,如果大家有兴趣我再接着往下写.另外我的移植参看了skyeye扬晔大侠的代码,大家可以去看看扬晔大侠的lwip在ucos上移植的文章和代码.</P>
                        <P>&nbsp;&nbsp;&nbsp;lwip应用心得<BR>&nbsp;&nbsp;&nbsp;lwIP是瑞士计算机科学院(Swedish 
                        Institute of Computer Science)的Adam 
                        Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。Lwip既可以移植到操作系统上,又可以<BR>在无操作系统的情况下独立运行.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>LwIP的特性如下:<BR>(1)&nbsp;&nbsp;&nbsp;&nbsp;支持多网络接口下的IP转发<BR>(2)&nbsp;&nbsp;&nbsp;&nbsp;支持ICMP协议 
                        <BR>(3)&nbsp;&nbsp;&nbsp;&nbsp;包括实验性扩展的的UDP(用户数据报协议)<BR>(4)&nbsp;&nbsp;&nbsp;&nbsp;包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议)<BR>(5)&nbsp;&nbsp;&nbsp;&nbsp;提供专门的内部回调接口(Raw 
                        API)用于提高应用程序性能<BR>(6)&nbsp;&nbsp;&nbsp;&nbsp;可选择的Berkeley接口API(多线程情况下)<BR>(7)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在最新的版本中支持ppp<BR>(8)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新版本中增加了的IP 
                        fragment的支持.<BR>(9)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持DHCP协议,动态分配ip地址.<BR><BR>现在网上最新的版本是V0.6.4<BR>&nbsp;&nbsp;&nbsp;&nbsp;1.lwip的进程模型(process 
                        model)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcp/ip协议栈的process 
                        model一般有几种方式.<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.tcp/ip协议的每一层是一个单独进程.链路层是一个进程,ip层是一个进程,tcp层是一个进程.这样的好处是网络协<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;议的每一层都非常清晰,代码的调试和理解都非常容易.但是最大的坏处数据跨层传递时会引起上下文切换(context 
                        switch).<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于接收一个TCP 
                        segment要引起3次context 
                        switch(从网卡驱动程序到链路层进程,从链路层进程到ip层进程,从ip层进程<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;到TCP进程).通常对于操作系统来说,任务切换是要浪费时间的.过频的context 
                        swich是不可取的.<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.另外一种方式是TCP/IP协议栈在操作系统内核当中.应用程序通过操作系统的系统调用(system 
                        call)和协议栈来进行通讯.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样TCP/IP的协议栈就限定于特定的操作系统内核了.如windows就是这种方式.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.lwip的process 
                        model:所有tcp/ip协议栈都在一个进程当中,这样tcp/ip协议栈就和操作系统内核分开了.而应用层程序既可以<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是单独的进程也可以驻留在tcp/ip进程中.如果应用程序是单独的进程可以通过操作系统的邮箱,消息队列等和tcp/ip进程进行通讯.</P>
                        <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果应用层程序驻留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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            在这个项目中我用的硬件平台是s3c44b0x+rtl8019.ucos在44b0上的移植在网上有很多大侠非常详尽的讲解和移植代码.我就不敢罗嗦了.需要说明的一点是lwip会为每个网络连接动态分配一些信号量(semaphone)和消息队列(Message 
            Queue),当连接断开时会删掉这些semaphone和Queue.而Ucos-2.0不支持semaphone和Queue的删除,所以要选择一些较高版本的ucos.我用的是ucos-2.51.</P>
            <P><BR>2.1 Lwip的操作系统封装层(operating system.emulation 
            layer)<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lwip为了适应不同的操作系统,在代码中没有使用和某一个操作系统相关的系统调用和数据结构.而是在lwip和操作系统之间增加了一个操作系统封装层.操作系统封装层为操作系统服务(定时,进程同步,消息传递)提供了一个统一的接口.在lwip中进程同步使用semaphone和消息传递采用”mbox”(其实在ucos的实现中我们使用的是Message 
            Queue来实现lwip中的”mbox”,下面大家可以看到这一点)<BR><BR>Operating system emulation 
            layer的原代码在…/lwip/src/core/sys.c中.而和具体的操作系统相关的代码在../lwip/src/arch/sys_arch.c中.<BR>操作系统封装层的主要函数如下:<BR>void 
            sys_init(void)//系统初始化<BR>sys_thread_t sys_thread_new(void (* 
            function)(void *arg), void *arg,int 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -