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

📄 root.c

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 C
📖 第 1 页 / 共 2 页
字号:
	InitDefCfg();

	MemCopy((unsigned char *)&SystemData,(unsigned char *)BD_FLASH_ADDR,sizeof(System_Data));

	VerifyFlag=0;
	for(i=0;i<sizeof(System_Data) - 4;i++)
	{
		VerifyFlag+=*(unsigned char *)((unsigned char *)&SystemData + 4 + i);
	}

	if(VerifyFlag!=SystemData.ValidFlag)
	{
		MemCopy((char *)&SystemData,(char *)&DefSystemData,sizeof(System_Data));
		SaveSystemData();
	}
	else
	{
		if((SystemData.Cct_Port_Type<0)||(SystemData.Cct_Port_Type>3))
			SystemData.Cct_Port_Type=0;

		for(i=0;i<8;i++)
		{
			SystemData.PortConfig[i].Connected=FALSE;
			SystemData.PortConfig[i].IPAddr   =0;
		}
		
		if((SystemData.UserChannel.BaudRate>9)||(SystemData.UserChannel.Type>2)||(SystemData.UserChannel.CharSize>8)||(SystemData.UserChannel.StopBits>2)||(SystemData.UserChannel.Verify>1))
		{
			SystemData.UserChannel.Type=0;
			SystemData.UserChannel.BaudRate=0;
			SystemData.UserChannel.CharSize=0;
			SystemData.UserChannel.StopBits=0;
			SystemData.UserChannel.Verify  =0;
		}

		if(SystemData.NetworkPort.PCRDelay>100)
			SystemData.NetworkPort.PCRDelay=80;

		for(i=0;i<6;i++)
		{
			if((SystemData.PanelPassword[i]>4)||(SystemData.PanelPassword[i]==0))
			{
				for(j=0;j<6;j++)
					SystemData.PanelPassword[j]=1;
				
				break;
			}
		}
	}
}

/*---------------------------------------------------------------------*/
/* 启动以太网和串口通信任务                                            */
/*---------------------------------------------------------------------*/

void StartPanel(void)
{

	unsigned long PanelSendQid;

	/*-----------------------------------------------------------------*/
	/* 创建串口通信消息队列                                            */
	/*-----------------------------------------------------------------*/
	CreateQueue(QN_PANELSEND,&PanelSendQid);
	/*-----------------------------------------------------------------*/
	/* 创建串口通信任务                                                */
	/*-----------------------------------------------------------------*/
	CreateStartTask(TN_PANELINIT,TASKPRIO1,SUPERSTACK,USERSTACK,0,TK_PanelInit,0);
}

void StartTCPIP(void)
{

	unsigned long TcpipSendQid;
	unsigned long CmdProcid;

	/*-----------------------------------------------------------------*/
	/* 创建网口通信消息队列                                            */
	/*-----------------------------------------------------------------*/
	/*CreateQueue(QN_TCPIPSEND,&TcpipSendQid);*/
	/*-----------------------------------------------------------------*/
	/* 创建网口通信任务											       */
	/*-----------------------------------------------------------------*/
	CreateStartTask(TN_TCPIPINIT,232,SUPERSTACK,USERSTACK,0,TK_ServerInit,0);
	/*InstallTcpTask();*/
}

