PASII/CandeII_1.4/Taskrun/detect_task.c

106 lines
2.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*****************************************************************
;Project: Light
;MCU:
;Date:
;File:
;Function:
******************************************************************/
#include "detect_task.h"
#include "shockLed_task.h"
#include "chargeLed_task.h"
#include "tick.h"
#include "adc.h"
#include "TaskRun.h"
#include "config.h"
/*---------------------------------------------------------------*/
//变量定义
TaskSwitch_t tTaskSwitch;
static TaskSwitch_t Last_tTaskSwitch = TaskSwitch_None; //初始化为没有任务执行
static unsigned char TaskInitFlag = 1; //任务初始化标志位
/*---------------------------------------------------------------*/
//外部变量调用声明
extern TaskFlagUnion_t tTaskFlag;
extern unsigned char VoltageStableFlag; //电池电压稳定标志
/*---------------------------------------------------------------*/
//检测车子的状态 1: 充电状态 2震动显示电量状态
static void DetectConnect_Task(void)
{
//--如果在充电
if(tTaskFlag.tFlag.chargeFlag == 1)
{
tTaskSwitch= TaskSwitch_Charge;
}
else //--如果没充电
{
tTaskSwitch = TaskSwitch_shock;
}
}
/*---------------------------------------------------------------*/
//任务切换
void Task_Switch(void)
{
static unsigned short timer_Task = 0;
static unsigned char Task_state = 0;
switch(Task_state)
{
case 0:
ADC_Sample(); //1: 计算电池电量百分比 2: 检测是否在充电
DetectConnect_Task();
TimerSet(timer_Task, 20); //设置20ms定时每20ms侦测一次
if(VoltageStableFlag==1)
{
Task_state = 1;
}
break;
case 1:
if(TimerCheck(timer_Task,20))
{
if(tTaskSwitch != Last_tTaskSwitch ) //判断前后两次任务是否一致
{
tTaskFlag.TaskFlagValue &= 0x01; //清空标志位
if(tTaskSwitch == TaskSwitch_shock)
{
TaskRunProcess = (*shockLed_Task);
tTaskFlag.tFlag.shockFlag = 1;
VoltageStableFlag = 0;
}
else
{
if(tTaskSwitch == TaskSwitch_Charge)
{
TaskRunProcess = (*chargeLed_Task);
tTaskFlag.tFlag.chargeFlag = 1;
}
}
Last_tTaskSwitch = tTaskSwitch;
Set_TaskInitFlag(1); //说明有任务切换
}
Task_state = 0;
}
break;
default:
Task_state = 0;
break;
}
}
/*---------------------------------------------------------------*/
//--获取任务初始化状态
unsigned char Get_TaskInitFlag(void)
{
return TaskInitFlag;
}
/*---------------------------------------------------------------*/
//--设置任务初始化状态
void Set_TaskInitFlag(unsigned char Flag)
{
TaskInitFlag = Flag;
}
/*---------------------------------------------------------------*/