docs: record v1.1.1 dirty-network recovery design
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
|
||||
632 0 0 0 0 0 ch390.o
|
||||
616 0 64 0 0 0 ch390_interface.o
|
||||
2050 0 85 6 88 0 ch390_runtime.o
|
||||
2546 0 85 6 136 0 ch390_runtime.o
|
||||
3958 0 591 8 1240 0 config.o
|
||||
8 0 0 0 0 0 def.o
|
||||
124 0 0 0 0 0 dma.o
|
||||
@@ -17,7 +17,7 @@
|
||||
778 0 0 2 0 0 ip4.o
|
||||
46 0 4 0 0 0 ip4_addr.o
|
||||
44 0 0 0 12 0 iwdg.o
|
||||
3212 0 185 12 272 0 main.o
|
||||
3264 0 300 12 272 0 main.o
|
||||
828 0 0 12 4115 0 mem.o
|
||||
196 0 244 32 6464 0 memp.o
|
||||
582 0 0 12 0 0 netif.o
|
||||
@@ -43,10 +43,10 @@
|
||||
490 0 0 0 0 0 stm32f1xx_it.o
|
||||
2 0 24 4 0 0 system_stm32f1xx.o
|
||||
3474 0 193 32 0 0 tcp.o
|
||||
1556 0 0 0 1072 0 tcp_client.o
|
||||
1734 0 0 0 1088 0 tcp_client.o
|
||||
3684 0 0 36 20 0 tcp_in.o
|
||||
3862 0 0 0 0 0 tcp_out.o
|
||||
1346 0 0 0 1048 0 tcp_server.o
|
||||
1364 0 0 0 1048 0 tcp_server.o
|
||||
164 0 0 0 72 0 tim.o
|
||||
374 0 16 12 0 0 timeouts.o
|
||||
1590 0 0 0 2936 0 uart_trans.o
|
||||
@@ -57,8 +57,8 @@ Memory Map of the image
|
||||
|
||||
Load Region LR_IROM1
|
||||
|
||||
Execution Region ER_IROM1 (Exec base: 0x08000000, Size: 0x0000DB7C, Max: 0x00010000, END)
|
||||
Execution Region ER_IROM1 (Exec base: 0x08000000, Size: 0x0000DED8, Max: 0x00010000, END)
|
||||
|
||||
Execution Region RW_IRAM1 (Exec base: 0x20000000, Size: 0x00004F98, Max: 0x00005000, END)
|
||||
Execution Region RW_IRAM1 (Exec base: 0x20000000, Size: 0x00004FD8, Max: 0x00005000, END)
|
||||
|
||||
Image component sizes
|
||||
@@ -246,6 +246,55 @@ EN,LPORT,RIP,RPORT,UART
|
||||
|
||||
该结果说明修复后工程仍满足 `STM32F103R8T6` 的 `20KB RAM` 上限,但余量已经很小;后续若继续增加功能,应优先考虑复用现有缓冲与状态,而不是增加新的静态大数组。
|
||||
|
||||
### 6.3 客户现场脏网络恢复增强
|
||||
|
||||
客户现场换 PC 后曾出现设备持续 ARP、`ping` 不通、TCP Client 不恢复的现象。抓包显示故障前后存在 IPv6、DHCPv6、mDNS、IGMP、LLDP 等与当前业务无关的网络噪声;当前固件为静态 IPv4、TCP2UART 与 ICMP 诊断模型,不依赖 UDP、IPv6、DHCP 或多播发现。
|
||||
|
||||
本阶段采用低 RAM 优先的恢复策略,不先扩大 `PBUF_POOL_SIZE`,而是在更靠近入口的位置减少无关帧对 lwIP pool 的占用:
|
||||
|
||||
1. `TCP Client CONNECTING` 增加应用层超时:
|
||||
- `TCP_CLIENT_CONNECT_TIMEOUT_MS = 10000`
|
||||
- `tcp_connect()` 返回 `ERR_OK` 后记录 `connect_start_ms`
|
||||
- `tcp_client_poll()` 发现 `CONNECTING` 超过超时时间后,注销回调、`tcp_abort()` 当前 PCB、释放 `hold_pbuf`,再按原有 `reconnect_interval_ms` 重连
|
||||
- `tcp_client_status_t.connect_timeout_count` 记录发生次数
|
||||
2. `CH390` RX 入口增加 `pre-pbuf` 协议过滤:
|
||||
- 在 `pbuf_alloc(PBUF_RAW, ..., PBUF_POOL)` 之前先读取以太网头与最小 IPv4 头
|
||||
- 允许进入 lwIP 的协议限定为 `ARP`、`IPv4 ICMP`、`IPv4 TCP`
|
||||
- 默认丢弃 `IPv6`、`IPv4 UDP`、`IPv4 IGMP`、`LLDP`、未知 EtherType 与畸形头
|
||||
- 丢弃帧只跳过 CH390 RX FIFO 剩余字节,不分配 pbuf
|
||||
3. 软件 MAC 过滤暂不启用:
|
||||
- 第一版只做协议层过滤,避免误杀广播 ARP 或未来硬件过滤策略变化
|
||||
- 目的 MAC 相关判断保留为后续可选增强
|
||||
|
||||
新增 CH390 诊断字段用于现场判断是否仍存在资源压力:
|
||||
|
||||
1. `rx_pbuf_alloc_failed`
|
||||
2. `rx_filtered_frames`
|
||||
3. `rx_filtered_ipv6`
|
||||
4. `rx_filtered_udp`
|
||||
5. `rx_filtered_igmp`
|
||||
6. `rx_filtered_lldp`
|
||||
7. `rx_filtered_other_eth`
|
||||
8. `rx_filtered_other_ipv4`
|
||||
9. `rx_filtered_malformed`
|
||||
10. `rx_ipv4_icmp_frames`
|
||||
11. `rx_ipv4_tcp_frames`
|
||||
12. `rx_ipv4_udp_frames`
|
||||
|
||||
验收口径:
|
||||
|
||||
1. 正常 `ARP / ping / TCP Server / TCP Client` 功能不受影响
|
||||
2. 客户脏网络中的 IPv6、UDP、IGMP、LLDP 噪声不会进入 lwIP pbuf pool
|
||||
3. 若远端 TCP Server 不监听或静默丢 SYN,TCP Client 不再永久停留在 `CONNECTING`
|
||||
4. 若过滤后 `rx_pbuf_alloc_failed` 仍持续增长,再评估从无关功能中回收 RAM 并调整 `PBUF_POOL_SIZE`
|
||||
|
||||
本阶段 Keil 构建验收结果:
|
||||
|
||||
1. `errors = 0`
|
||||
2. `warnings = 0`
|
||||
3. `flash_bytes = 57404`
|
||||
4. `ram_bytes = 20440`
|
||||
|
||||
## 七、主循环实现方向
|
||||
|
||||
主循环仍保持裸机轮询风格:
|
||||
|
||||
Reference in New Issue
Block a user