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

2.6 KiB
Raw Blame History

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_msxTaskGetTickCount / vTaskDelay
    • 互斥锁:qdx_port_mutex_*xSemaphoreCreateMutex / xSemaphoreTake / xSemaphoreGive
    • 线程:qdx_port_thread_createxTaskCreate
    • TCP Socketqdx_port_tcp_connect / send / recv / close → 封装 WCHNET 的 socket 创建、WCHNET_SocketSend、接收回调缓冲与 WCHNET_SocketClose
  • BREAKINGmain.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_ChangeDetectionResultCallback_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 时钟频率与中断优先级。