## Why 当前 QDX 网络栈的硬件抽象层 (`qdx_port_template.c`) 全部 11 个函数均为空 stub,导致 `qdx_tcp_logic` 的双流管理、心跳重连以及 `qdx_preprocess` 的并发互斥等核心功能无法真正运行。该 port 层需要对接 CH32V307 平台的 WCHNET 协议栈和 FreeRTOS 操作系统原语,使整条"采集→预处理→TCP 封包发送"的业务流水线实际贯通。 ## What Changes - 将 FreeRTOS 内核合入 TCPClient 工程(源码已存在于 `prj/FreeRTOS_Core/`),完成编译链接集成。 - 新增 `qdx_port.c`(基于 `qdx_port_template.c`),使用 FreeRTOS + WCHNET API 实现全部 port 函数: - 时间与延时:`qdx_port_get_tick_ms` / `qdx_port_delay_ms` → `xTaskGetTickCount` / `vTaskDelay`。 - 互斥锁:`qdx_port_mutex_*` → `xSemaphoreCreateMutex` / `xSemaphoreTake` / `xSemaphoreGive`。 - 线程:`qdx_port_thread_create` → `xTaskCreate`。 - TCP Socket:`qdx_port_tcp_connect` / `send` / `recv` / `close` → 封装 WCHNET 的 socket 创建、`WCHNET_SocketSend`、接收回调缓冲与 `WCHNET_SocketClose`。 - **BREAKING**:`main.c` 主循环重构为 FreeRTOS 任务调度模型,`main()` 末尾调用 `vTaskStartScheduler()` 替代裸机 `while(1)` 轮询。 - 补全 `OnConfigUpdate` 回调,联级调用 `Preprocess_Settings_Change` 使上位机参数热更新生效。 - 补全 `OnDetectionResult` 回调,实现 NG 剔除 GPIO DO 输出及定时器延时复位。 ## Capabilities ### New Capabilities - `freertos-wchnet-port`: 基于 FreeRTOS 和 WCHNET 实现 `qdx_port.h` 定义的全部硬件/OS 抽象接口(时间、延时、互斥锁、线程、TCP socket),使 QDX 网络栈在 CH32V307 上实际运行。 ### Modified Capabilities - `tcp-stream-logic`: 回调实现补全——`ConfigUpdateCallback_t` 内联级调用 `Preprocess_Settings_Change`;`DetectionResultCallback_t` 内驱动 DO GPIO 执行 NG 剔除动作及定时复位。 ## Impact - **构建系统**:TCPClient 工程需链接 FreeRTOS 源文件(tasks.c、queue.c、list.c、timers.c、port.c、heap_4.c)和对应的 include 路径。 - **main.c**:从裸机 `while(1)` 重构为 RTOS 多任务——主业务任务(DVP 采集 + 预处理 + 发送)、WCHNET 轮询任务、以及 `qdx_tcp_logic` 创建的 3 个后台线程。 - **内存**:FreeRTOS 内核 + 任务栈额外占用约 8-12 KB RAM,需确认 CH32V307 64KB SRAM 余量充足。 - **中断**:TIM2 中断需同时服务 FreeRTOS tick 和 WCHNET 定时器。 - **依赖**:`FreeRTOSConfig.h` 需要适配 CH32V307 时钟频率与中断优先级。