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