Files
STM32F4-Base/docs/内存管理/data/ram_report_20261022.md
T
wandering1 4c21cff753 fix(lftpd): 对端行为不再打 [ERR]——新增 lftpd_peer 级别并划清级别边界
现象:抓自检台账基线那次 FTP 会话一结束,设备就打 `[ERR] [FTP] error reading next command`,
本次 `@test` 直接 FAIL(Forbidden 含 `[ERR]`)。查下去发现 lftpd 把**全部**异常路径一律按
error 级打,其中九处其实由外部输入决定:客户端关窗口、连上就走、PASV 后不建数据连接、
运维改 IP 触发监听重建。两条代价:① 任何人"连 21 端口一下就断开"就能把一次启动测试打成
FAIL;② 同样的动作可以**无限制造固件级 ERROR 日志**——日志面与门禁面都可被外部驱动,
工业现场过不了审。

**做法**:`private/lftpd_log.h` 新增 `lftpd_log_peer()`(info 级,带 `[FTP]` 前缀),而不是
就地改成 `DBG_INFO`——让"谁才算真故障"在读代码时一目了然,也防止后来者顺手把对端行为升回
error。降级的九处:控制通道被对端关闭(原 `error reading next command`,改为
`control channel closed by peer (ret=%d)`,措辞原先把正常收尾写成故障、误导过排查方向)、
发送 220 前对端已走、`listener rebuilt`(网络重建,原因由 accept 层自己记)、四处
`data accept failed`(PASV 后没来数据连接)、`accept timeout`。

**刻意留在 error 的**:create/bind/listen/取端口失败、写通道失败、文件打开失败、
`DOWNLOAD/UPLOAD FAILED`(对端中途退出确实让一次传输没走完 = 数据完整性事件,
`../问题记录/CH395F_Trap_Records.md` 的中止家族要靠这些锚点定位)、
`data listener disarmed`(控制连接还活着而我方数据监听已不在服役 = 本侧异常,就地注明)。

**实测划清的边界**:客户端**干净收尾**(发 `QUIT` 或 FIN 半关)现在整条链路没有任何 `[ERR]`;
但 **RST 硬拆**(`SO_LINGER` 清零 / 进程被杀 / 拔线)仍会留一条 `[ERR][NET] sockN TIMEOUT`——
那是 net 层的套接字超时锚点,网络自愈架构判据要读它,不在本次降级范围。所以"采集窗口内别跑
`data listener disarmed`(控制连接还活着而我方数据监听已不在服役 = 本侧异常,就地注明)。

**真机验证**:`@build` 0 错 0 警告;`@test --require-selftest-pass --device-ip` →
  **PASS**
(基线 29 条 → 本次无新增;`net init: OK` 726 ms);专门写了 RST 复现脚本(登录后 `SO_LINGER`
清零直接关)→ 串口得到 `[FTP] control channel closed by peer (ret=-1)`,**不再是 `[ERR]` 行**;
同一份日志里 QUIT 收尾的那次会话完全没有错误行。

体量:`Code` 213,236 → **213,264 B(+28)**、`RO` 18,580 → **18,652 B(+72)**(措辞变长),
同一份日志里 QUIT 收尾的那次会话完全没有错误行。
`ZI` 131,500、`RW_IRAM1` 75,264 B 57.4% / `RW_CCM` 57,376 B 87.9% 全不变)。数字联动照做:
两份 `data/` 快照、`ram_baseline --update/--write`、`check_mem_numbers --write`、FLASH
  配图
常量重算重生成(桶合计 = 231,916 与 `Code+RO` 相符;越界复查 0)、报告 §1.3/§5.1/§5.4 与
部署文档 §3.3 同步。

口径落文:新增 `docs/架构设计/STM32F4-Base存储架构说明.md` §10.3「FTP 日志级别划分:对端行为
vs 固件故障」(含两类的判据表与边界),并更新 `docs/测试说明/自动化测试流程.md` 的采集窗口警示。
顺手把 `private/lftpd_log.h` 工作区的 CRLF 混用归一回 LF(仓库里 blob 本来就是 LF,diff 无影响)。

门禁:`doc-links --all --sections-strict` 146 文档 0 问题、`id-check --strict` 增量拦截通过
(可判定 82.82%)、`mem-numbers` / `mem-budget` / `layer-deps` 全绿;改动文件字节卫生 BOM 无 /
CR 0 / U+FFFD 0 / 无行尾空格。未推送。
2026-10-22 22:31:09 +08:00

12 KiB
Raw Blame History

STM32F4-Base RAM/Flash Usage Report

Generated: 2026-10-22 22:26 Map: STM32F407-Demo.map

1. Grand Totals (全局总量)

