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

📄 ne2000.c

📁 利用51单片机对RTL8109进行控制
💻 C
字号:
/*****************************
03.12.10	解决dvr死机问题,原因:在处理dvr命令时,有其他的网络命令干扰dvr命令的执行,多个全局变量公用
03.12.22	解决两台主机不能同时控制一台主机,原因:两秒限制
03.12.25	修改主机通信协议,设置本机ip地址命令原为IP修改为MYIP,原因:IP 和RIP 命令太相近(后又改回原来命令“ip”)
04.7.15		修改udp主动发送数据包,目的端口号为1521,命令为$
主程序
*******************************/
#include "net.h"
#include "struct.h"
#include "fundef.h"
#include "variable.h"


void main(void)
{
	unsigned char i;

	init();

	while(1)
	{
		if(bCommandFlag){bCommandFlag=0;process_command();}

		if(bDataFlag){bDataFlag=0;process_data();}

		if(double_second)
  		{
  			double_second=0;

  			//process_telnet();

  			gateway_arp_request();
  			if(c_type==2)
  			{
  				if(ping_ip_address_ttl==0){send_string("3 a");}
  				else if(ping_ip_address_ttl>7){send_string("1 a");}
				FunCheckOnline();
  			}
  			if(c_DvrRunTime==0)b_RunDvrCommand=0;
  			
  		}
  		
  		pwdi=!pwdi;
  		
  		if(b_100ms)
  		{
  			b_100ms=0;
  			
  			if((tcp_count>RetryTcp_Count)&&(ping_ip_address_ttl<2)&&(b_RunDvrCommand==0))
        		{//解析ip地址
				
				if((dvr_ip_address.dwords&mask_ip_address.dwords)==(my_ip_address.dwords&mask_ip_address.dwords))
				{//表示位于同一子网.
					ping_ip_address_ttl=1;
					arp_request(dvr_ip_address.dwords);
				}else
				{//表示属于不同的子网,需要通过网关.
					ping_ip_address_ttl=10;
					for(i=0;i<6;i++){dvr_ethernet_address.bytes[i]=gateway_ethernet_address.bytes[i];}
					if(gateway_ip_address_ttl==0){ping_ip_address_ttl=0;}
				}
    				tcp_count--;
			}
  		}
  		
  		process_telnet();
  		
  		pwdi=!pwdi;
  		
		for(i=0;i<=rt_size;i++)
		{
			if(retransmit_buffer[i].rtframe.status!=0)
			{
				if(retransmit_buffer[i].rtframe.timeout>rt_time){retransmit_buffer[i].rtframe.timeout=0;}

				if(retransmit_buffer[i].rtframe.timeout==0)
				{
					send_string("R a");
					retransmit_packet(i);
					retransmit_buffer[i].rtframe.status++;
					if(retransmit_buffer[i].rtframe.status>rt_cishu){retransmit_buffer[i].rtframe.status=0;}
				}
			}

			if(retransmitpacket[i].status!=0)
			{
				if(retransmitpacket[i].timeout>200){retransmitpacket[i].timeout=0;}
				if(retransmitpacket[i].timeout==0){retransmitpacket[i].status=0;}
			}


		}

		if(retransmit_buffer[rt_size].rtframe.status==0)
		{
			if((c_readcommand!=c_writecommand) || ((c_writecommand==c_readcommand)&& b_cb_full))
			{b_cb_full=0;FunNetSendCommandBuffer();}
		}

  		pwdi=!pwdi;

		if(check_new_packet())
		{
			FunProcessRec();
		}
	}
}

⌨️ 快捷键说明

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