2026-03-14 08:47:57 +08:00

32 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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