Metric Value
Code (inc. data) 213,264 B (208.3 KB)
RO Data 18,652 B (18.2 KB)
RW Data (initialized) 1,188 B (1.16 KB)
ZI Data (zero-init) 131,500 B (128.4 KB)
Total RO (Code + RO) 231,916 B (226.5 KB)
Total RW (RW + ZI) = SRAM used 132,688 B (129.58 KB)
Total ROM (Code + RO + RW init) 233,104 B (227.6 KB)

2. 执行区水位 (Execution Regions)

Region Base Size Max Util%
ER_IROM1 0x08000000 231,916 B (226.48 KB) 1,048,576 B (1024 KB) 22.1%
RW_CCM 0x10000000 57,376 B (56.03 KB) 65,280 B (64 KB) 87.9%
UNINIT_CCM 0x1000FF00 48 B (0.05 KB) 256 B (0 KB) 18.8%
RW_IRAM1 0x20000000 75,264 B (73.50 KB) 131,072 B (128 KB) 57.4%

3. RW_IRAM1 逐符号明细(ZI + RW,按大小降序)

# Address Size (B) Size (KB) Type Section Object
1 0x2000ADC8 16,384 16.00 Zero .bss lv_mem_core_builtin.o
2 0x20007EB4 7,724 7.54 Zero .bss lftpd.o
3 0x200107A4 6,746 6.59 Zero .bss ui_net_sink.o
4 0x2000EDC8 6,408 6.26 Zero .bss ui_port.o
5 0x2000667C 6,200 6.05 Zero .bss nand_ftl.o
6 0x20004E18 4,152 4.05 Zero .bss ch395f.o
7 0x20002058 4,096 4.00 Zero .bss console_log.o
8 0x20001278 3,552 3.47 Zero .bss sys_log_mcu.o
9 0x20003644 2,724 2.66 Zero .bss default_task.o
10 0x2000A524 1,720 1.68 Zero .bss cmsis_os2.o
11 0x2000444C 1,440 1.41 Zero .bss sample_ring.o
12 0x20009F48 1,220 1.19 Zero .bss tasks.o
13 0x20000D78 1,104 1.08 Zero .bss cfg_file_store_mcu.o
14 0x20003058 1,064 1.04 Zero .bss soe_store.o
15 0x20012200 1,024 1.00 Zero startup_stm32f407xx.o
16 0x20005E50 800 0.78 Zero .bss gd5f2gq5ue.o
17 0x200040E8 712 0.70 Zero .bss iec104_serv.o
18 0x20000AB8 704 0.69 Zero .bss cfg_file.o
19 0x200005D0 560 0.55 Zero .bss spi.o
20 0x20000848 552 0.54 Zero .bss usart.o
21 0x20009CE0 552 0.54 Zero .bss lftpd_io.o
22 0x2000ABDC 492 0.48 Zero .bss lv_init.o
23 0x20004C38 480 0.47 Zero .bss freq.o
24 0x2000629C 416 0.41 Zero .bss net_socket.o
25 0x200064DC 416 0.41 Zero .bss net_pending.o
26 0x200034C4 384 0.38 Zero .bss task_prof.o
27 0x20004A8C 320 0.31 Zero .bss prot_set.o
28 0x2000A40C 280 0.27 Zero .bss timers.o
29 0x20006190 268 0.26 Zero .bss rs485.o
30 0x200011C8 176 0.17 Zero .bss prot_set_store.o
31 0x200004C8 168 0.16 Zero .bss adc.o
32 0x200002B4 160 0.16 Data .data lftpd.o
33 0x200049EC 160 0.16 Zero .bss phasor.o
34 0x200106D0 152 0.15 Zero .bss ui_menu_view.o
35 0x2000643C 128 0.12 Zero .bss net_listener.o
36 0x20004BCC 108 0.11 Zero .bss prot_elm.o
37 0x20000570 84 0.08 Zero .bss i2c.o
38 0x200043F8 84 0.08 Zero .bss adc_input.o
39 0x20000250 83 0.08 Data .data ftp_cfg.o
40 0x20000800 72 0.07 Zero .bss tim.o
41 0x20000A70 72 0.07 Zero .bss stm32f4xx_hal_timebase_tim.o
42 0x20003480 68 0.07 Zero .bss task_watchdog.o
43 0x20000484 65 0.06 Zero .bss freertos.o
44 0x20009F08 64 0.06 Zero .bss queue.o
45 0x20000358 60 0.06 Data .data tasks.o
46 0x20000410 60 0.06 Data .data ui_page_selftest.o
47 0x20010768 60 0.06 Zero .bss ui_page_runlog.o
48 0x20000150 48 0.05 Data .data adc_health.o
49 0x200043C8 48 0.05 Zero .bss iec104_pts.o
50 0x20000000 44 0.04 Data .data freertos.o
51 0x2000009C 44 0.04 Data .data task_watchdog.o
52 0x20000044 36 0.04 Data .data sys_log_mcu.o
53 0x2000022C 36 0.04 Data .data net_cfg.o
54 0x2000044C 32 0.03 Data .data ui_standby.o
55 0x20006170 32 0.03 Zero .bss tpafe5160.o
56 0x200064BC 32 0.03 Zero .bss net_events.o
57 0x20000128 28 0.03 Data .data adc_input.o
58 0x20000068 24 0.02 Data .data console_log.o
59 0x200000E4 24 0.02 Data .data adc_task.o
60 0x20000180 24 0.02 Data .data prot_set.o
61 0x2000019C 24 0.02 Data .data freq.o
62 0x20000200 24 0.02 Data .data net_listener.o
63 0x200043B0 24 0.02 Zero .bss protect_task.o
64 0x20000030 20 0.02 Data .data cfg_file.o
65 0x20000080 20 0.02 Data .data soe_store.o
66 0x200001D0 20 0.02 Data .data gd5f2gq5ue.o
67 0x20000394 20 0.02 Data .data timers.o
68 0x2000046C 20 0.02 Data .data ui_net_sink.o
69 0x200003D4 18 0.02 Data .data ui_menu.o
70 0x200000FC 16 0.02 Data .data iec104_serv.o
71 0x20000118 16 0.02 Data .data iec104_pts.o
72 0x200001F0 16 0.02 Data .data net_socket.o
73 0x20000218 16 0.02 Data .data net_events.o
74 0x200002A4 16 0.02 Data .data nand_ftl.o
75 0x200003F0 16 0.02 Data .data ui_content_page.o
76 0x200000D4 12 0.01 Data .data default_task.o
77 0x200001B4 12 0.01 Data .data stm32f4xx_hal.o
78 0x200001E4 12 0.01 Data .data tpafe5160.o
79 0x200003AC 12 0.01 Data .data port.o
80 0x200003C8 12 0.01 Data .data ui_port.o
81 0x20000400 12 0.01 Data .data ui_page_password.o
82 0x200005C4 12 0.01 Zero .bss iwdg.o
83 0x200001C4 10 0.01 Data .data ch395f.o
84 0x20000094 8 0.01 Data .data sys_clock.o
85 0x200000C8 8 0.01 Data .data task_prof.o
86 0x2000010C 8 0.01 Data .data protect_task.o
87 0x20000144 8 0.01 Data .data sample_ring.o
88 0x200003B8 8 0.01 Data .data ff.o
89 0x200003C0 8 0.01 Data .data ffsystem.o
90 0x200003E8 8 0.01 Data .data ui_menu_view.o
91 0x2000002C 4 0.00 Data .data app_main.o
92 0x200000D0 4 0.00 Data .data vol_lock.o
93 0x200000E0 4 0.00 Data .data net_task.o
94 0x200001C0 4 0.00 Data .data system_stm32f4xx.o
95 0x20000228 4 0.00 Data .data net_pending.o
96 0x20000354 4 0.00 Data .data lftpd_io.o
97 0x200003A8 4 0.00 Data .data cmsis_os2.o
98 0x20000480 4 0.00 Data .data mc_w.l(errno.o)
99 0x2000014C 2 0.00 Data .data phasor.o
100 0x2000040C 2 0.00 Data .data ui_page_net_cfg.o
101 0x20000198 1 0.00 Data .data prot_elm.o
75,243 73.48 Total

