Files
STM32F4-Base/tools
wandering1 e7f28502bc refactor(NET): netMsgQueueHandle 收进 net_socket 私有,改为创建后绑定
结构债 S-2 的最后一步——**该族的 24 处手写跨模块裸 extern 就此全部清零**。

队列对象仍由 CubeMX 在 `MX_FREERTOS_Init()` 创建(**创建点不可外移**:
`osKernelInitialize()` 之前的任何创建类 API 会杀死启动,见
`docs/架构设计/项目启动顺序管理.md`);改为创建后立刻在 `Src/freertos.c` 的
`USER CODE BEGIN RTOS_QUEUES` 区调用 `net_msg_queue_adopt(netMsgQueueHandle)`,
把句柄交给唯一使用者。`net_socket.c` 内改用 `static osMessageQueueId_t
s_net_msg_queue`(21 处引用改名),BSP 对该全局变量的裸 `extern` 消失——现在
`netMsgQueueHandle` 只出现在生成文件自己的两处(定义 + 创建)。

两个刻意的设计决定:
① **不新建第二个队列**。自建队列 + 删 `.ioc` 里的 netMsgQueue 也能收口,但要
   CubeMX 重生成(Ask-first),过渡期还会同时存在两个队列,白占 CCM 堆里
   8 × `net_msg_t` 的空间——CCM 正是当下 87.9% 的红线。故选"创建后绑定"。
② `adopt()` **拒绝重复绑定、保留首次句柄**。真出现两处绑定时,静默换句柄会让
   已入队的请求留在旧队列里永不处理;拒掉第二个反而更容易暴露。绑定前的判空
   是真实防线:丢了那一行,后果是"所有 net_* 请求被丢弃、网络全线静默不通",
   不是崩溃。

**防回退**:`check_cubemx_survival.py` 新增存活项 `net-msgq-adopt`(region
`RTOS_QUEUES`、`must_contain=["net_msg_queue_adopt"]`),易失清单 29 → 30 项全部
到位;基线已重建(有意的 USER CODE 区改动,按脚本文档流程 `--write`)。

**体量**:`Code` 213,204 → **213,236 B(+32)**、`ER_IROM1` **231,816 B(22.1%)**;
`RW +4 / ZI −4` → `RW_IRAM1` 恒 **75,264 B(57.4%)**、`RW_CCM` 恒 **57,376 B
(87.9%)**、`RW+ZI` 总量 132,688 B 不变(没有多占一个字节 RAM)。

**验证**:`@build` 0 错 0 警告;`@test` PASS——624 ms 到 `net init: OK`、`i104:
listening on 2404`、无 `[ERR]`/Fault、`heap free=15800 min_ever=8464` 逐项不变。
另在真机跑了一次 FTP 控制通道往返:220 → `USER admin` 331 → `PASS admin` 230
→ `PWD` 257 → `TYPE I` 200 → `QUIT` 221。每条命令都是一次过队列的
net_recv/net_send,证明绑定路径真在跑;`.map` 里 `freertos.o(MX_FREERTOS_Init)
refers to net_socket.o(i.net_msg_queue_adopt)` 证明镜像含该行。

⚠ **顺带揪出一条测试工具漂移(本次未修,等定夺)**:
`test/host/ftp_up_dl_test.py:123/126` 仍写死 `USER anonymous` /
`PASS test@test.com`,而设备自 N-19(2026-10-11)起按 `/config.ini [ftp]` 校验
admin/admin(SHA-256 `pwd_hash`)→ 该脚本必然登录失败。它是手工工具、不在任何
pre-commit 钩子里,所以 11 天没人发现,而 `docs/测试说明/FTP_Test_Guide.md` 把它
列为"推荐入口"。建议加 `--user/--password`(默认 admin/admin),并连
`ftp_speed_test.py` 一起核。

数字联动:两份 `data/` 快照重跑、`ram_baseline --update/--write`、
`check_mem_numbers --write`、FLASH 与任务栈两张配图常量重算并重新生成(逐文本按
字号与锚点复查越界 = 0)、报告 §1.3/§5.1/§5.4 与部署文档 §3.3 同步。报告 §0.4 的
S-2 行按「完成即销项」改写为已闭环,§9 拆出独立 S-2 行标 ✅。

门禁:`@build` 0/0、`@test` PASS、`layer-deps` / `cubemx-survival` / `mem-numbers`
(本次改到台账受管区,scan 已过)/ `mem-budget`(57.4% / 87.9%)/ `task-table` /
`doc-links --all`(146 文档 0 问题)/ `id-check --strict`(增量拦截通过、可判定
82.84%、存量债 640)全绿;14 个文件字节卫生 BOM 无 / CR 0 / U+FFFD 0 / 无尾空格。
未推送。
2026-10-22 20:01:40 +08:00
..

tools/ — 开发工具

面向开发者的功能性工具(生成器 / 转换器 / 交互工具)。 与 scripts/(质量门禁与度量)分工不同:本目录产出资产(图、字体、代码、知识库)。

工具一览

目录 工具 产物 文档
arch_diagram/ 架构图 SVG 生成器 docs/images/*.svg docs/架构设计/图形绘制流程.md
font_gen/ 中文字库生成 Drivers/BSP/UI/ui_font_cn_12.c docs/UI设计/UI_中文字体生成与配置.md
menu_gen/ 菜单树代码生成 UI 菜单代码 docs/UI设计/菜单页面设计.md
netlist_semantics/ 网表语义分析 引脚知识库 JSON + 网表报告 docs/硬件平台/
refgraph/ 文件引用关系图 docs/images/引用关系图.* docs/架构设计/引用关系图说明.md

使用方式

# 架构图(精确布局)
& '.venv\Scripts\python.exe' tools/arch_diagram/gen_memory_svg.py

# 中文字体(含新汉字文案后必须重跑)
& '.venv\Scripts\python.exe' tools/font_gen/make_font.py

# 引用关系图
& 'tools\refgraph\gen_refgraph.bat'

# 串口助手(常驻 daemon)
& '.venv\Scripts\python.exe' .dsh/skills/serial-assistant/scripts/serial_tool.py

⚠️ 约定

  • 生成器的产物与脚本一并提交(如 SVG);本地预览产物(如 PNG)不提交
  • 图表选型:精确布局图用 arch_diagram/ 生成器;拓扑图(流程/时序/状态机)用 Mermaid; 勿手绘 ASCII 框图(见 docs/架构设计/图形绘制流程.md)
  • 涉及 UI 改动:走 ui-verify skill 五步门禁;涉及字体:走 font-regen skill

相关文档

  • docs/架构设计/图形绘制流程.md — 配图规范与选型
  • docs/架构设计/引用关系图说明.md
  • docs/测试说明/串口助手使用指南.md、docs/测试说明/串口助手设计说明.md