添加了必须的模块,对uIP进行了正确地配置后,需要编写主程序函数。针对基于以太网的WEB SERVER应用,主程序在完成初始化后将不停的进行查询,如果有新数据包到达则送uip_input()函数处理;如果没有新数据包到达则处理定时事件。框架代码如下所示:
通过实际的代码说明uIP协议栈的主控制循环。
void main(void)
{
/*省略部分代码*/
/*设置TCP超时处理时间和ARP老化时间*/
timer_set(&perioDIC_timer, CLOCK_CONF_SECOND / 2);
timer_set(&arp_timer, CLOCK_CONF_SECOND * 10);
/*定时器初始化*/
init_Timer();
/*协议栈初始化*/
uip_init();
uip_arp_init();
/*应用层初始化*/
example1_init();
/*驱动层初始化*/
etherdev_init();
/*IP地址、网关、掩码设置*/
uip_ipaddr(ipaddr, 192,168,1,9);
uip_sethostaddr(ipaddr);
uip_ipaddr(ipaddr, 192,168,1,16);
uip_setdraddr(ipaddr);
uip_ipaddr(ipaddr, 255,255,255,0);
uip_setnetmask(ipaddr);
/*主循环*/
while(1)
{
/*从网卡读数据*/
uip_len = etherdev_read();
/*假如存在数据则按协议处理*/
if(uip_len > 0)
{
/*收到的是IP数据,调用uip_input()处理*/
if(BUF->type == htons(UIP_ETHTYPE_IP))
{
uip_arp_iPIN();
uip_input();
/*处理完成后,假如uip_buf中有数据,则调用etherdev_send 发送出往*/
if(uip_len > 0)
{
uip_arp_out();
etherdev_send();
}
}