/** ****************************************************************************** * @file user\task\HeartBeatTask.c * @author luhuaishuai * @version v0.1 * @date 2026-1-12 * @brief 心跳任务,负责发送心跳包和处理云快充的响应 ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "task_sys.h" void HeartBeat_Sign(void); /** * @funNm : HeartbeatTask_Function * @brief : 心跳 * @param : argument * @retval: void */ void sys_task_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); } } } if (any_online) { RUN_EVERY(50, 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(); }); }