4. Image Component Sizes(RW + ZI > 0,按大小降序)

# Object Code RO RW ZI RW+ZI
1 heap_4.o 512 69 32 57,344 57,376
2 lv_mem_core_builtin.o 410 0 0 16,384 16,384
3 lftpd.o 6,180 509 160 7,724 7,884
4 ui_net_sink.o 1,126 67 20 6,746 6,766
5 ui_port.o 418 0 12 6,408 6,420
6 nand_ftl.o 2,352 175 16 6,200 6,216
7 ch395f.o 3,978 603 10 4,152 4,162
8 console_log.o 980 55 24 4,096 4,120
9 sys_log_mcu.o 3,074 83 36 3,552 3,588
10 default_task.o 2,332 280 12 2,724 2,736
11 cmsis_os2.o 1,496 0 4 1,720 1,724
12 sample_ring.o 292 0 8 1,440 1,448
13 tasks.o 4,342 0 60 1,220 1,280
14 cfg_file_store_mcu.o 380 24 0 1,104 1,104
15 soe_store.o 816 28 20 1,064 1,084
16 startup_stm32f407xx.o 36 392 0 1,024 1,024
17 gd5f2gq5ue.o 3,954 478 20 800 820
18 iec104_serv.o 1,188 16 16 712 728
19 cfg_file.o 5,970 810 20 704 724
20 spi.o 584 0 0 560 560
21 lftpd_io.o 1,198 0 4 552 556
22 usart.o 884 0 0 552 552
23 freq.o 764 8 24 480 504
24 lv_init.o 156 0 0 492 492
25 net_socket.o 4,944 443 16 416 432
26 net_pending.o 1,400 0 4 416 420
27 task_prof.o 638 185 8 384 392
28 prot_set.o 844 640 24 320 344
29 timers.o 1,232 0 20 280 300
30 rs485.o 120 0 0 268 268
31 prot_set_store.o 236 74 0 176 176
32 adc.o 580 0 0 168 168
33 phasor.o 420 258 2 160 162
34 task_watchdog.o 1,110 137 44 116 160
35 ui_menu_view.o 2,034 16 8 152 160
36 net_listener.o 948 207 24 128 152
37 adc_input.o 592 27 28 84 112
38 freertos.o 716 592 44 65 109
39 prot_elm.o 708 227 1 108 109
40 i2c.o 168 0 0 84 84
41 ftp_cfg.o 152 225 83 0 83
42 stm32f4xx_hal_timebase_tim.o 152 0 0 72 72
43 tim.o 168 0 0 72 72
44 iec104_pts.o 1,082 132 16 48 64
45 queue.o 2,840 0 0 64 64
46 ui_page_runlog.o 28 105 0 60 60
47 ui_page_selftest.o 28 109 60 0 60
48 adc_health.o 432 0 48 0 48
49 net_events.o 1,994 809 16 32 48
50 tpafe5160.o 808 67 12 32 44
51 net_cfg.o 832 103 36 0 36
52 protect_task.o 840 68 8 24 32
53 ui_standby.o 1,208 67 32 0 32
54 adc_task.o 1,520 234 24 0 24
55 (incl. Padding) 284 96 16 5 21
56 ui_menu.o 760 137 18 0 18
57 ui_content_page.o 1,664 81 16 0 16
58 iwdg.o 28 0 0 12 12
59 port.o 762 73 12 0 12
60 stm32f4xx_hal.o 116 0 12 0 12
61 ui_page_password.o 686 175 12 0 12
62 ff.o 7,962 282 8 0 8
63 ffsystem.o 204 20 8 0 8
64 sys_clock.o 1,788 286 8 0 8
65 app_main.o 2,272 65 4 0 4
66 net_task.o 1,460 72 4 0 4
67 system_stm32f4xx.o 16 24 4 0 4
68 vol_lock.o 92 0 4 0 4
69 errno.o 20 0 4 0 4
70 ui_page_net_cfg.o 1,004 105 2 0 2
All .o files 213,264 18,652 1,188 131,500 132,688