void RestInitialization(void)
{
	unsigned long qid;

	/*-----------------------------------------------------------------*/
	/* 启动数据处理任务                                                */
	/*-----------------------------------------------------------------*/

	FIFO.pGet  =0;
	FIFO.pPut  =0;
	FIFO.Length=0;
	FIFO.Lock  =0;
	
	/*
	CreateStartTask(TN_USERPROC,TASKPRIO0,SUPERSTACK,USERSTACK,0,TK_UserProc,0);
	CreateStartTask(TN_USERINIT,TASKPRIO2,SUPERSTACK,USERSTACK,0,TK_UserInit,0);
	*/
	/*-----------------------------------------------------------------*/
	/* 启动告警处理任务                                                */
	/*-----------------------------------------------------------------*/
	CreateQueue(QN_ALARM,&qid);
	CreateStartTask(TN_ALARM,TASKPRIO2,SUPERSTACK,USERSTACK,0,TK_Alarm,0);
	/*-----------------------------------------------------------------*/
	/* 启动连接和IP地址监测任务                                        */
	/*-----------------------------------------------------------------*/
	CreateStartTask("NIBM",TASKPRIO3,SUPERSTACK,USERSTACK,0,TK_NibMonitor,0); 
	CreateStartTask(TN_IPMONITOR,TASKPRIO2,SUPERSTACK,USERSTACK,0,TK_IP_Monitor,0);
	CreateStartTask(TN_CONMONITOR,TASKPRIO2,SUPERSTACK,USERSTACK,0,TK_Con_Monitor,0);	
}
/***********************************************************************/
/*        root: Code for the ROOT task                                 */
/*                                                                     */
/*        NOTE: This executes as the 'ROOT' task.  It suspends itself  */
/*              when finished.                                         */
/*                                                                     */
/***********************************************************************/
void root(void)
{
	
	Para_Valid				*pvalid;
	unsigned long			rc;
	unsigned long           qid;
	int                     i;

	int                     Clear=FALSE;

	unsigned char           volatile Enable_Watchdog;	

#if SC_SD_DEBUG_MODE==DBG_AP

	Enable_Watchdog = WATCHDOG_REG;

	Feed();

#endif

	/* clean the database flash
	SST39VF512_Chip_Erase();
	*/

	SystemState=SYSTEM_NOT_READY;

	TCPIP_First_Run=TRUE;

	PanelOK=FALSE;

	Has_Report_Device_Type=FALSE;

	MemCount=0;

	Connected=FALSE;

	/*--------------------------------------------------------------------------*/
	/* 设置中断向量入口                                                         */
	/*--------------------------------------------------------------------------*/ 
	IntHandleInit(); 

	/*--------------------------------------------------------------------------*/
	/* 复位FGPA 和 C54                                                          */
	/*--------------------------------------------------------------------------*/

	ResetC54();
	ResetFPGA();

	/*-----------------------------------------------------------------*/
	/* 喂狗                                                            */
	/* 创建喂狗任务,防止系统复位                                       */
	/*-----------------------------------------------------------------*/
	#ifdef LINGYC_APP_MON
	CreateStartTask("TAPM",TASKPRIOH,SUPERSTACK,USERSTACK,T_SUPV,tk_appmon,0);
	#endif

	CreateStartTask(TN_FEEDDOG,TASKPRIOH,SUPERSTACK,USERSTACK,T_SUPV,TK_Feed,0); 

	LoadSystemData();
	/*-----------------------------------------------------------------*/
	/* 获取系统各部件的自检结果                                        */
	/*-----------------------------------------------------------------*/
	presult=(SelfTest_Result *)MemAlloc(RNG0ID,TN_ROOT,sizeof(SelfTest_Result));
	if(presult==NULL)
	{
		Display("presult malloc failed, system halt. \n");		
		SystemReset();
		t_suspend(0L);
	}

	SelfTest(presult);

	CreateStartTask("HARD",TASKPRIO1,SUPERSTACK,USERSTACK,0,TK_HardWareInit,0); 
	/*-----------------------------------------------------------------*/
	/* 启动串口和网口的通信任务                                        */
	/*-----------------------------------------------------------------*/
	StartPanel(); 
	StartTCPIP(); 
	CreateStartTask("FPGA",TASKPRIO1,SUPERSTACK,USERSTACK,0, tk_RstSystem,0); 

	/*if((presult->C54_Result==SELFTEST_SUCCESS)&&(presult->FPGA_Result==SELFTEST_SUCCESS))*/
	/*if((presult->Nib_Result==SELFTEST_SUCCESS)&&(presult->FPGA_Result==SELFTEST_SUCCESS))*/
	if(presult->FPGA_Result==SELFTEST_SUCCESS)
	{
		/*-----------------------------------------------------------------*/
		/* 创建其他的消息队列和任务                                        */
		/*-----------------------------------------------------------------*/
		RestInitialization();

		SystemState=SYSTEM_READY;

		/*================================================================*/
		/* 打开所有端口                                                   */
		/* 2000.11.29                                                     */
		/*================================================================*/
		PORT_OPEN_REG=0xFF;

		/*----------------------------------------------------------------*/
		/* 不存在合法的默认配置,等待配置                                  */
		/*----------------------------------------------------------------*/
		for(;;)
		{
			if(Connected && Has_Report_Device_Type) 
				break;
			my_Delay(25);/*by xu*/
		}

		/*------------------------------------------------------------*/
		/* 上报复位状态,让网管保留到系统日志中                        */
		/*------------------------------------------------------------*/
		ReportResetState();

		/*------------------------------------------------------------*/
		/* 上报自检状态给网管系统,让网管保留到系统日志中              */
		/*------------------------------------------------------------*/
		ReportSelftestState(presult,0);
	}
	else
	{
		UserDataLed(1);
	}

	t_suspend(0L); 
}


void  tk_RstSystem(void)
{
      while(1)
      	{
             my_Delay(1000*60*5); /*1hours*//*by xu*/
		tk_caReStart();
            /*SystemReset();*/
      	}
}

⌨️ 快捷键说明

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