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:
@@ -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-pin,64KB SRAM)
|
||||
2. 工程可在 `MDK-ARM` 下构建
|
||||
3. 调试输出统一使用 `SEGGER RTT`
|
||||
4. 不引入 DHCP、DNS、UDP 等当前非目标协议
|
||||
|
||||
Reference in New Issue
Block a user