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

📄 tftpmain.c

📁 基于三星44B0芯片的移植操作系统
💻 C
字号:
#include "skbuff.h"
#include "eth.h"
#include "arp.h"
#include "ip.h"
#include "udp.h"
#include "utils.h"
#include "DataType.h"
#include "44B.h"
#include "os_cpu.h"

int DownLoadEnd;
int DownLoadOnly;
int arp_count=0;
unsigned long LoadLength;	
unsigned long load_addr = 0x8000;
extern void Uart_Printf(char *fmt,...);
extern struct sk_buff skbuff[BUFF_LEN];
extern void  OSTimeDly (INT16U ticks);

void net_handle(struct sk_buff* sk_buff_handle)
{
	struct ethhdr *eth_hdr;	
	eth_hdr = (struct ethhdr *)(sk_buff_handle->data);
	skb_pull(sk_buff_handle,ETH_HLEN);
	
	//Uart_Printf("\n----%x", eth_hdr->h_proto);
	//608->0806 arp ;8->0800 ip
	//#define ETH_P_IP	0x0800		/* Internet Protocol packet	*/
	//#define ETH_P_ARP	0x0806		/* Address Resolution packet */
	if (ntohs(eth_hdr->h_proto) == ETH_P_ARP)
	{
		Uart_Printf("arp\n");	
		//arp_count++;
		//Uart_Printf("任务接收到%x个arp包\n",arp_count);
		arp_rcv_packet(sk_buff_handle);		
	}
	else if(ntohs(eth_hdr->h_proto) == ETH_P_IP)
	{
		 Uart_Printf("ip\n");						
		 ip_rcv_packet(sk_buff_handle);		 		
	}
}

void tftp_init(unsigned long ip, unsigned long addr, int method)
{
	unsigned char eth_addr[ETH_ALEN];
	
	Uart_Printf("*************Mini TFTP Server 1.0*************\n");
	load_addr = addr;
	DownLoadEnd = 0;
	DownLoadOnly = method;
	LoadLength = 0;
	
	eth_init();
	eth_get_addr(eth_addr);
	arp_init();
	ip_init(ip);
	udp_init();
	arp_add_entry(eth_addr,ip);
}

void tftp_main(unsigned long ip, unsigned long addr, int method)
{
	unsigned char eth_addr[ETH_ALEN];
    //unsigned char *s = (unsigned char *)&ip;
    //void (*fp)(U32, U32);
    //fp = (void (*)(U32, U32))0xc008000;
	//Uart_Printf("Mini TFTP Server 1.0 (IP : %d.%d.%d.%d PORT: %d)\n", s[3], s[2], s[1], s[0], TFTP);
	Uart_Printf("*************Mini TFTP Server 1.0*************\n");
	load_addr = addr;
	DownLoadEnd = 0;
	DownLoadOnly = method;
	LoadLength = 0;
	
	eth_init();
	eth_get_addr(eth_addr);
	arp_init();
	ip_init(ip);
	udp_init();
	arp_add_entry(eth_addr,ip);

	//while(1){
		//Uart_Printf("UCOS任务执行中,数据包在中断中处理完毕,^_^!\n");
		//Uart_Printf("接收到信号量,开始接收数据包,^_^!\n");
		//Uart_Printf("total_packet1-->%x!\n",total_packet);
		//packet_check();
		//while(total_packet!=0){
			//Uart_Printf("执行BUFF_LEN次net_handle!\n");
			//Uart_Printf("nethandle执行了%x次!\n",++i);
			//net_handle();			
		//}
		//if(DownLoadEnd)
		//{
		//	Uart_Printf("Download end\n");			
		//	(*fp)(0, 178);
		//}
		
		//Uart_Printf("total_packet2-->%x!\n",total_packet);
		//Uart_Printf("rd_p-->%x!\n",rd_p);
		//Uart_Printf("wr_p-->%x!\n",wr_p);
		//SemGet=0;
		//rINTMSK=~(BIT_GLOBAL|BIT_TIMER0|BIT_EINT1);	//start timer INT
		//rI_ISPC=BIT_TIMER0|BIT_EINT1;
		//Uart_Printf("net_handle is running\n");
		OSTimeDly(5);//不延时循环会死掉,Uart_Printf不可重入,中断里也使用该函数
		//if (kbhit()&&(getch()==ESC_KEY))
		//{
		//	putch('\n');
		//	return 0;
		//}
		//if(DownLoadEnd)
		//{
		//	puts("Download end\n");
		//	return LoadLength;
		//}
	//}
}

⌨️ 快捷键说明

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