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