Esempio n. 1
0
//------------------------------------------------------------------------------
static void task_leds_func(void* param)
{
    bool  b_err;
    //
    Clear_DS_COUNTS();
    //
    for (;;)
    {
      if (DK[CUR_DK].CUR.source==ALARM)
       {
         //tn_task_sleep(50);
         if (b_err)
           pin_on(OPIN_ERR_LED);
         else
           pin_off(OPIN_ERR_LED);
         ///
         b_err=!b_err;

       }
       else
       {
         pin_on(OPIN_ERR_LED);
       }
       ///////////////////////////
        hw_watchdog_clear();
        tn_task_sleep(900);
        pin_off(OPIN_CPU_LED);
        tn_task_sleep(100);
        pin_on(OPIN_CPU_LED);
        //////////////////////
        WAIT_1S_COUNT++;
        if (WAIT_1S_COUNT > DS_COUNT)
            Check_DS();
    }
}
Esempio n. 2
0
//----------------------------------------------------------------------------
void task_led1_func (void *par)
{
  unsigned int Blink = 1;

  while(1){
    if (Blink & 1) Led1On();
    else           Led1Off();

    Blink = Blink ^ 1;

    tn_task_sleep(250); // Sleep 250 ticks.
  }
}
Esempio n. 3
0
//------------------------------------------------------------------------------
// следующая попытка
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_YF();
           }
           DK_MAIN();
        }
        Next_Try_wait = true;
        chan_faults=FT_NO;
        tn_task_sleep(100);
     }
     else
     {
          DK_HALT();
     }
    }
}
Esempio n. 4
0
//----------------------------------------------------------------------------
void task_checkmem_func(void * par)
{
  int cnt = 0;
  volatile char buf[192];

  int i;

  volatile unsigned short *Pointer16;
  unsigned short mem_pattern[8] = {0x1111, 0x0000, 0x5555, 0xAAAA,
                                   0xFFFF, 0xCCCC, 0x3333, 0x7777};
  unsigned short mem_pattern_read[8];

  for(;;) {
    Pointer16 = (unsigned short *)(0x80000300);
    for(i=0; i<8; i++){
      *Pointer16 = mem_pattern[i];
      Pointer16++;
    }

    Pointer16 = (unsigned short *)(0x80000310);
    for(i=0; i<8; i++){
      mem_pattern_read[i] = *Pointer16 & 0xffff;
      Pointer16++;
    }

    tn_snprintf((char*)buf,sizeof(buf),"Memory test #%03d results: "
             "%04X %04X %04X %04X %04X %04X %04X %04X    ->    "
             "%04X %04X %04X %04X %04X %04X %04X %04X"
             "\r\n",cnt, mem_pattern[0], mem_pattern[1], mem_pattern[2],
                         mem_pattern[3], mem_pattern[4], mem_pattern[5],
                         mem_pattern[6], mem_pattern[7],
                         mem_pattern_read[0], mem_pattern_read[1], mem_pattern_read[2],
                         mem_pattern_read[3], mem_pattern_read[4], mem_pattern_read[5],
                         mem_pattern_read[6], mem_pattern_read[7]);

      cnt++;

      exs_send_to_uart((unsigned char*)buf);

      tn_task_sleep(2000);

      tn_task_exit(0); // exit task.
   }
}
Esempio n. 5
0
/*loop cycle*/
static void task_light_func(void* param)
{
    //unsigned short light;
    bool  b_ch;//, b_err;
    unsigned int fpattern;
    //int i_sec;
    SYSTEMTIME  cur_time;
    DS1390_TIME time;
    CUR_DK=0;
    SIGNAL_OFF();
    POWER_SET(true);
    SIGNAL_OFF();
    pin_off(OPIN_ERR_LED); // error enabled
    //
    tn_task_sleep(500);
    SIGNAL_OFF();
    pin_off(OPIN_TR_EN);//включить выходные регистры
    //
    Event_Push_Str("СТАРТ");// запись в журнал старт
    light_time_out=1;

for (;;)
    {
    //считать время
    GetTime_DS1390(&time);
    // обновить
    cur_time.tm_hour = time.hour;
    cur_time.tm_mday = time.date;
    cur_time.tm_min = time.min;
    cur_time.tm_sec = time.sec;
    cur_time.tm_mon = time.month;
    cur_time.tm_year = time.year;
    //
    if (Next_Try_wait)
       if (Seconds_Between(&L_ERR_TIME, &cur_time) >
            PROJ[CUR_DK].guard.restart_interval){
       for (int i_dk=0; i_dk<dk_num; i_dk++)
          {
           DK[i_dk].REQ.req[ALARM].presence = false;
          }
          light_machine.work=true;
          //
          if (chan_faults!=FT_RED_CONFL){
             SIGNAL_OFF();
             POWER_SET(true);
             SIGNAL_OFF();
             }
          //
          Next_Try_wait = false;
          }
    // test mode
    if(DK[0].test)
      {
      if(!DK[0].test_init){
        SIGNAL_OFF();
        DK[0].test_init=true;
        }
      //
      Clear_UDC_Arrays();
      tn_task_sleep(500);
      //
      Check_Channels();
      continue;
      }
    // last time error
    Check_LET();
    // work mode
    if (!light_machine.work){
      tn_task_sleep(500);
      continue;
      }
    //machine stat
    switch (LIGHT_STA)
       {
       case LIGHT_WORK:
         {
          tn_event_wait(&g_light_evt, EVENT_SINHRO_TIME, TN_EVENT_WCOND_OR, &fpattern, TN_WAIT_INFINITE);
          //синхронизация времени GPS&RTC
          Synk_TIME();
          //проверка конфликтов каналов
          b_ch = Check_Chan();
          if(b_ch){
            Next_Try(b_ch);break;}
          // основная логика работы
          DK_MAIN();
          tn_task_sleep(500);// delay 0.5S
          //проверка конфликтов каналов
          b_ch = Check_Chan();
          if(b_ch){
            Next_Try(b_ch);break;}
          // здесь организовано миганине силовых выходов вот так!(в проетке его нет)
          /*for (int i_dk=0; i_dk<dk_num; i_dk++)
                {
                CUR_DK = i_dk; // тукущий ДК
                Update_STATES(true);
                } */
         SET_OUTPUTS();
         break;
         }
       case LIGHT_FAULT:
          {
           tn_task_sleep(500);
           break;
          }
       }// end switch
    }// end for
}
Esempio n. 6
0
/*----------------------------------------------------------------------------*/
static void task_light_func(void* param)
{
    bool  b_ch;
    unsigned int fpattern;
    WORD TimeErrorGPS;
    BYTE fStat=false;
    SYSTEMTIME  cur_time;
    DS1390_TIME time;

    CUR_DK=0;
    SIGNAL_OFF();
    POWER_SET(true);
    SIGNAL_OFF();
    pin_off(OPIN_ERR_LED); // error enabled
    //
    tn_task_sleep(500);
    SIGNAL_OFF();
    pin_off(OPIN_TR_EN);//включить выходные регистры
    //
    Event_Push_Str("СТАРТ");// запись в журнал старт
    light_time_out=1;

for (;;)
    {
    //считать время
    GetTime_DS1390(&time);
    // обновить
    cur_time.tm_hour = time.hour;
    cur_time.tm_mday = time.date;
    cur_time.tm_min  = time.min;
    cur_time.tm_sec  = time.sec;
    cur_time.tm_mon  = time.month;
    cur_time.tm_year = time.year;
    //
    if (Next_Try_wait)
       if (Seconds_Between(&L_ERR_TIME, &cur_time) >
            PROJ[CUR_DK].guard.restart_interval){
       for (int i_dk=0; i_dk<dk_num; i_dk++)
          {
           DK[i_dk].REQ.req[ALARM].presence = false;
          }
          light_machine.work=true;
          //
          if (chan_faults!=FT_RED_CONFL){
             SIGNAL_OFF();
             POWER_SET(true);
             SIGNAL_OFF();
             }
          //
          Next_Try_wait = false;
          }
    // test mode
    if(DK[0].test)
      {
      if(!DK[0].test_init){
        SIGNAL_OFF();
        DK[0].test_init=true;
        }
      //
      Clear_UDC_Arrays();
      tn_task_sleep(500);
      //
      Check_Channels();
      continue;
      }
    // last time error
    Check_LET();
    // work mode
    if (!light_machine.work){
      tn_task_sleep(500);
      continue;
      }
    // ждем данных от GPS
    if((DK[0].PROJ->guard.gpsON)&&(LIGHT_STA==LIGHT_WORK)){ // работаем только с GPS DK_Service_undo();
      GPS_INFO gps;
      Get_gps_info(&gps);
      switch(fStat)
        {
        case Null: // первый старт time_valid
          if(gps.time_valid==false){// выходим с аварией gps.fix_valid
            tn_task_sleep(2000);
            DK_ALARM_OC();
            break;}
          DK_ALARM_undo();// включаем режим
          TimeErrorGPS = 0;
          fStat=One;
          break;
        case One:// нет данных GPS
          if(!gps.time_valid){TimeErrorGPS = 0;fStat=Two;} // gps.fix_valid
          break;
        case Two:// задерка на выключение 5 мин
          if(++TimeErrorGPS>300){DK_ALARM_OC();fStat=Three;}
          if(gps.time_valid)fStat=One; //gps.fix_valid
          break;
        case Three://ждем GPS данные
          if(gps.time_valid){TimeErrorGPS =0;fStat=Five;} // gps.fix_valid
          break;
        case Five:// задерка на включение 2 мин
          if(++TimeErrorGPS>120){DK_ALARM_undo();fStat=One;}
          if(!gps.time_valid)fStat=Three; // gps.fix_valid
          break;
        default:fStat=One;break;
        }
      }
    //machine stat
    switch (LIGHT_STA)
       {
       case LIGHT_WORK:
         {
          tn_event_wait(&g_light_evt, EVENT_SINHRO_TIME, TN_EVENT_WCOND_OR, &fpattern, TN_WAIT_INFINITE);
          //синхронизация времени GPS&RTC
          Synk_TIME();
          //проверка конфликтов каналов
          b_ch = Check_Chan();
          if(b_ch){
            Next_Try(b_ch);break;}
          // основная логика работы
          DK_MAIN();
          tn_task_sleep(500);// delay 0.5S
          //проверка конфликтов каналов
          b_ch = Check_Chan();
          if(b_ch){
            Next_Try(b_ch);break;}
          // провка проекта, он слетает
          checksumProject();
          // здесь организовано миганине силовых выходов вот так!(в проетке его нет)
          /*for (int i_dk=0; i_dk<dk_num; i_dk++)
                {
                CUR_DK = i_dk; // тукущий ДК
                Update_STATES(true);
                } */
         SET_OUTPUTS();
         break;
         }
       case LIGHT_FAULT:
          {
           tn_task_sleep(500);
           break;
          }
       }// end switch
    }// end for
}
Esempio n. 7
0
File: gps.c Progetto: tuzhikov/SURD
//------------------------------------------------------------------------------
static void task_GPS_func(void* param)
{
    unsigned char time_valid = gps_info.time_valid = 0;
    unsigned char fix_valid = gps_info.fix_valid = 0;
    unsigned char health = gps_info.health = 0;
    static unsigned char count_time=0;
    GPS_synk_flag=false;
    //
    pin_on(OPIN_TEST1);

    for (;;)
    {
        tn_task_sleep(GPS_REFRESH_INTERVAL);
        //
        Check_State_LED();
        //
        if (GPS_LED==1)
        {
          pin_off(OPIN_TEST1);
          tn_task_sleep(100);
          pin_on(OPIN_TEST1);
        }
        //упрвление светодиодом
        if (GPS_LED==2)
        {
          if (count_time % 2)
          {
            pin_off(OPIN_TEST1);
          }
          else
          {
            pin_on(OPIN_TEST1);
          }
        }
        //разрешить обновление времени.
        if ((++count_time % 5)==0)
          GPS_synk_flag=true;
        //
        if (health_count > 4)
        {
            gps_info.health = FALSE;
            //PPS_INT_ENABLE(); //PPS_INT_DISABLE();
            pin_on(OPIN_GPS_RESET);  // Пробуем сбросить модуль GPS
            health_count = 1;
        }
        else
        {
            pin_off(OPIN_GPS_RESET);
            if (!health_count++)
                gps_info.health = TRUE;
        }

        //if (health != gps_info.health)
        {
            health = gps_info.health;
            if (health){
              dbg_puts("GPS/GLONASS module found");
              WrateEventStr(ST_M_OK);
              }
              else{
              dbg_puts("GPS/GLONASS module lost");
              WrateEventStr(ST_M_NO);
              }
        }

        if (fix_valid != gps_info.fix_valid)
        {
            fix_valid = gps_info.fix_valid;
            if (fix_valid){
                dbg_puts("GPS/GLONASS FIX valid");
                WrateEventStr(ST_F_OK);
                }
                else{
                dbg_puts("GPS/GLONASS FIX invalid");
                WrateEventStr(ST_F_NO);
                }
        }

        if (time_valid != gps_info.time_valid)
        {
            time_valid = gps_info.time_valid;
            if (time_valid)
            {
                dbg_puts("GPS/GLONASS time valid");
                PPS_INT_ENABLE();
                WrateEventStr(ST_T_OK);
            }
            else{
            dbg_puts("GPS/GLONASS time invalid");
            WrateEventStr(ST_T_NO);
            }
        }
    }
}