docs(env): 部署环境要求通篇校正 + 体积快照回填至 2026-11-15

四处来源不同的漂移一次性收口。

- 钩子数:原有三个互不相符的说法(48/47/49),实测 config 内 53 个、
  一次提交实跑 50 个(pre-commit 49 + commit-msg gitlint),manual 三根
  不进提交期,四处统一
- 单测数:看门狗 39/39 实为 47/47;ci_local 主机侧「278 条」实为
  48 个 runner / 4341 条断言
- 第 6 步原写 uv tool install pre-commit 再裸 pre-commit install,与
  §2.4/§2.7 相冲突(pre-commit 随 .venv 装、INSTALL_PYTHON 指向 .venv),
  改为 .venv 解释器调用;标题收为「cppcheck」
- 体积快照 2026-10-22 → 2026-11-15 实跑:Flash 232,536→288,628 B
  (22.2%→27.5%),SRAM1 75,264→97,248 B(57.4%→74.2%,余量仅剩
  33,824 B),CCM 不变;「余量集中在 SRAM1」的结论随之改口
- FTP 客户端三处统一为 MobaXterm(§4.2 / §4.4 / §5)

同时跟上文两句过时实测:.venv 已是干净 CPython 3.11(原写 Anaconda
3.12.4);CMake/Graphviz/cppcheck 的「本机实测」版本断言删除,改为
运行时核对。
This commit is contained in:
2026-11-15 20:09:09 +08:00
parent 16cc064385
commit df6e75a50d
4 changed files with 29 additions and 32 deletions
+1 -1
View File
@@ -248,7 +248,7 @@ cmake --build simulator/build --config Debug # 0) 构建模拟器(须 0 警
余地)。MCU 侧要拿到 bench 能力须临时给 `MDK-ARM/STM32F407-Demo.uvprojx` 加 `DTU_BENCH`
宏烧录,测完**必须还原宏并重烧产品构建**(uvprojx 抖动不入库,同构建节律)。
- **留档帧目录已并一**:`WALK_DIR` 与 `--walk` 存证目录同指存证根下的 `uinav/walk/`
(`#69` 之前两者分指不同目录,走的新帧 BOARD_TRUTH 段永远读不到,静默"跳过(无留档)")。
(此前两者分指不同目录,走的新帧 BOARD_TRUTH 段永远读不到,静默"跳过(无留档)")。
- **实机验证记录(2026-11-02 台架,两档实烧,输出全文贴在 PR #70 的台架证据评论)**:
bench 档(`fw build: Nov 2 2026 22:25:12`)上 STATUS 首答 `{kind=MENU depth=0 path=[0]
sel=[0]}`;GOTO `wave_play` 一次往返到达——#38 那趟"进故障录波看波形"的级联盲走就此降为
@@ -22,7 +22,7 @@ flowchart LR
S[CMake + VS2019/2026<br/>LVGL PC 模拟器]
P[Python .venv<br/>字体/回归脚本]
T[Python 串口助手 serial_tool<br/>串口调试/自动测试]
U[MSVC (VS2022 生成工具)<br/>主机侧单元测试 cl.exe]
U["MSVC (VS2022 生成工具)<br/>主机侧单元测试 cl.exe"]
G[Graphviz<br/>引用关系图渲染(可选)]
end
subgraph TGT["② 目标板(DTU 硬件)"]
@@ -134,7 +134,7 @@ Graphviz / Cppcheck 的安装位置差异一律用 `DTU_*` 环境变量表达(
| 项 | 要求 | 说明 |
|---|---|---|
| CMake | ≥ 3.15 | 本机实测 4.3.0-rc1;**仅模拟器需要**,单元测试不用 CMake |
| CMake | ≥ 3.15 | **仅模拟器需要**,单元测试不用 CMake;`cmake --version` 核对 |
| 编译器 | **VS2019 / 2022 / 2026 任一**(C++ x64 工作负载) | `build_sim.ps1` 按本机 VS 大版本自动选生成器(16=2019 / 17=2022 / 18=2026)、`-A x64`;CMakeLists 已加 `/utf-8` 消中文注释告警 |
| **MSVC C 工具链** | **同上(`cl.exe`)** | **主机侧单元测试的必需项**:`test/host/<模块>/run_unit_test.py` 用 `cl.exe` 离线编译真实源码。**只要装了 VS 就有**(`VC\Tools\MSVC\<ver>\bin\Hostx64\x64\cl.exe`),不额外装东西 |
| Windows SDK | 10.0.19041 及以上 | CMake 配置与 `cl.exe` 编译(`stdio.h` 等)都从这里取;随 VS 工作负载勾选安装 |
@@ -157,7 +157,7 @@ Graphviz / Cppcheck 的安装位置差异一律用 `DTU_*` 环境变量表达(
| 项 | 要求 | 说明 |
|---|---|---|
| 统一入口 | **仓库 `.venv\Scripts\python.exe`** | 一切依赖第三方库的脚本(字体生成、截图转 PNG、RemoDispBus 回归)都用它 |
| 解释器版本 | Python ≥ 3.10(任意发行版) | 种子解释器仅用于建 venv 一次;本机为 3.12.4 |
| 解释器版本 | Python ≥ 3.10(任意发行版) | 种子解释器仅用于建 venv 一次;本机 `.venv` 为干净 CPython 3.11(2026-11-15 由 Anaconda 基底重建) |
| 依赖 | `fonttools==4.51.0`、`pillow==10.3.0`、`pyserial==3.5`、`pre-commit==4.6.2` | 清单 = 仓库根 `requirements.txt`(**必须保持纯 ASCII**:Windows 下 pip 按 GBK 代码页解码,中文注释会 UnicodeDecodeError);`pre-commit` 入 `.venv` 后,重建 venv 即可直接跑静态门禁(`scripts/ci_local.py` 自动选用) |
| 入库情况 | `.venv/` 已 gitignore | **换机/首次必须重建** |
@@ -199,14 +199,14 @@ python tools/font_gen/extract_cn.py # 任意 python3:
| 项 | 要求 | 说明 |
|---|---|---|
| pre-commit | 已安装并 `pre-commit install` | 提交门禁(`pre-commit` 阶段 48 根 + commit-msg 阶段 `gitlint`,一次提交实跑 49 根) |
| pre-commit | 已安装并 `pre-commit install` | 提交门禁:`.pre-commit-config.yaml` 共 **53 个钩子**,一次提交实跑 **50 个**(pre-commit 阶段 49 + commit-msg 阶段 `gitlint`);余下 3 个带 `stages: [manual]`,归远端 CI 与 `ci_local.py` |
| cppcheck | 在 PATH 中 | 钩子直接调 `cppcheck --enable=warning,performance,portability,style`(`language: system`)。⚠ `cppcheck` / `test-cppcheck` / `test-coverage` 三根带 `stages: [manual]`:`git commit` 不跑,由远端 CI 的「手动阶段门禁」步与 `scripts/ci_local.py` 的 manual 段跑(CI runner 缺 cppcheck 则该步失败) |
| python | 在 PATH 中 | 本地钩子调 `scripts/check_mojibake.py`(U+FFFD 乱码)、`scripts/check_coding_standard.py`(规范 V1.0,纯标准库) |
| **MSVC `cl.exe`** | **装了 VS 即有(§2.3)** | **`watchdog-unit-test` 钩子必需**:改 `App/util/task_watchdog.*` 或 `test/host/watchdog/**` 时触发,用 `cl.exe` 离线编译真实源码跑单测。**未装 VS 时该钩子报环境错误(退出码 2)→ 拦截提交** |
| gitlint | 随 pre-commit 自动拉取 | commit message 格式(宽松规则,兼容中文标题) |
> 检查范围仅项目自有代码;`Lib/`、`Middlewares/`、`Drivers/BSP/UI`、`lftpd`、`dhara`、`test/` 等被排除。
> 全库扫描:`pre-commit run --all-files`(提交期 47 根);三根 manual 钩子逐根复跑:
> 全库扫描:`pre-commit run --all-files`(跑提交期那 49 个;gitlint 属 commit-msg 阶段,不在其中);三根 manual 钩子逐根复跑:
> `& '.venv\Scripts\python.exe' -m pre_commit run --all-files --hook-stage manual <hook-id>`(一次只能一个 id)。
> 详见 `docs/代码规范/pre-commit使用说明.md`、`docs/代码规范/cppcheck使用说明.md`。
>
@@ -217,7 +217,7 @@ python tools/font_gen/extract_cn.py # 任意 python3:
| 项 | 要求 | 说明 |
|---|---|---|
| Graphviz | `winget install Graphviz.Graphviz`(本机实测 16.1.0) | `tools/refgraph` 引用关系图生成器的渲染引擎;`dot` 从 **PATH** 查找(winget 安装自动入 PATH);非标准安装目录用 `DTU_GRAPHVIZ_DOT` 指向 `dot.exe`(§2.1.1) |
| Graphviz | `winget install Graphviz.Graphviz` | `tools/refgraph` 引用关系图生成器的渲染引擎;`dot` 从 **PATH** 查找(winget 安装自动入 PATH);非标准安装目录用 `DTU_GRAPHVIZ_DOT` 指向 `dot.exe`(§2.1.1) |
| 必需性 | **可选** | 未装时工具自动跳过渲染(仍产出 `.dot`/`.json`,装好后重跑即出图);不影响编译/测试/审查门禁 |
| 产物 | `docs/images/引用关系图.*` | 文件级 + 模块级 `.svg`/`.dot`/`.json`(随工具提交入库);PNG 仅本地预览(`docs/images/*.png` 已 gitignore) |
@@ -320,20 +320,18 @@ winget install OpenJS.NodeJS.LTS # 手动:https://nodejs.org/ (选 LTS
npm i -g lv_font_conv # 手动:https://www.npmjs.com/package/lv_font_conv
```
**第 6 步:pre-commit + cppcheck**(提交门禁)
**第 6 步:cppcheck**(提交门禁;pre-commit 已在第 4 步随 `.venv` 装好)
```powershell
winget install astral-sh.uv
uv tool install pre-commit
winget install cppcheck # 2.21.0(安装位置任意;入 PATH 或用 DTU_CPPCHECK 指向)
# ★ 重开终端(PATH 才生效),然后:
pre-commit install
pre-commit run --all-files # 首次全库基线扫描(提交期 47 根)
winget install cppcheck # 安装位置任意;入 PATH 或用 DTU_CPPCHECK 指向
# pre-commit 随 .venv 安装(§2.4,requirements.txt 已含),用 .venv 的解释器装钩子:
& '.venv\Scripts\python.exe' -m pre_commit install
pre-commit run --all-files # 首次全库基线扫描(提交期 49 个)
# manual 阶段三根(cppcheck / test-cppcheck / test-coverage,提交期不跑)逐根跑,一次一个 id:
& '.venv\Scripts\python.exe' -m pre_commit run --all-files --hook-stage manual cppcheck
```
> 手动下载:uv → https://astral.sh/uv/ (一行安装 `powershell -c "irm https://astral.sh/uv/install.ps1 | iex"`)· pre-commit → https://pre-commit.com/ · cppcheck 2.21.0 → https://github.com/CppQA/cppcheck/releases (2.21.0 tag 的 Windows x64 zip,解压至任意目录并加入 PATH,或用 `DTU_CPPCHECK` 指向 `cppcheck.exe`)
> 手动下载:cppcheck 2.21.0 → https://github.com/CppQA/cppcheck/releases (2.21.0 tag 的 Windows x64 zip,解压至任意目录并加入 PATH,或用 `DTU_CPPCHECK` 指向 `cppcheck.exe`)
**第 7 步:Python 串口助手**(串口调试 / 自动测试,仓库内置)
@@ -367,8 +365,8 @@ pre-commit run --all-files # 首次全库基线扫描(提交期 47
& '.venv\Scripts\python.exe' simulator\tests\check_menu_rows.py # PASS
& '.venv\Scripts\python.exe' simulator\tests\check_content_pages.py # PASS(基准 ref/*.bin 已入库,无需先生成)
& '.venv\Scripts\python.exe' .dsh\skills\serial-assistant\scripts\serial_tool.py selftest # → SELFTEST PASS
& '.venv\Scripts\python.exe' test\host\watchdog\run_unit_test.py # 主机侧单测 → 39/39 PASSED(退出码 0)
pre-commit run --all-files # 提交期 47 根(manual 三根另跑:--hook-stage manual <id>,或直接 ci_local.py)
& '.venv\Scripts\python.exe' test\host\watchdog\run_unit_test.py # 主机侧单测 → 47/47 PASSED(退出码 0)
pre-commit run --all-files # 提交期 49 个(manual 三根另跑:--hook-stage manual <id>,或直接 ci_local.py)
```
**搭建清单汇总**(随步骤逐项打勾):
@@ -402,8 +400,6 @@ pre-commit run --all-files # 提交期 47 根(manual 三根另跑:-
| Python | https://www.python.org/downloads/windows/ | ≥ 3.10,推荐 3.12 |
| Node.js | https://nodejs.org/ | LTS |
| lv_font_conv | https://www.npmjs.com/package/lv_font_conv | 一般 `npm i -g lv_font_conv` |
| uv | https://astral.sh/uv/ | `powershell -c "irm https://astral.sh/uv/install.ps1 \| iex"` |
| pre-commit | https://pre-commit.com/ | 一般 `uv tool install pre-commit` |
| cppcheck | https://github.com/CppQA/cppcheck/releases | 2.21.0 的 Windows x64 zip(`cppcheck-2.21.0-windows-x64.zip` 形式),解压入 PATH |
| STM32CubeProgrammer | https://www.st.com/en/development-tools/stm32cubeprog.html | 含 ST-Link USB 驱动 |
| ST-Link V2 驱动 | https://www.st.com/en/development-tools/stm321025.html | `ST-LinkV2-USB-Driver` 包 |
@@ -458,7 +454,7 @@ Test-Path $env:DTU_STLINK_CLI # True
|---|---|---|---|
| ① | `& <任一 python> -m venv .venv` + `& '.venv\Scripts\python.exe' -m pip install -r requirements.txt` | 安装完成且含 pre-commit | pip 报 GBK 解码错 = `requirements.txt` 被污染(该文件必须纯 ASCII,不该发生) |
| ② | `& '.venv\Scripts\python.exe' .dsh\skills\keil-build\scripts\keil_build.py` | `BUILD_OK: 0 errors, 0 warnings`,exit 0 | 报错行**直接指出变量名**(如 `BUILD_ENV_ERROR: $DTU_KEIL_UV4 is set but not a file: ...`)——照报错修值;新机器首次启动 UV4 需 license(90 天评估),缺 Device Pack 则下载失败(构建不受影响) |
| ③ | `& '.venv\Scripts\python.exe' scripts/ci_local.py` | 静态门禁全钩子 Passed + 主机侧纯逻辑单测断言全部通过(当前 278 条),exit 0 | "找不到 MSVC" = VS 未装或装到非标准位置(设 `DTU_MSVC_CL` 可验证覆盖通道) |
| ③ | `& '.venv\Scripts\python.exe' scripts/ci_local.py` | 静态门禁全钩子 Passed + 主机侧纯逻辑单测断言全部通过(48 个 runner / 4341 条断言),exit 0 | "找不到 MSVC" = VS 未装或装到非标准位置(设 `DTU_MSVC_CL` 可验证覆盖通道) |
| ④ | `& 'tools\refgraph\gen_refgraph.bat'` → `git status` | 重生成后 `docs/images/` **无 diff**(图内容只依赖源码,与本机工具链无关) | 出现 diff = 异常,需查 |
| ⑤ | `& "simulator\build_sim.bat"` | 自动探测 VS → 生成器匹配 → 构建成功(2026-10-02 起模拟器构建可用:配置引擎重构的文件迁移已同步进 `simulator/CMakeLists.txt`) | 报 `Cannot find source file` / `C1083` = CMakeLists 与源码目录再次失步(查文件迁移记录),与 `DTU_*` 变量无关;"未探测到 VS" 见 §2.3 |
| ⑥ | (有 ST-LINK 硬件才执行)`& '.venv\Scripts\python.exe' .dsh\skills\stlink-flash\scripts\stlink_flash.py list` | 列出探针 SN | 只跑 `list`,**不烧录不复位**;无硬件跳过不扣分 |
@@ -508,13 +504,13 @@ $env:DTU_KEIL_UV4 = 'D:\NotExist\UV4.exe' # 仅当前会话,不动用户级
### 3.3 资源预算(部署红线)
实测(**2026-10-22 `/keil-build` 快照**)。实时权威值恒以 `docs/内存管理/RAM预算台账.md` 与
实测(**2026-11-15 `/keil-build` 快照**,趋势见 `scripts/ram_baseline.tsv`)。实时权威值恒以 `docs/内存管理/RAM预算台账.md` 与
`docs/内存管理/RAM使用分析与优化方案.md` §2.1 受管快照为准,本节只是部署视角的摘要:
| 资源 | 已用 | 总量 | 利用率 | 余量 | 红线说明 |
|---|---|---|---|---|---|
| Flash(`ER_IROM1` = Code + RO) | 232,536 B(227.09 KB) | 1 MB | 22.2% | ≈804 KB | **充裕**:产品需求无 OTA / 双镜像预算,Flash 不是卡点;死代码裁剪簇已收口 → `docs/内存管理/RAM使用分析与优化方案.md` §2.6.4 |
| 主 SRAM1(静态区;FreeRTOS 堆已迁 CCM) | 75,264 B(73.5 KB) | 128 KB | 57.4% | 55,808 B | 已不紧张——2026-10-11 堆迁 CCM 与 2026-10-15 `LV_MEM_SIZE` 40→16 KB 两步的结果 |
| Flash(`ER_IROM1` = Code + RO) | 288,628 B(Code 256,592 + RO 32,036) | 1 MB | 27.5% | 759,948 B | **充裕**:产品需求无 OTA / 双镜像预算,Flash 不是卡点;死代码裁剪簇已收口 → `docs/内存管理/RAM使用分析与优化方案.md` §2.6.4 |
| 主 SRAM1(静态区;FreeRTOS 堆已迁 CCM) | 97,248 B(95.0 KB) | 128 KB | **74.2%** | 33,824 B | 2026-10-11 堆迁 CCM 与 2026-10-15 `LV_MEM_SIZE` 40→16 KB 换来的余量,随后录波/UI 推流增长又吃掉一大截 |
| CCM(`RW_CCM` 段) | 57,376 B(56.0 KB) | 65,280 B | **87.9%** | **7,904 B** | **当前真正的红线**:加任务 / 抬栈 / 加堆会先在这里撞墙;`mem-budget` 钩子在 92% 拦提交 |
- LVGL 内存池 16 KB(静态占用,2026-10-15 由 40 KB 收缩);FreeRTOS 堆 56 KB(CCM)
@@ -528,8 +524,8 @@ $env:DTU_KEIL_UV4 = 'D:\NotExist\UV4.exe' # 仅当前会话,不动用户级
> 挖潜方向:**SRAM3 64 KB 仍未映射**;CCM 64 KB **已启用**(2026-10-11 起承载 FreeRTOS 堆,见上表
> `RW_CCM` 行),配额与台账 → `docs/内存管理/RAM预算台账.md`。
> 部署侧含义:**新增需要额外 RAM 的固件定制前必须先过内存预算**——余量集中在 SRAM1,CCM 只剩
> 7,904 B,加任务 / 抬栈 / 加堆会先在 CCM 撞墙。
> 部署侧含义:**新增需要额外 RAM 的固件定制前必须先过内存预算**——CCM 只剩 7,904 B,加任务 /
> 抬栈 / 加堆会先在 CCM 撞墙;SRAM1 也只剩 33,824 B(74.2%),两块都不宽裕。
### 3.4 下载与调试
@@ -569,7 +565,7 @@ $env:DTU_KEIL_UV4 = 'D:\NotExist\UV4.exe' # 仅当前会话,不动用户级
|---|---|---|---|
| 远程显示(RemoDispBus) | TCP **7003** | 远端看图(160×160 1bpp,3200 B/帧,客户端 LCDMEM 拉取)+ 远端导航按键 | DTU-RemoteLCD 或任意 TCP 客户端连 7003 收帧 |
| 墙钟对时(SNTP 客户端) | UDP **123**(出向;主/备服务器配 `[sntp]` 段,enable 默认关) | 设备作 SNTP 客户端从时间源取时写回 RTC(原 PC 推送 TCP :8888 已于 2026-11-04 退役删除) | 使能对时后核对设备时间 / 日志时间戳 |
| FTP | TCP **21** | 文件上传/下载(根目录 `/`,NAND 存储) | 任意 FTP 客户端列目录/读写 |
| FTP | TCP **21** | 文件上传/下载(根目录 `/`,NAND 存储) | **MobaXterm** 列目录/读写(其他客户端实测不可用,见 §5) |
> 现场组网要求:设备与客户端**同网段**(默认 .100/24、网关 .1);跨网段部署先按 §4.1 改 IP 再上线。
@@ -586,7 +582,7 @@ $env:DTU_KEIL_UV4 = 'D:\NotExist\UV4.exe' # 仅当前会话,不动用户级
| 1 | 上电自启动 | 断电上电 + 串口采集 | `/serial-boot-test` PASS:Required `App init OK;Network Init;net init: OK;PHY: 100M FULL`,无 `FAIL/ERROR/HardFault` |
| 2 | 网络连通 | PC ping 192.168.31.100 | 通(PHY 100M FULL) |
| 3 | 远程显示 | DTU-RemoteLCD 连 7003 | 出图(160×160 1bpp)+ 远端菜单导航可用 |
| 4 | FTP | FTP 客户端连 :21 | 列目录 / 读写 `/` 下文件 |
| 4 | FTP | **MobaXterm** 连 :21 | 列目录 / 读写 `/` 下文件 |
| 5 | UI 功能 | 屏幕 / 远端操作 | 菜单 7 项导航、内容页、密码(查看 `000` / 修改 `123`)、网口设置保存后立即生效 |
| 6 | 对时 | 配 `[sntp]` 段启用 SNTP(或 UI 手工对时;原 PC 推送 8888 已退役) | 设备墙钟更新、日志时间戳正确 |
| 7 | 掉电保持 | 写文件 / 改网口配置 → 重启 | 数据仍在(`/config.ini` 按新值生效) |
@@ -601,7 +597,7 @@ $env:DTU_KEIL_UV4 = 'D:\NotExist\UV4.exe' # 仅当前会话,不动用户级
| 操作系统 | 任意(Windows / Linux / macOS,有浏览器或 Python 即可) | 与设备同网段 |
| 远程显示客户端 | **DTU-RemoteLCD**(独立项目:Flask + WebSocket 参考实现)或任意符合 RemoDispBus 协议的 TCP 客户端 | 连设备 **TCP 7003**;协议见 `docs/UI设计/RemoDispBus协议与接收设计说明.md` |
| 对时时间源 | 现场可达的 SNTP/NTP 服务器(配 `[sntp]` 段 server1/server2) | 设备作客户端 UDP/123 出向取时;原「向设备 8888 推送」的 TCP 工具随退役不再需要 |
| FTP 客户端 | 任意(资源管理器 / FileZilla 等) | 设备端 lftpd,端口 21 |
| FTP 客户端 | **MobaXterm** | 设备端 lftpd,端口 21。其他客户端实测不可用:设备侧 `FF_USE_LFN=0` 仅支持 8.3 短名,且控制通道按字节间隔判超时 |
| 浏览器 | Chrome / Edge | 查看参考客户端 Web 页;开发期浏览文档 SVG 图 |
> 客户端侧**无强制版本依赖**——协议是纯 TCP 字节流(`[TAG][CMD][LEN][DATA][CRC]` 帧),
+1
View File
@@ -22,3 +22,4 @@ date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi
2026-11-10 255160 31204 2080 152152 286364 27.3 96808 73.9 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5296;sb_link.o=4376;ch395f.o=4162;console_log.o=4132
2026-11-11 256024 31760 2080 152368 287784 27.4 97024 74.0 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132
2026-11-13 256592 32036 2088 152584 288628 27.5 97248 74.2 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132
2026-11-15 256592 32036 2088 152584 288628 27.5 97248 74.2 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132
1 date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi
22 2026-11-10 255160 31204 2080 152152 286364 27.3 96808 73.9 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5296;sb_link.o=4376;ch395f.o=4162;console_log.o=4132
23 2026-11-11 256024 31760 2080 152368 287784 27.4 97024 74.0 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132
24 2026-11-13 256592 32036 2088 152584 288628 27.5 97248 74.2 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132
25 2026-11-15 256592 32036 2088 152584 288628 27.5 97248 74.2 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132
+4 -4
View File
@@ -1,15 +1,15 @@
{
"built_at": "2026-11-13T16:24:41+08:00",
"fingerprint": "bb41550b69ceb55ea8934919f892116874c980ee7122942733b4f13559d84ebe",
"built_at": "2026-11-15T20:07:18+08:00",
"fingerprint": "932f8d500f346096274c559a6984dcbcc84152a9c17417757e6899829adcaeac",
"fingerprint_files": 1479,
"fingerprint_source": "git-index",
"gated_regions": [
"RW_IRAM1",
"RW_CCM"
],
"git_head": "72779cab007093dd993a45f60c9eec2ccca86134",
"git_head": "16cc0643857d29fad3f10d9d6ec757fe79957fd6",
"map": "MDK-ARM/STM32F407-Demo/STM32F407-Demo.map",
"map_mtime": 1794558267,
"map_mtime": 1794621839,
"pct": {
"ER_IROM1": 27.53,
"RW_CCM": 87.89,