refactor: 确定路径A架构(NO_SYS=0+netconn+多TCP任务),精确化任务设计与内存预算

- FreeRTOSConfig.h: 堆8->10KB, 优先级56->7, 添加lwIP sys_arch宏和任务优先级/栈大小定义
- lwipopts.h: LWIP_SOCKET=0节省RAM, LWIP_TCPIP_CORE_LOCKING=1, MEM_SIZE 8KB,
  PBUF_POOL 10, MEMP_NUM_NETCONN 8, TCP_SND_BUF/WND 8xMSS, 关闭DHCP/UDP,
  TCPIP_THREAD_STACKSIZE/PRIO明确指定
- 项目技术实现: 9+1任务架构, netconn阻塞模式每连接独立任务, 零拷贝route_msg_t,
  内存精确估算49KB(RCT6超1KB需优化或换RDT6), 模块重写/复用清单
- 项目需求说明: 明确netconn API路线, 添加RDT6备选, 更新任务列表9个任务
This commit is contained in:
2026-04-15 19:23:48 +08:00
parent dc277b040b
commit c81bd93205
4 changed files with 378 additions and 142 deletions
+18 -12
View File
@@ -22,6 +22,7 @@
### 2.1 硬件边界
- 主控:`STM32F103RCT6`256KB Flash / 48KB SRAM
- 备选主控:`STM32F103RDT6`384KB Flash / 64KB SRAM),pin-to-pin 兼容,当 RAM 不够时直接替换
- 以太网芯片:`CH390D`
- 网卡数量:`1`
- 配置口:`UART1`
@@ -30,10 +31,11 @@
### 2.2 软件边界
- 执行模型:`FreeRTOS`
- 网络协议栈:`lwIP + NO_SYS=0`(支持 socket/netconn 线程安全 API
- 网络协议栈:`lwIP NO_SYS=0 + netconn API`(线程安全,每连接独立任务
- 调试输出:`SEGGER RTT`
- 采用 `FreeRTOS` 任务调度
- 采用 `lwIP socket/netconn` `RAW API` 实现多路 TCP 并发
- TCP 连接使用 `netconn` 阻塞 API`netconn_accept` / `netconn_recv` / `netconn_write`
- 每条 TCP 连路(S1/S2/C1/C2)独立一个任务
- 不包含 DHCP 协议支持
## 三、最终协议需求
@@ -152,22 +154,26 @@ EN,LPORT,RIP,RPORT,UART
| 任务 | 优先级 | 职责 |
|------|--------|------|
| NetworkTask | 高 | CH390 事件轮询 + lwIP tcpip 处理 |
| UartTask | | UART DMA/IDLE 接收 + MUX 帧处理 |
| ConfigTask | | AT 命令解析与响应 |
| RouteTask | | SRCID/DSTMASK 数据路由 |
| DefaultTask | | LED 心跳 + 看门狗 |
| tcpip_thread | 6 (最高) | lwIP 内核线程(自动创建) |
| NetPollTask | 5 | CH390 事件轮询 + 链路检测 |
| TcpSrvTask_S1 | 4 | S1 netconn_accept + 收发 |
| TcpSrvTask_S2 | 4 | S2 netconn_accept + 收发 |
| TcpCliTask_C1 | 4 | C1 netconn_connect + 收发 |
| TcpCliTask_C2 | 4 | C2 netconn_connect + 收发 |
| UartRxTask | 4 | UART DMA/IDLE 接收 + MUX 帧提取 + 路由 |
| ConfigTask | 2 | AT 命令解析与响应 |
| DefaultTask | 1 | LED 心跳 + 看门狗 |
### 6.2 任务间通信
- 使用 `Queue` 传递 UART 接收数据帧
- 使用 `Semaphore` 同步 CH390 中断事件
- 使用 `Mutex` 保护 SPI/CH390 共享访问
- 使用 `StreamBuffer` 传递 TCP 数据到 UART 方向
- 使用 `Queue` 传递指针 + 元数据描述符(零拷贝路由消息)
- 使用 `Binary Semaphore` 同步 CH390 中断事件
- 使用 `TaskNotification` 通知 UART IDLE 事件
- 预分配静态缓冲池,避免动态分配
## 七、非功能需求
1. 满足 `STM32F103RCT6``256KB Flash / 48KB SRAM` 约束
1. 满足 `STM32F103RCT6``256KB Flash / 48KB SRAM` 约束,若 RAM 不足可切换 `STM32F103RDT6`pin-to-pin64KB SRAM
2. 工程可在 `MDK-ARM` 下构建
3. 调试输出统一使用 `SEGGER RTT`
4. 不引入 DHCP、DNS、UDP 等当前非目标协议