4c0a0af9f8
纯注释/死码(零行为变更): - 0-1 pump 注释 50ms→100ms(宏真值源 100U,net_socket.c) - 0-2 D10 give-up 文案改"retry budget exhausted, pump takes over" (旧文案夸大永久失效语义,pump 100ms 仍周期认领重建) - 0-7 IP 字节序注释更正:set_ip/gw/mask 实为点分十进制序(调用方 parse_ip_string 数组直传、芯片按首段接受、台架多年实证); set_des_ip 补"与 get_remot_ipp 输出同序"往返注(ch395f.h/.c) - 0-8 Trap 13 注释降级为"未证实历史观察"(对齐 2026-10-11 Trap 13 复核注,与手册 §5.34 相左):DMA 定容理由改"接收缓冲 2KB 整缓冲 单读=Trap 25 排空契约形态";net_socket.c 四处引用改写 - 0-9 删死声明:GET_GLOB_INT_STATUS(0x29)/ENTER_SLEEP/EEPROM×3/ GPIO×2/SPI_BEGIN_DELAY_MS/GINT_STAT_SOCK0..3(全仓零引用核实) 小逻辑(台架冒烟实证): - 0-3 U12 对称:TCP_LISTEN 失败补 close 两处(net_relisten_locked / net_listen_locked)——防芯片 Socket 卡"OPEN 无监听"、下轮 open 恒返 USE(U12 同源事故形态) - 0-4 retry_tick 状态门:仅 LISTENING/CLOSED 才重试;已转 ESTABLISHED (新会话抢先)清陈旧登记,防 open→close 摧毁活连接(认领口径同 pump) - 0-5 FUN_PARA 裸 0x08 → CH395F_FUN_PARA_SOCKET_CLOSE(复用既有宏 (1UL<<3),注释补 §5.52/版本/红线口径;曾重复定义触发 9 警告, 已并入原宏块) - 0-6 版本门控:ver<0x46 拒置 bit3 并 [ERR] 留痕(防芯片批次漂移; 本台架 ≥0x46 行为不变,fun_para 日志改打实际值) 验证:@build 全量重编 0 错 0 警(Code=209580,RW/ZI 不变);@test PASS(回读无差异);冒烟 n30 0/20、:21 @0ms 20/20、:7003 20/20、 ftp_regression 11/11。 门禁说明:doc-links 工作树 junction 伪影按既定口径 SKIP;mem-budget 分支 .map 漂移同前;cppcheck/coding-standard 手跑 Passed。
Drivers/BSP/NET/ — 网络抽象层(BSD Socket API)
在 CH395F 硬件驱动之上提供 BSD Socket 风格 API,使上层(FTP 服务、时间同步、UI 推流) 以标准 socket 语义编程,无需关心芯片细节。核心是阻塞模型 + 事件驱动 + 周期对账自愈。
文件一览
| 文件 | 作用 |
|---|---|
net_socket.c/h |
BSD Socket API 实现:net_socket / net_connect / net_send / net_recv / net_close / net_listen / net_accept,含 L3 挂起(pending)与错误码 |
net_select.c/h |
select/poll 多路复用(基于芯片中断事件 + 周期轮询) |
net_types.h |
网络层公共类型定义 |
net_config.h |
网络层编译期配置(缓冲区大小、超时、对账周期等) |
lftpd/ |
轻量 FTP 服务器(第三方移植,见其子目录) |
核心机制
阻塞模型(L3 pending)
- 一期(RECV)已落地:
net_recv等支持带超时的阻塞(pending挂起 + tick 唤醒) - 二期(ACCEPT + SEND)待做 →
docs/任务规划/登记簿.mdN-4
周期对账自愈(Trap 22 修复)
net_reconcile_tick()(200ms)回读芯片状态修正三类失同步: 本层 ESTABLISHED 而芯片已断 → 断开;本层 LISTENING 而芯片已握手 → 补 accept; 本层 LISTENING 而芯片监听消失 → 重建- 去抖(连续 2 次)+ 冷却(1s)——单次状态读的重建动作必须去抖,
否则"刚 listen 未生效"瞬态会反复重建直至
relisten give up(三监听口全死)
异常复监听隔离(Trap 23 修复)
- 异常释放(TIMEOUT)的 socket 复监听前隔离:排空 RX 残渣 + 主动 close + 等 CLOSED
- 400ms 起、800ms 上限强制放行(上限须 < 重试放弃时限 2000ms)
- 仅异常路径生效,正常 FIN 路径零改动
错误码(E-03 修复)
- 按任务隔离:
s_net_errno_slots[8](每槽{任务句柄, err}),替代原全局s_net_errno net_get_errno()只读本任务槽位,对外语义不变(成功不清零)
依赖关系
上层(FTP / timeSync / UI 推流)
↓ BSD Socket API
net_socket.c ←→ net_select.c
↓ ch395f_* 接口
Drivers/BSP/CH395F/
⚠️ 改本模块前必读
- 就绪屏障位(
SYS_EVT_NET_READY等)等待必须osFlagsNoClear,不能用默认消费型 - 每次 CH395F SPI 事务须
ch395f_spi_begin()/end()包裹 - 改任何自愈/重建逻辑必须去抖,否则会引发重建风暴
- 相关陷阱:
docs/问题记录/CH395F_Trap_Records.mdTrap 21/22/23
相关文档
- 上层用法:
docs/网络/BSD_Socket_API_使用指南.md - 内部调用关系:
docs/网络/BSD_Socket_API_函数调用关系.md - 架构设计:
docs/网络/Net层阻塞模型架构设计.md(阻塞等待 / pending 请求模型) - 二期设计基线:
docs/任务规划/基线与待确认.md§2.1 - 测试:
docs/测试说明/CH395F_Test_Guide.md、docs/测试说明/FTP_Test_Guide.md