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

📄 uip_task.c

📁 运行环境是keil。这是一个实现嵌入式TCP/IP的程序
💻 C
字号:
#include    <CORE\includes.h>
#include "serial.h"
#include <LCD\LCD.h>

#include <global_para.h>

#include "uip\uip_arp.h"
#include "uip\uip.h"
#include "uip\myapp\myapp.h"
#include <RTL8019\rtl8019dev.h>
#include <serial.h>

#define BUF ((struct uip_eth_hdr *)&uip_buf[0])

void TcpIp_Init()
{
   uip_init();
   myapp_init();
   uip_arp_init();

   RTL8019dev_init();
}
/*---------------------------------------------------------------
 Receive (Ethernet)ip package to uip_buf[UIP_BUFSIZE], uip_len
----------------------------------------------------------------*/
void TASK_UipRec(void *ppdata)  reentrant//receive slip package;
{
     INT8U err;
     err=err;
     ppdata=ppdata;
 //    LCD_print("task recieve\n");
     while(1)
     {  // Uart0_print("RecT\n");
	     //OSSemPend(Sem_RecPackage, 0, &err);
         uip_len = RTL8019dev_poll();
		 if(uip_len)
		 {//Uart0_print("0nep\n");
		    OSSemPost(Sem_ProcessPackage);
			}
     }//while(1);
}
//-------------------------------------------------------------------
void TASK_UipProcess(void *ppdata)  reentrant//send slip package;
{
    INT8U err;
    ppdata=ppdata;
    while(1)
    {
        OSSemPend(Sem_ProcessPackage, 0, &err);
     //   Uart0_print("ProT\n");
       if(BUF->type == htons(UIP_ETHTYPE_IP))
       {
           // add the source to the ARP cache
           // also correctly set the ethernet packet length before processing
           uip_arp_ipin();
           uip_process(UIP_DATA);
           // transmit a packet, if one is ready
           if(uip_len > 0)
           {
             uip_arp_out();
             RTL8019dev_send();
           }
       }
      // process an ARP packet
      else if(BUF->type == htons(UIP_ETHTYPE_ARP))
      {
        uip_arp_arpin();
        // transmit a packet, if one is ready
        if(uip_len > 0)
          RTL8019dev_send();
      }

    }//while(1)
}
void TASK_UipTimeOut(void *ppdata)  reentrant//send slip package;
{
    INT8U i;
    ppdata=ppdata;
    while(1)
    {
	//	Uart0_print("RecT\n");
	    OSTimeDly(100);  //DELAY 1 S; 50*0.02
	//	Uart0_print("TimT\n");
        for(i = 0; i < UIP_CONNS; ++i)
	    {
	       uip_periodic(i);
	       if(uip_len > 0)
            {
               uip_arp_out();
               RTL8019dev_send();
            }
        }
    }
}

⌨️ 快捷键说明

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