void ReaddataTask02(void *argument) { /* USER CODE BEGIN ReaddataTask02 */ /* Infinite loop */ uint8_t fdc2214_ready = 0; float cap1 =0; uint16_t deviceID = 0; uint8_t deviceValid = 0; // 设备ID是否有效的标志 uint32_t lastCheckTime = 0; // 记录上次检查时间 const uint32_t checkInterval = 5000; // 5秒检查间隔(毫秒) static int dropped_cnt = 0; // 监测未消费数据丢弃计数器 Filter_msg1 msg; for(;;) { // 初始化检查 if (!fdc2214_ready) { fdc2214_ready = (FDC2214_Init() == 0) ? 1 : 0; if (!fdc2214_ready) { FDC_PRINTF("\r\nRetrying FDC2214 init in 1s ..."); osDelay(1000); continue; }else{ deviceValid = 1; } } // 每5秒检查一次设备ID uint32_t currentTime = osKernelGetTickCount(); if (currentTime - lastCheckTime >= checkInterval) { deviceID = FDC2214_Read16(FDC2214_Addr, FDC2214_DEVICE_ID); //读器件ID FDC_PRINTF("\r\nDevice ID: 0x%04X", deviceID); if (deviceID == 0x3055) { deviceValid = 1; } else { deviceValid = 0; fdc2214_ready = 0; // 重新初始化 FDC_PRINTF("\r\nDevice ID ERROR!"); osDelay(1000); } lastCheckTime = currentTime; } // 只有设备ID有效时才采集数据 if (deviceValid) { cap1 = getcap(0, 18, 13) - 43.1f; // 采集数据 通道0,电感,电容 /* 并联 18uh - 13pf : 测量47pf , -30.6 , 并联 18uh - 33pf : 测量47pf , -43.1 */ Filter_msg1 msg; msg.data = cap1; // 将数据放入队列 if (xQueueSend(filterqueue1Handle, &msg, pdMS_TO_TICKS(1)) != pdPASS) { dropped_cnt++; FDC_PRINTF("\r\nQueue full, cap=%.3f not sent. Dropped=%d", cap1, dropped_cnt); } } osDelay(10); } /* USER CODE END ReaddataTask02 */ }