5. Flash (Code + RO Data) Top-30(按大小降序)

# Object Code RO Data Code+RO
1 ff.o 7,962 282 8,244
2 cfg_file.o 5,970 810 6,780
3 lftpd.o 6,180 509 6,689
4 net_socket.o 4,944 443 5,387
5 lv_indev.o 4,928 0 4,928
6 ch395f.o 3,978 603 4,581
7 ui_font_cn_12.o 0 4,545 4,545
8 lv_obj_pos.o 4,526 16 4,542
9 lv_refr.o 4,486 0 4,486
10 gd5f2gq5ue.o 3,954 478 4,432
11 tasks.o 4,342 0 4,342
12 lv_obj_scroll.o 4,126 0 4,126
13 lv_obj_style.o 4,106 0 4,106
14 lv_draw_sw_mask.o 3,862 0 3,862
15 stm32f4xx_hal_spi.o 3,586 0 3,586
16 lv_draw_sw_box_shadow.o 3,246 0 3,246
17 sys_log_mcu.o 3,074 83 3,157
18 lv_indev_scroll.o 3,068 0 3,068
19 lv_obj.o 2,982 43 3,025
20 lv_draw_sw_img.o 2,960 0 2,960
21 queue.o 2,840 0 2,840
22 journal.o 2,834 0 2,834
23 iec104_link.o 2,824 0 2,824
24 net_events.o 1,994 809 2,803
25 default_task.o 2,332 280 2,612
26 nand_ftl.o 2,352 175 2,527
27 app_main.o 2,272 65 2,337
28 printfa.o 2,312 0 2,312
29 stm32f4xx_hal_i2c.o 2,294 0 2,294
30 lv_display.o 2,284 0 2,284
All .o files 213,264 18,652 231,916

自洽校验:per-file 213,264/18,652/1,188/131,500 vs Grand Totals 213,264/18,652/1,188/131,500(CodeΔ=+0 / ROΔ=+0 / RWΔ=+0 / ZIΔ=+0;精确一致(含 '('incl. Generated)'-'(incl. Padding)' 台账行))→ PASS