## 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 时钟频率与中断优先级。
