#ifndef SYS_TASK_RUNNER_H #define SYS_TASK_RUNNER_H #include "device/adc.h" /** * @brief 任务执行器。 * @note 负责消费 TaskManager 置位的任务,并驱动各模块完成实际工作。 */ class TaskRunner { public: /** * @brief 初始化任务执行器运行时上下文。 * @param[in] 无。 * @param[out] 无。 * @retval 无返回值。 * @note 执行一次初始 ADC 采样,填充运行时数据的起点。 */ static void init(); /** * @brief 执行当前所有已置位的待处理任务。 * @param[in] 无。 * @param[out] 无。 * @retval 无返回值。 * @note 若当前没有待执行任务,直接返回。 */ static void runPending(); /** * @brief 拷贝当前 ADC 工程量快照(供 SPI 0xC4 调试反馈等只读路径)。 * @param[out] out 非空时写入最新 Sample。 * @return true 表示 out 已写入(不保证 valid==1,调用方看 sample.valid)。 */ static bool copyAdcSample(Adc::Sample *out); private: struct Runtime; static Runtime s_runtime; /** @brief 采样 VIN/VREF 原始值。 */ static void taskAdcVrefSample(); /** @brief 采样内部温度原始值。 */ static void taskAdcTempSample(); /** @brief 根据采样值计算工程量。 */ static void taskAdcProcess(); /** @brief 解析并消费接收帧。 */ static void taskCanRxParse(); /** @brief CAN 周期发送任务;每 10ms 每通道发送一帧测试报文。 */ static void taskCanTxSend(); /** @brief 心跳维护任务。 */ static void taskHeartbeat(); /** @brief 诊断打印任务。 */ static void taskDiagnosticPrint(); }; #endif /* SYS_TASK_RUNNER_H */