Skip to content

Commit

Permalink
теперь матмодель сама отключает свой таймер, и завершает работу, а ta…
Browse files Browse the repository at this point in the history
…skmanager при этом переходит на особую задачу, где завершает посадку и продолжает заниматься диагностикой и опросом данных до выключения
  • Loading branch information
iamsaywhat committed Jul 29, 2020
1 parent 2859d39 commit c425db1
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 31 deletions.
10 changes: 8 additions & 2 deletions irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,14 @@ void Timer1_IRQHandler(void)
MathModel_step();
/* Выполняем требования матмодели */
MathModel_control();
/* Сбрасываем цикл пассивных задач */
TaskManager_gotoTask (TaskTest, 0);

/* Если алгоритм завершил работу, то переходим к подзадаче
завершения работы - TaskExit, если нет, то сбрасываем его
на TaskTest */
if(MathModel_touchdownStatus())
TaskManager_gotoTask(TaskExit, 0);
else
TaskManager_gotoTask (TaskTest, 0);
}

/******************************************************************
Expand Down
42 changes: 16 additions & 26 deletions math.model/mathmodelapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@
#define lon 1
#define alt 2


/***************************************************************************
MathModel_touchdownStatus - Завершил ли алгоритм управления работу
***************************************************************************/
uint8_t MathModel_touchdownStatus(void)
{
return (uint8_t)rtY.touchdown;
}

/***************************************************************************
MathModel_init - Инициализация мат. модели
***************************************************************************/
Expand Down Expand Up @@ -78,32 +87,13 @@ void MathModel_prepareData (void)
***************************************************************************/
void MathModel_control (void)
{
// Команды на посадку не было, поэтому будем управлять стропами
if (rtY.touchdown == 0)
MathModel_sendBimCommand ((uint8_t)rtY.leftStrap, (uint8_t)rtY.rightStrap);

// Команда на посадку, завершаем работу
else if (rtY.touchdown == 1)
{
// Переводим БИМЫ в состояние по умолчанию
MathModel_sendBimCommand (0, 0);
// Замок створки открыть
TOUCHDOWN_PYRO_ON();
SelfTesting_TDS();

#ifdef LOGS_ENABLE
logger_warning("the flight is over");
logger_point("final", Bup_getCurrentPointLatitude(),
Bup_getCurrentPointLongitude(), Bup_getCurrentPointAltitude());
#endif

delay_ms(10000); // Ждем 10 секунд
TOUCHDOWN_PYRO_OFF(); // Отключаем реле створки замка (нельзя удерживать дольше 10 секунд)
SelfTesting_TDS();

BIM_disable(); // Отключаем БИМы
SelfTesting_POW_BIM();
while(1); // Повисаем в ожидании перезапуска
if (rtY.touchdown == 0) // Команды на посадку не было, поэтому будем управлять стропами
MathModel_sendBimCommand ((uint8_t)rtY.leftStrap, (uint8_t)rtY.rightStrap);
else // Команда на посадку, завершаем работу
{
Timer_deinitialize (MMODEL_TIMER); // Отключаем таймер матмодели
MathModel_sendBimCommand (0, 0); // Переводим БИМЫ в состояние по умолчанию
TOUCHDOWN_PYRO_ON(); // Замок створки открыть
}
}

Expand Down
8 changes: 8 additions & 0 deletions math.model/mathmodelapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@



/***************************************************************************
MathModel_touchdownStatus - Завершил ли алгоритм управления работу
Возвращает:
0 - Еще нет
1 - Алгоритм завершился
***************************************************************************/
uint8_t MathModel_touchdownStatus(void);

/***************************************************************************
MathModel_initialize - Инициализация мат. модели
***************************************************************************/
Expand Down
12 changes: 9 additions & 3 deletions taskmanager.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ TaskManagerStatus TaskManager = {0,0,0,0};
static void task_loger(void);
static void task_selftesting(void);
static void task_can_debug(void);
static void task_exit(void);


/*********************************************************************************************************
Expand Down Expand Up @@ -115,6 +116,12 @@ void TaskManager_run (void)
#endif //******************************************************************** !LOGS_ENABLE
break;
}
case TaskExit: /* Задача завершения работы */
{
task_exit();
while (1)
TaskManager_autoUpdateAndSelftesting();
}
default: /* Цикл задач завершен */
{
// Будем ждать перезапуска по таймеру
Expand Down Expand Up @@ -410,16 +417,15 @@ void task_loger (void)
**********************************************************************************************************/
void task_exit (void)
{
SelfTesting_TDS();
SelfTesting_TDS();
#ifdef LOGS_ENABLE
logger_warning("the flight is over");
logger_point("final", Bup_getCurrentPointLatitude(),
Bup_getCurrentPointLongitude(), Bup_getCurrentPointAltitude());
#endif
delay_us(5000000); // Ждем 5 секунд
delay_ms(10000); // Ждем 10 секунд
TOUCHDOWN_PYRO_OFF(); // Отключаем реле створки замка (нельзя удерживать дольше 10 секунд)
SelfTesting_TDS();
BIM_disable(); // Отключаем БИМы
SelfTesting_POW_BIM();
while(1); // Повисаем в ожидании перезапуска
}

0 comments on commit c425db1

Please sign in to comment.