// запуск ДК после аварии void DK_RESTART(void) { LIGHT_STA = LIGHT_WORK; Init_DK(); DK_MAIN(); //tn_reset(); // сбросс CPU }
//------------------------------------------------------------------------------ // fin_try==0 - последняя поппытка, можно и записать в журнал ерроры BOOL ligh_load_init(int fin_try) { // memset(&DK[CUR_DK],0,sizeof(DK[CUR_DK])); // clear crc memset(&crc_idp,0,sizeof(crc_idp)); // FLASH_PROGS flash_rd(FLASH_PROGRAM, sizeof(TPROJECT)*CUR_DK, (unsigned char*)&PROJ[CUR_DK], sizeof(PROJ[CUR_DK])); unsigned long crc=crc32_calc((unsigned char*)&PROJ[CUR_DK] , sizeof(PROJ[CUR_DK]) - sizeof(PROJ[CUR_DK].CRC32)); // unsigned long crc_progs; flash_rd(FLASH_PROGS, sizeof(TPROGRAMS)*(CUR_DK+1)-sizeof(crc_progs) , (unsigned char*)&crc_progs, sizeof(crc_progs)); // crc_idp.crc = crc_progs;// сохраним для передачи по UDP //i_size = sizeof(PROJ[CUR_DK]); if (PROJ[CUR_DK].ProjectSize ==sizeof(PROJ[CUR_DK])) { if ( crc == PROJ[CUR_DK].CRC32) { // if (crc_progs==PROJ[CUR_DK].CRC32_programs) { Init_DK(); DK[CUR_DK].proj_valid=true; DK[CUR_DK].work = true; DK[CUR_DK].progs_valid = true; return true; } else { dbg_printf("FAULT. CRC32 of progs invalid"); if (CUR_DK==0) if (!fin_try) Event_Push_Str("Некорр. программы (CRC)"); } } else { dbg_printf("FAULT. PROJ.CRC32"); if (CUR_DK==0) if (!fin_try) Event_Push_Str("Некорр. проект (CRC)."); } } else { if (CUR_DK==0) if (!fin_try) Event_Push_Str("Некорр. проект (размер)."); // dbg_printf("FAULT. PROJ.ProjectSize ==sizeof(PROJ)"); } return false; }
//------------------------------------------------------------------------------ // следующая попытка static void Next_Try(bool b) { if (!DK[CUR_DK].no_FAULT) if (b) { //все отключаем if (reboot_tryes<PROJ[CUR_DK].guard.restarts) { reboot_tryes++; if (chan_faults!=FT_RED_CONFL){ POWER_SET(false); // off rele SIGNAL_OFF(); Save_LET(); // for (int i_dk=0; i_dk<dk_num; i_dk++) { CUR_DK = i_dk; Init_DK(); DK_ALARM_OC(); } // DK_MAIN(); light_machine.work=false; // }else{ Save_LET(); for (int i_dk=0; i_dk<dk_num; i_dk++) { CUR_DK = i_dk; Init_DK(); DK_ALARM_OC();//DK_ALARM_YF(); } DK_MAIN(); } Next_Try_wait = true; chan_faults=FT_NO; tn_task_sleep(100); } else { DK_HALT(); } } }