83 lines
2.0 KiB
C
83 lines
2.0 KiB
C
/**
|
||
******************************************************************************
|
||
* @file user\task\HeartBeatTask.c
|
||
* @author luhuaishuai
|
||
* @version v0.1
|
||
* @date 2026-1-12
|
||
* @brief 心跳任务,负责发送心跳包和处理云快充的响应
|
||
******************************************************************************
|
||
*/
|
||
|
||
/* Includes ------------------------------------------------------------------*/
|
||
#include "HeartBeatTask.h"
|
||
|
||
void HeartBeat_Sign(void);
|
||
|
||
|
||
/**
|
||
* @funNm : HeartbeatTask_Function
|
||
* @brief : 心跳
|
||
* @param : argument
|
||
* @retval: void
|
||
*/
|
||
void HeartbeatTask_Function(void const *argument)
|
||
{
|
||
while (1)
|
||
{
|
||
TaskRunTimeStat.HeartBeatTask.threads_runtime = GetTask_RunTime(HeartBeatTaskID);
|
||
TaskRunTimeStat.HeartBeatTask.threads_counter = GetTask_Beatcnt(HeartBeatTaskID);
|
||
TaskRunTimeStat.HeartBeatTask.threads_freestack = Get_Free_Stack(HeartBeatTaskID);
|
||
|
||
HeartBeat_Sign(); // 指示灯、蜂鸣器
|
||
|
||
// HAL_IWDG_Refresh(&hiwdg); //喂狗
|
||
|
||
osDelay(50);
|
||
}
|
||
}
|
||
/**
|
||
* @funNm : HeartBeat_Sign
|
||
* @brief : 心跳指示灯、蜂鸣器 云快充心跳
|
||
* @param : none
|
||
* @retval: void
|
||
*/
|
||
static uint32_t last_heartbeat_tick[MAX_CHARGER_COUNT] = {0};
|
||
|
||
void HeartBeat_Sign(void)
|
||
{
|
||
int i;
|
||
uint32_t now = HAL_GetTick();
|
||
bool any_online = false;
|
||
|
||
/* 6路桩独立心跳,互不影响 */
|
||
for (i = 0; i < MAX_CHARGER_COUNT; i++)
|
||
{
|
||
if (g_charger_manager.charger_piles[i].is_online)
|
||
{
|
||
any_online = true;
|
||
if ((now - last_heartbeat_tick[i]) >= 8000)
|
||
{
|
||
last_heartbeat_tick[i] = now;
|
||
charger_to_server_0X03(i + 1, 1, 0);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (any_online)
|
||
{
|
||
RUN_EVERY(100, tick_B, {
|
||
System_Mode_Led_Toggle();
|
||
});
|
||
}
|
||
else
|
||
{
|
||
RUN_EVERY(500, tick_C, {
|
||
System_Mode_Led_Toggle();
|
||
});
|
||
}
|
||
|
||
RUN_EVERY(1000, tick_D, {
|
||
System_Run_Led_Toggle();
|
||
});
|
||
}
|