📄 root.c
字号:
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 + -