(3)sys_amh_timeout函数
LwIP中每个与外界网络连接的线程都有自己的timeout属性,即等待超时时问。这个属性表现为每个线程
都对应一个sys_timeout结构体队列,包括这个线程的timeout时间长度,以及超时后应调用的timeout函数,该函数会做一些释放连接,回收资源的工作。如果一个线程对应的sys_timeout为gl(NULL),说明该线程对连接做
永久的等待。
timeout结构体已经由LwIP自己在sys.h中定义好了,而且对结构体队列的数据操作也由LwIP负责,我们
所要实现的是如下函数:
struct
sys_fimeouts}sys_arch_timeouts(void)
这个函数的功能是返回目前正处于运行态的线程所对应的timeout队列指针。timeout队列属于线程的属
性,因此是Os相关的函数,只能由用户实现o
(4)sys_thread_new创建新线程
LwIP可以是单线程运行,即只有一个tcpip线程(tcpip_Ihread),负责处理所有的tcp/ucp连接,各种网络程
序都通过tcpip线程与网络交互。但LwIP也可以多线程运行,以提高效率,降低编程复杂度。这时就需要用户实
现创建新线程的函数:
voidsys_thread_new(void(+thread)(void+ars),void+arg);
在pC/OSII中.没有线程(thread)的概念,只有任务(Task)。它已经提供了创建新任务的系统API调用OSTaskCreate,因此只要把OSTaskCreate封装一下,就可以实现sys_thread_.new。需要注意的是LwIP中的thread并没有I^C/OSII中优先级的概念,实现时要由用户事先为LwIP中创建的线程分配好优先级。6.2网络设备驱动程序与LwlP的接口
在源代码的LwIP文件夹中有两个文件夹src和doe,在移植时,增加一个arch文件夹,在此文件夹里写人
一40一
第口届京、津、沪、渝反全国城市有线电视技术研讨会论文集
两个C语言的源文件lib_arch.c和sysarch.c,并建立两个文件夹include和netif,在netif文件夹里写一个C的
源文件lan9118if.e这个源文件是写与网络控制芯片有关的操作。在LwIP中可以有多个网络的接口,每个网络接口都对应了一个structnetif,这个netif定义如下:
struct
netif{
netif+next;
struct
char
name[21;
intIlum;
structstructstruet
ip_addrip_addr;ip_addrnetmask;
ip_addrgw;
pbuf+P,struet
void(8input)(structint(+output)(struct
strttet
netif+inp);
4
netif+netif,structpbuf
P,
ip_addr
4
ipdaddr);
void+state;
);
这个netif包含了相应网络接口的属性,收发函数。LwIP调用netif的方法netif->input()和netif->output()
进行以太网包的收、发等操作。在以太刚的的的芯片的驱动程序主要做的就是芯片的初始化,收、发和中断处理
函数。驱动程序是在IP协议模型的网络接口层,它提供给上一层(IP)的接口函数如下:
①网卡的初始化函数
void
ethemetif_init(structnetif*netif);
②网卡接收函数,从网络接口接收以太网数据包并把其中的IP报文向IP层发送,在中断方式下由网卡
ISR调用
void
ethemetif...input(stmetethemefif_output(stntctethernetif_isr(void);
netif+netif);
③网卡发送函数,给IP曾传过来的IP报文加上以太网包头并通过网络接El发送
err
t
nefif+netif,structpbuf+P.
struet
ip_addr*ipaddr);)④网卡中断处理函数ISR
void
LwlP的网络驱动有一定的模型,/sre/netif/ethemefiLc文件即为驱动的模板,用户为自己的网络设备实现驱动时应参照此模板。
6.3
LwlP的数据流程
LwlP的数据流程主要分为接收和发送两种情况。
接收数据时:数据包从一个网络接口被吸收,如果网络接口驱动通过low_teveljnput函数读到这个数据包,
简单的区分是ARP包还是IP包。如果是ARP包,将调用ARP的功能处理这个包。如果是一个IP包,将把数据
包发送给ipinput函数处理。ip_input函数将数据包进行简单的处理(如计算校验和)后,分析该包是发送到本
机的正常数据包,ip_input则根据包的分类,分别发送给udp_input、tcp_input、iemp_input函数处理。如果是发送
给UDP或TCP协议的数据包,UDP、TCP协议的处理函数将进行相应的处理,最后发送给应用程序。
发送数据时:当应用程序要发送一个数据包的时候,它将调用UDP或TCP协议处理udpsender或
top_wrlte函数发送一个数据包,UDP或TCP协议的处理函数接到数据后,将对数据进行打包、分段,然后发送给IP层的ip_output_if函数(需要的时候,将调用iproute函数进行路由选择),该函数把数据打包、封装,然后调用
网络接口驱动函数传给网络接口。
第m届京、津、沪、瀹反全国城市有线电视技术研讨会论文集
一41—
7以太网控制芯片LAN9118
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说医药卫生基于DSP的嵌入式Ethernet接入方案设计(3)在线全文阅读。
相关推荐: