From 22559365b90f20dcc827e76477c0b1a083075840 Mon Sep 17 00:00:00 2001
From: Wanderingss <1624155937@qq.com>
Date: Sat, 26 Sep 2026 12:51:07 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=20App=20=E4=B8=8E=20test=20?=
=?UTF-8?q?=E7=9B=AE=E5=BD=95=EF=BC=9A=E6=8C=89=E8=81=8C=E8=B4=A3=E5=88=86?=
=?UTF-8?q?=E5=AD=90=E7=9B=AE=E5=BD=95=E5=B9=B6=E5=90=8C=E6=AD=A5=E5=85=A8?=
=?UTF-8?q?=E5=BA=93=E5=BC=95=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.opencode/command/test.md | 4 +-
.opencode/skills/new-source-file/SKILL.md | 2 +-
AGENTS.md | 10 +-
App/README.md | 33 +-
App/app/README.md | 32 +
App/{ => app}/app_cfg.h | 0
App/{ => app}/app_main.c | 0
App/{ => app}/app_main.h | 0
App/{ => app}/sys_events.h | 0
App/cfg/README.md | 28 +
App/{ => cfg}/cfg_file.c | 0
App/{ => cfg}/cfg_file.h | 0
App/{ => cfg}/cfg_file_store.h | 0
App/{ => cfg}/cfg_file_store_mcu.c | 0
App/sync/README.md | 29 +
App/{ => sync}/time_sync.c | 0
App/{ => sync}/time_sync.h | 0
App/task/README.md | 4 +-
Drivers/BSP/NETCFG/README.md | 2 +-
Drivers/BSP/SD2506/README.md | 2 +-
MDK-ARM/STM32F407-Demo.uvprojx | 24 +-
README.md | 58 +-
Src/freertos.c | 6 +-
docs/UI设计/UI_界面制作流程.md | 2 +-
docs/images/引用关系图.dot | 310 +-
docs/images/引用关系图.json | 639 +--
docs/images/引用关系图.svg | 3516 ++++++++---------
docs/内存管理/RAM使用分析与优化方案.md | 6 +-
docs/内存管理/内存内容分配策略.md | 6 +-
docs/子系统设计/系统墙钟时间维护说明.md | 16 +-
docs/子系统设计/网络配置说明.md | 10 +-
docs/子系统设计/运行与自检记录设计说明.md | 2 +-
docs/子系统设计/配置文件设计说明.md | 12 +-
docs/审查记录/项目审查与优化建议报告.md | 16 +-
docs/审查记录/项目审计改进清单.md | 20 +-
docs/文档规范.md | 2 +-
docs/架构设计/STM32F4-Base存储架构说明.md | 2 +-
docs/架构设计/项目启动顺序管理.md | 8 +-
docs/架构设计/项目架构总览.md | 22 +-
docs/测试说明/CH395F_Test_Guide.md | 24 +-
docs/测试说明/FTP_Test_Guide.md | 14 +-
docs/测试说明/GD5F2GQ5UE_Test_Guide.md | 12 +-
docs/测试说明/SD2506_Test_Guide.md | 6 +-
docs/测试说明/m2_data/README.md | 2 +-
docs/测试说明/串口助手使用指南.md | 2 +-
docs/测试说明/存储维护与容量恢复.md | 6 +-
docs/测试说明/测试开发标准流程.md | 16 +-
docs/测试说明/测试文档模板规范.md | 2 +-
docs/测试说明/自动化测试流程.md | 18 +-
docs/测试说明/链路延迟测试说明.md | 20 +-
docs/环境与部署/项目部署环境要求.md | 8 +-
docs/硬件平台/V0.0_网表详细分析报告.md | 2 +-
docs/硬件平台/V0.1_网表详细分析报告.md | 2 +-
docs/问题记录/CH395F_Trap_Records.md | 10 +-
.../Net层阻塞模型业界对照与演进方案.md | 8 +-
docs/问题记录/错误码传播审计.md | 8 +-
scripts/gen_task_table.py | 2 +-
simulator/README.md | 2 +-
simulator/sim/sim_latency_stub.c | 2 +-
test/README.md | 42 +-
test/board/README.md | 40 +
test/{ => board}/ch395f_test.h | 0
test/{ => board}/ch395f_test_task.c | 0
test/{ => board}/ch395f_test_task.h | 0
test/{ => board}/gd5f_test.h | 0
test/{ => board}/gd5f_test_task.c | 0
test/{ => board}/net_latency_test.c | 0
test/{ => board}/net_latency_test.h | 0
test/{ => board}/net_test_task.c | 0
test/{ => board}/net_test_task.h | 0
test/{ => board}/sd2506_test.h | 0
test/{ => board}/sd2506_test_task.c | 0
test/{ => board}/storage_test.h | 0
test/{ => board}/storage_test_task.c | 0
test/{ => board}/test_config.c | 0
test/{ => board}/test_config.h | 0
test/host/README.md | 52 +
test/{ => host}/ch395f_socket_test.py | 0
test/{ => host}/e02_probe.py | 0
test/{ => host}/ftp_capture.py | 0
test/{ => host}/ftp_regression.py | 2 +-
test/{ => host}/ftp_speed_test.py | 0
test/{ => host}/ftp_test.py | 0
test/{ => host}/ftp_up_dl_test.py | 0
test/{ => host}/latency_peer.py | 2 +-
test/{ => host}/run_boot_test.py | 2 +-
test/{ => host}/time_sync_server.py | 2 +-
test/{ => host}/verify_log.py | 4 +-
test/test.txt | 0
tools/arch_diagram/gen_cfg_arch_svg.py | 2 +-
90 files changed, 2650 insertions(+), 2487 deletions(-)
create mode 100644 App/app/README.md
rename App/{ => app}/app_cfg.h (100%)
rename App/{ => app}/app_main.c (100%)
rename App/{ => app}/app_main.h (100%)
rename App/{ => app}/sys_events.h (100%)
create mode 100644 App/cfg/README.md
rename App/{ => cfg}/cfg_file.c (100%)
rename App/{ => cfg}/cfg_file.h (100%)
rename App/{ => cfg}/cfg_file_store.h (100%)
rename App/{ => cfg}/cfg_file_store_mcu.c (100%)
create mode 100644 App/sync/README.md
rename App/{ => sync}/time_sync.c (100%)
rename App/{ => sync}/time_sync.h (100%)
create mode 100644 test/board/README.md
rename test/{ => board}/ch395f_test.h (100%)
rename test/{ => board}/ch395f_test_task.c (100%)
rename test/{ => board}/ch395f_test_task.h (100%)
rename test/{ => board}/gd5f_test.h (100%)
rename test/{ => board}/gd5f_test_task.c (100%)
rename test/{ => board}/net_latency_test.c (100%)
rename test/{ => board}/net_latency_test.h (100%)
rename test/{ => board}/net_test_task.c (100%)
rename test/{ => board}/net_test_task.h (100%)
rename test/{ => board}/sd2506_test.h (100%)
rename test/{ => board}/sd2506_test_task.c (100%)
rename test/{ => board}/storage_test.h (100%)
rename test/{ => board}/storage_test_task.c (100%)
rename test/{ => board}/test_config.c (100%)
rename test/{ => board}/test_config.h (100%)
create mode 100644 test/host/README.md
rename test/{ => host}/ch395f_socket_test.py (100%)
rename test/{ => host}/e02_probe.py (100%)
rename test/{ => host}/ftp_capture.py (100%)
rename test/{ => host}/ftp_regression.py (97%)
rename test/{ => host}/ftp_speed_test.py (100%)
rename test/{ => host}/ftp_test.py (100%)
rename test/{ => host}/ftp_up_dl_test.py (100%)
rename test/{ => host}/latency_peer.py (99%)
rename test/{ => host}/run_boot_test.py (99%)
rename test/{ => host}/time_sync_server.py (97%)
rename test/{ => host}/verify_log.py (97%)
delete mode 100644 test/test.txt
diff --git a/.opencode/command/test.md b/.opencode/command/test.md
index 4a3cfd55..49ec9b10 100644
--- a/.opencode/command/test.md
+++ b/.opencode/command/test.md
@@ -34,13 +34,13 @@ Interpretation (per AGENTS.md): exit code 0 = PASS (0 errors, 0 warnings). 1/2+
### Step 2 — Flash + capture boot log (one orchestrated call)
-Use `test/run_boot_test.py` (pure-stdlib Python, 2026-09-20 起替代 PowerShell 版) which opens the port + clears the log (arming),
+Use `test/host/run_boot_test.py` (pure-stdlib Python, 2026-09-20 起替代 PowerShell 版) which opens the port + clears the log (arming),
flashes, waits for RX silence, extracts the boot log and verifies — all in one
call. The serial daemon buffers the full stream in `tools/serial_tool/state/serial.log`,
so nothing can be lost between steps:
```powershell
-& '.venv\Scripts\python.exe' test/run_boot_test.py `
+& '.venv\Scripts\python.exe' test/host/run_boot_test.py `
--settle-ms 8000 --max-wait-ms 30000 `
--flash-cmd "MDK-ARM\download.bat" `
--required "App init OK;Network Init;net init: OK" `
diff --git a/.opencode/skills/new-source-file/SKILL.md b/.opencode/skills/new-source-file/SKILL.md
index 3fa316ec..e529b280 100644
--- a/.opencode/skills/new-source-file/SKILL.md
+++ b/.opencode/skills/new-source-file/SKILL.md
@@ -35,5 +35,5 @@ cmake --build simulator/build --config Debug # 0 警告
- **禁止**把源文件复制进 `simulator/`——两端共用 `Drivers/BSP/` 原件(UI_界面制作流程.md C7)
- 只注册 `.c`(含 `.s`);`.h` 靠 include 路径找到,不加工程
- 漏注册的典型症状:一端编译失败(undefined reference)或一端行为悄悄停留在旧逻辑
-- 注册完成后跑回归:UI 文件 → `ui-verify` skill;其他模块 → `@test`(`test/run_boot_test.py`)
+- 注册完成后跑回归:UI 文件 → `ui-verify` skill;其他模块 → `@test`(`test/host/run_boot_test.py`)
- 改过 `CMakeLists.txt` 后需重新 `cmake -B build` 配置
diff --git a/AGENTS.md b/AGENTS.md
index f1c02c25..c7389767 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -7,15 +7,15 @@ STM32F407ZGTx @168MHz(HSE 8MHz → PLL M=4/N=168/P=2);**仅 Keil MDK-ARM v
## 铁律:源码编辑与编码
- 改代码**只用 Edit 工具**(精确子串替换);批量替换用 Edit 的 replaceAll。**绝不用 `Get-Content`/`Set-Content`/`cmd` 重写含中文的文件**——整文件重写会按系统默认编码重解码 → `U+FFFD` 乱码且不可逆
-- **字符串字面量必须纯 ASCII**(2026-09-15 实测):本机 ARMCC 对**无 BOM** 源文件按 CP936 解读,字符串内含**奇数个**汉字时末尾高字节吞掉结束引号 → 编译错(偶数个汉字侥幸通过);中文只写注释(注释不参与解析)。带 BOM 的文件(`Drivers/BSP/UI/*`、`App/task/ui_task.c`、`App/cfg_file.c`、`Lib/lv_conf.h`)经 BOM 按 UTF-8 解码,不受此条限制
+- **字符串字面量必须纯 ASCII**(2026-09-15 实测):本机 ARMCC 对**无 BOM** 源文件按 CP936 解读,字符串内含**奇数个**汉字时末尾高字节吞掉结束引号 → 编译错(偶数个汉字侥幸通过);中文只写注释(注释不参与解析)。带 BOM 的文件(`Drivers/BSP/UI/*`、`App/task/ui_task.c`、`App/cfg/cfg_file.c`、`Lib/lv_conf.h`)经 BOM 按 UTF-8 解码,不受此条限制
- 确需脚本级重写:工程源码为 UTF-8(多数文件无 BOM,UI 系带 BOM),按原样同编码回写、保持 BOM 状态;拿不准就别碰
- 发现乱码:先统计 `EF BF BD` 字节数确认真损坏(勿信终端/Read 渲染);**不要急著 `git checkout`**(会丢弃全部未提交工作)——先用 Edit 只修坏行
-- **Edit 工具会剥掉文件原有的 UTF-8 BOM**(2026-09-18 实测):带 BOM 文件(如 `App/cfg_file.c`)被 Edit 后 BOM 静默消失 → ARMCC 改按 CP936 解码 → 中文字符串字面量报 `#870-D: invalid multibyte character sequence`(**只有重编译该文件才暴露,历史"0 警告"不代表安全**)。改完带中文字面量的文件须核对 BOM 并按原样补回(只在文件头前缀 3 字节 `EF BB BF`,勿整文件重写)
+- **Edit 工具会剥掉文件原有的 UTF-8 BOM**(2026-09-18 实测):带 BOM 文件(如 `App/cfg/cfg_file.c`)被 Edit 后 BOM 静默消失 → ARMCC 改按 CP936 解码 → 中文字符串字面量报 `#870-D: invalid multibyte character sequence`(**只有重编译该文件才暴露,历史"0 警告"不代表安全**)。改完带中文字面量的文件须核对 BOM 并按原样补回(只在文件头前缀 3 字节 `EF BB BF`,勿整文件重写)
## 构建与验证
- `@build` = `& "MDK-ARM\build.bat"`(仓库根目录用**相对路径**);退出码 0 = 0 错误 0 警告,1 = 有警告或错误(查 `MDK-ARM/build_log.txt`);`build.bat` 硬编码本机 Keil 路径 `C:\Keil_v5\UV4\UV4.exe`(换机需改)
-- `@test` / `test/run_boot_test.py` 一键闭环(2026-09-20 起为纯 Python 标准库实现,替代 PowerShell 版;`& '.venv\Scripts\python.exe' test/run_boot_test.py`):开串口+清日志 → 烧录(`MDK-ARM/download.bat`,下载后 Reset&Run)→ wait-idle(等 RX 静默 8s,超时 30s)→ `test/verify_log.py` 标记校验;退出码 0=PASS / 1=FAIL / 2=采集或烧录错误 / 3=用法/预检错误
+- `@test` / `test/host/run_boot_test.py` 一键闭环(2026-09-20 起为纯 Python 标准库实现,替代 PowerShell 版;`& '.venv\Scripts\python.exe' test/host/run_boot_test.py`):开串口+清日志 → 烧录(`MDK-ARM/download.bat`,下载后 Reset&Run)→ wait-idle(等 RX 静默 8s,超时 30s)→ `test/host/verify_log.py` 标记校验;退出码 0=PASS / 1=FAIL / 2=采集或烧录错误 / 3=用法/预检错误
- 默认校验标记:Required `App init OK` / `Network Init` / `net init: OK`;Forbidden `FAIL` / `ERROR` / `HardFault`;按模块定制标记(网络/存储/RTC/ADC/RS485/UI)见 `docs/测试说明/自动化测试流程.md`
- ⚠️ 旧绝对路径 `D:\Code\DTU 程序\...` 出现即失效(仓库已搬迁),一律改用仓库相对路径
- **下载/烧录铁律(2026-09-20 实测)**:走 `& "MDK-ARM\reset.bat" flash [文件]`(= `ST-LINK_CLI -c SWD -P <文件> -Rst -Run`),烧后 `-Rst -Run` **不可省略**——裸 `-P` 会报 `Programming Complete`,但目标核处于死循环/异常状态时写入并不落地(芯片内容不变;这就是 09/19~09/20 "反复重下载、芯片一直是旧镜像、二分法失效" 的根因);`.hex`/`.bin` 均可直烧(1MB ≈ 6.5s,快于 UV4 路径);只重启不烧录用 `reset.bat` 无参(= `-c SWD -Rst -Run`,本机 3 线接线唯一复位手段:nRST 未接、`-HardRst`/`RM=` 不可用)
@@ -65,7 +65,7 @@ STM32F407ZGTx @168MHz(HSE 8MHz → PLL M=4/N=168/P=2);**仅 Keil MDK-ARM v
`Src/main.c`(CubeMX 初始化)→ `app_main_init` → `osKernelStart` → 6 任务(`osKernelStart` 之前全是内核启动前代码:禁调任何 FreeRTOS/CMSIS-RTOS API,见「平台约束」)
- `app_main_init`(时间子系统优先,使后续日志带时间戳):`sd2506_init` → `sys_clock_init`(墙钟;RTC 故障时降级默认时间基准并返回 -1 触发"时钟芯片异常"自检;`sys_clock_get` 每 30 天惰性再基准化防 49.7 天 tick 回绕)→ `rs485_init` → `gd5f2gq5ue_init` → `tpafe5160_init` → SD2506 诊断 → `tpafe5160_start_conv_irq`
-- **就绪屏障**(`App/sys_events.h` Event Flags,取代魔法延时):`SYS_EVT_NET_READY`(netTask 置位)/ `STORAGE_READY`(defaultTask:卷挂载 + 网络配置加载完成)/ `FTP_READY` / `TIMESYNC_READY`;消费者用 `osEventFlagsWait` 阻塞等待
+- **就绪屏障**(`App/app/sys_events.h` Event Flags,取代魔法延时):`SYS_EVT_NET_READY`(netTask 置位)/ `STORAGE_READY`(defaultTask:卷挂载 + 网络配置加载完成)/ `FTP_READY` / `TIMESYNC_READY`;消费者用 `osEventFlagsWait` 阻塞等待
- netTask:`net_stack_bring_up`(配置已由 defaultTask 在屏障前加载,本任务只读 RAM 副本 → `net_init` + PHY 强制 100M 全双工 → 递增网络代次号)→ 置 NET_READY → 循环 `net_poll` + `net_process_messages`;消费 `SYS_EVT_NET_RECONFIG` → 立即重建网络(新 IP 免重启生效,各 TCP 服务据代次号重建监听)
- defaultTask:`f_mount` forced(无卷自动 `f_mkfs` FAT32;挂载后卷健康探针:小写两击确认,FAT 区陈旧/擦除时自动重格式化自愈,`/config.ini` 回落工厂默认——2026-09-20 /log 写失败修复)→ 网络配置加载(`net_cfg_load`,首启含旧档迁移)→ STORAGE_READY → LED 闪烁;同时是 syslog(`/log/run.log`·`selftest.log`,定长 64B 记录)的**唯一写者**与**配置引擎属主**(`cfg_file` 静态态单任务收敛于此:UI 保存请求执行 `net_cfg_save_run` + 2s `cfg_file_poll`,经 `SYS_EVT_CFG_SAVE` 事件唤醒;netTask/uiTask 不得直接触碰配置引擎,见 P1-3)
- 全景 `docs/架构设计/项目架构总览.md`(六层分层 / 启动时序 / 存储·网络·UI 栈 / 目录组织)
@@ -89,7 +89,7 @@ STM32F407ZGTx @168MHz(HSE 8MHz → PLL M=4/N=168/P=2);**仅 Keil MDK-ARM v
- **单连接 socket 的断开语义**:监听 Socket 在 CONNECT 后自身即数据通道(`g_client == g_listen`),EOF 时 net 层已 `auto_relisten`;应用层**不得**在 EOF 时 `net_close` 该 fd(会连监听一起毁掉 → 端口"连接被拒"),仅当数据 fd ≠ 监听 fd(模拟器多连接后端)时才关
- 网口配置:`/config.ini` [network] 段(工厂默认 192.168.1.100/24、gw .1;MAC 全零 = 芯片内置;UI 保存立即生效;旧档 `/cfg/netcfg.bin` 首启自动迁移)→ `docs/子系统设计/网络配置说明.md`
- **新 .c 文件必须手动注册到两处**才能双端编译:`MDK-ARM/STM32F407-Demo.uvprojx` + `simulator/CMakeLists.txt`(用 `new-source-file` skill)
-- 测试构建:`test/test_config.h` 的 `TEST_SUITE_CH395F/STORAGE/GD5F/RTC` **互斥**(一次只能启用一个,`#error`);全部注释 = 产品构建;**破坏性用例默认关闭**:同文件 `ENABLE_DESTRUCTIVE_TESTS`(默认注释)控制写/擦 NAND、格式化、坏块注入与 FatFS 写类用例——关闭时套件为**只读模式**(开机横幅 `mode: READ-ONLY`,可随时在在用设备上跑、不动卷内容与容量),只在**产品首次上电/产线首启**或明确需要时打开(`mode: DESTRUCTIVE`);2026-09-21 实测一轮破坏性 GD5F 运行即让 dhara 多记一个坏块(容量 95248 → 95200;该计数持久化在 dhara journal checkpoint 头里,普通恢复模式清不掉,需全片擦除——见 `docs/测试说明/存储维护与容量恢复.md`);CH395F 套件 `test/ch395f_test.h`:硬件层 Phase 1~5 与 NET 层 Phase 6~11 互斥;CH395F 硬件层模式下 netTask(基础线程:无条件创建、全构建唯一实例)入口自挂起(不运行),testTask 独占 CH395F
+- 测试构建:`test/board/test_config.h` 的 `TEST_SUITE_CH395F/STORAGE/GD5F/RTC` **互斥**(一次只能启用一个,`#error`);全部注释 = 产品构建;**破坏性用例默认关闭**:同文件 `ENABLE_DESTRUCTIVE_TESTS`(默认注释)控制写/擦 NAND、格式化、坏块注入与 FatFS 写类用例——关闭时套件为**只读模式**(开机横幅 `mode: READ-ONLY`,可随时在在用设备上跑、不动卷内容与容量),只在**产品首次上电/产线首启**或明确需要时打开(`mode: DESTRUCTIVE`);2026-09-21 实测一轮破坏性 GD5F 运行即让 dhara 多记一个坏块(容量 95248 → 95200;该计数持久化在 dhara journal checkpoint 头里,普通恢复模式清不掉,需全片擦除——见 `docs/测试说明/存储维护与容量恢复.md`);CH395F 套件 `test/board/ch395f_test.h`:硬件层 Phase 1~5 与 NET 层 Phase 6~11 互斥;CH395F 硬件层模式下 netTask(基础线程:无条件创建、全构建唯一实例)入口自挂起(不运行),testTask 独占 CH395F
- **改驱动前先读对应 `docs/问题记录/*_Trap_Records.md`**(CH395F / GD5F2GQ5UE / SD2506);各模块测试指南见 `docs/测试说明/`;**存储维护/容量恢复**(全片擦除恢复 dhara 坏块记账)见 `docs/测试说明/存储维护与容量恢复.md`
- **LVGL I1 绘制缓冲含 palette 头(2026-09-21 实证)**:索引色格式 draw buffer 布局 = `[palette 8B][pixel data stride×h]`(`lv_draw_buf_create` 加 8B、`lv_draw_buf_goto_xy`/`lv_refr get_max_row` 都按此跳/扣),但 `lv_display_set_buffers`/`lv_draw_buf_init` 的容量校验**只看 `stride×h`**——只给 3200B 会被静默接受:末 8 个像素字节写到缓冲外(曾打脏相邻 `s_frame_box[0]` 指针 → HardFault),且 flush 收到的首地址含 palette(整帧错位 8 字节)。`ui_port.c` 按 `stride×h + palette` 供给并在 flush 时 `+palette` 取像素;详见 `docs/UI设计/UI_设计架构.md` §1.4 第 8 条
- **MCU 端必须显式应用 dark mono 主题(2026-09-21 实证,远端"纯白屏"根因)**:`lv_display_create()` 会按 `lv_theme_mono_init(disp, false)`(白底黑字)初始化**单例**主题,且 `lv_display_set_theme()` 只把主题重应用到 `screens[0]`(底层)→ **活动屏幕仍是 LVGL 类默认浅灰 `F5F5F5`**;而 UI 内容恒用 `lv_color_white()` 绘制 → 白底白字不可见、远端整帧 99% 为亮(客户端显示纯白)。修法(`ui_port.c`):`lv_theme_mono_init(disp, true, ...)` + `lv_display_set_theme()` + 对活动屏幕再 `lv_theme_apply()`(实测 `F5F5F5` → `000000`);同时显式写 I1 调色板头 8B(`[0]=黑 [1]=白`,LVGL 不替调用方初始化);详见 `docs/UI设计/UI_设计架构.md` §1.4 第 9 条
diff --git a/App/README.md b/App/README.md
index 1230a264..f2256772 100644
--- a/App/README.md
+++ b/App/README.md
@@ -5,38 +5,25 @@
## 职责
-`Src/main.c`(CubeMX 初始化)→ `app_main_init`(本目录 `app_main.c`)→ `osKernelStart` →
+`Src/main.c`(CubeMX 初始化)→ `app_main_init`(本目录 `app/app_main.c`)→ `osKernelStart` →
6 个 FreeRTOS 任务(见 `task/`)。**`osKernelStart` 之前全是内核启动前代码,禁止调用任何
FreeRTOS/CMSIS-RTOS API**(见 `AGENTS.md`「平台约束」)。
-## 文件一览
-
-| 文件 | 作用 |
-|---|---|
-| `app_main.c/h` | 应用初始化入口 `app_main_init`:时间子系统优先 → RS485 → NAND → ADC → 诊断 |
-| `app_cfg.h` | **功能模块编译开关**(裁剪测试套件/模块用) |
-| `sys_events.h` | 系统就绪事件定义(Event Flags:`SYS_EVT_NET_READY` 等就绪屏障) |
-| `time_sync.c/h` | 时间同步任务(等待网络就绪后与时间源同步) |
-| `cfg_file.c/h` | **配置引擎**(`/config.ini` 解析 + 持久化 + 旧档迁移),属主为 defaultTask |
-| `cfg_file_store.h` | 配置存储后端抽象接口(MCU=FreeRTOS 堆 / 模拟器=宿主堆,共享核心零分配) |
-| `cfg_file_store_mcu.c` | 配置存储的 MCU 端后端实现(`cfg_store_alloc/free` → FreeRTOS 堆) |
-| `log/` | 日志子系统(见下) |
-| `task/` | FreeRTOS 任务实现(见下) |
-| `util/` | 工具函数(见下) |
-| `protocol/` | 通信协议(预留,当前为空) |
-
-## 子目录
+## 目录结构(按职责分层)
| 目录 | 内容 | README |
|---|---|---|
-| `log/` | syslog(`/log/run.log`·`selftest.log` 定长记录)+ 控制台单写者日志 | [`log/README.md`](log/README.md) |
-| `task/` | 6 个 FreeRTOS 任务实现 | [`task/README.md`](task/README.md) |
-| `util/` | CRC / 环形缓冲 / 墙钟时间 | [`util/README.md`](util/README.md) |
-| `protocol/` | 通信协议(预留) | — |
+| `app/` | **应用入口与全局**:`app_main.c/h`(初始化入口)、`app_cfg.h`(编译开关)、`sys_events.h`(就绪事件) | [`app/README.md`](app/README.md) |
+| `cfg/` | **配置引擎**:`/config.ini` 解析 + 持久化 + 旧档迁移 | [`cfg/README.md`](cfg/README.md) |
+| `sync/` | **时间同步任务**:`time_sync.c/h` | [`sync/README.md`](sync/README.md) |
+| `log/` | **日志子系统**:syslog(NAND)+ 控制台单写者日志 | [`log/README.md`](log/README.md) |
+| `task/` | **FreeRTOS 任务实现**(6 个任务) | [`task/README.md`](task/README.md) |
+| `util/` | **通用工具**:CRC / 环形缓冲 / 墙钟时间 | [`util/README.md`](util/README.md) |
+| `protocol/` | 通信协议(预留,当前为空) | [`protocol/README.md`](protocol/README.md) |
## 关键约束
-- **配置引擎单任务收敛**:`cfg_file` 为静态态、属主是 defaultTask;UI 保存请求经
+- **配置引擎单任务收敛**:`cfg/` 为静态态、属主是 defaultTask;UI 保存请求经
`SYS_EVT_CFG_SAVE` 事件唤醒,netTask/uiTask **不得直接触碰**配置引擎
- **syslog 唯一写者**:`/log/*` 只由 defaultTask 写入
- 新增任务/缓冲/栈前**必须先核算 RAM 余量**(`docs/内存管理/`)
diff --git a/App/app/README.md b/App/app/README.md
new file mode 100644
index 00000000..0e76a59f
--- /dev/null
+++ b/App/app/README.md
@@ -0,0 +1,32 @@
+# App/app/ — 应用入口与全局定义
+
+> 应用层的**入口**与**全局定义**:初始化编排、功能编译开关、跨模块的就绪事件定义。
+
+## 文件一览
+
+| 文件 | 作用 |
+|---|---|
+| `app_main.c/h` | **应用初始化入口 `app_main_init`**:时间子系统优先 → RS485 → NAND → ADC → 诊断(在 `osKernelStart` 之前执行) |
+| `app_cfg.h` | **功能模块编译开关**(裁剪测试套件/模块用) |
+| `sys_events.h` | **系统就绪事件定义**(CMSIS-RTOS v2 Event Flags:`SYS_EVT_NET_READY` / `SYS_EVT_STORAGE_READY` / `SYS_EVT_FTP_READY` / `SYS_EVT_TIMESYNC_READY` 及命令位) |
+
+## 初始化顺序(`app_main_init`)
+
+```
+sd2506_init // 时间子系统优先,使后续日志带时间戳
+sys_clock_init // 墙钟(RTC 故障降级并返回 -1 → 触发自检)
+rs485_init
+gd5f2gq5ue_init
+tpafe5160_init
+SD2506 诊断 // ID / 时间 / 温度 / 电池
+tpafe5160_start_conv_irq // 首次 ADC 转换
+```
+
+> ⚠️ 以上全部在内核启动前执行 → **禁止任何 FreeRTOS/CMSIS-RTOS API 调用**
+> (`osMessageQueueNew` 等会杀死启动)。内核前日志走无锁静态缓冲(见 `../log/`)。
+
+## 相关文档
+
+- 架构全景:`docs/架构设计/项目架构总览.md`
+- 启动顺序与就绪屏障:`docs/架构设计/项目启动顺序管理.md`
+- 墙钟:`docs/子系统设计/系统墙钟时间维护说明.md`
diff --git a/App/app_cfg.h b/App/app/app_cfg.h
similarity index 100%
rename from App/app_cfg.h
rename to App/app/app_cfg.h
diff --git a/App/app_main.c b/App/app/app_main.c
similarity index 100%
rename from App/app_main.c
rename to App/app/app_main.c
diff --git a/App/app_main.h b/App/app/app_main.h
similarity index 100%
rename from App/app_main.h
rename to App/app/app_main.h
diff --git a/App/sys_events.h b/App/app/sys_events.h
similarity index 100%
rename from App/sys_events.h
rename to App/app/sys_events.h
diff --git a/App/cfg/README.md b/App/cfg/README.md
new file mode 100644
index 00000000..a2b8fe29
--- /dev/null
+++ b/App/cfg/README.md
@@ -0,0 +1,28 @@
+# App/cfg/ — 配置引擎
+
+> **`/config.ini` 配置引擎**:分层解析、持久化(原子写)、旧档迁移。
+> 属主 = **defaultTask**(单任务收敛,静态态);其它任务不得直接触碰。
+
+## 文件一览
+
+| 文件 | 作用 |
+|---|---|
+| `cfg_file.c/h` | **配置引擎核心**:解析 / 查询 / 保存 / 2s 周期 `cfg_file_poll` |
+| `cfg_file_store.h` | **存储后端抽象接口**(MCU=FreeRTOS 堆 / 模拟器=宿主堆,共享核心零分配符号) |
+| `cfg_file_store_mcu.c` | **MCU 端后端实现**:`/config.ini`(`/config.TMP` + `f_rename` 原子写) |
+
+## 设计要点
+
+- **单任务收敛**:`cfg_file` 为静态态,只有 defaultTask 操作;UI 保存请求经
+ `SYS_EVT_CFG_SAVE` 事件唤醒 defaultTask 执行(netTask/uiTask 不得直接调用)
+- **零分配共享核心**:核心逻辑不含任何分配符号,动态内存收进平台后端
+ (`cfg_store_alloc/free`:MCU→`pvPortMalloc`,模拟器→宿主堆)
+- **原子写**:写 `/config.TMP` 后 `f_rename` 替换,避免掉电损坏
+- **旧档迁移**:首启时把旧格式转换为当前格式(`net_cfg_legacy.c` 负责网络段)
+- **自研代码禁用 C 库堆分配**:MicroLIB 堆仅 512B(`malloc` 必返回 NULL)
+
+## 相关文档
+
+- `docs/子系统设计/配置文件设计说明.md` — 完整设计(分层/解析/持久化/迁移)
+- `docs/子系统设计/网络配置说明.md` — 网络段
+- `docs/审查记录/项目审计改进清单.md` P3-2 — 临时文件名硬编码问题
diff --git a/App/cfg_file.c b/App/cfg/cfg_file.c
similarity index 100%
rename from App/cfg_file.c
rename to App/cfg/cfg_file.c
diff --git a/App/cfg_file.h b/App/cfg/cfg_file.h
similarity index 100%
rename from App/cfg_file.h
rename to App/cfg/cfg_file.h
diff --git a/App/cfg_file_store.h b/App/cfg/cfg_file_store.h
similarity index 100%
rename from App/cfg_file_store.h
rename to App/cfg/cfg_file_store.h
diff --git a/App/cfg_file_store_mcu.c b/App/cfg/cfg_file_store_mcu.c
similarity index 100%
rename from App/cfg_file_store_mcu.c
rename to App/cfg/cfg_file_store_mcu.c
diff --git a/App/sync/README.md b/App/sync/README.md
new file mode 100644
index 00000000..4ca6e284
--- /dev/null
+++ b/App/sync/README.md
@@ -0,0 +1,29 @@
+# App/sync/ — 时间同步
+
+> 墙钟时间与外部时间源的同步(timeSyncTask)。墙钟本身由 `../util/sys_clock.c` 维护,
+> 本目录负责**从时间源拉取/接收时间并校准**。
+
+## 文件一览
+
+| 文件 | 作用 |
+|---|---|
+| `time_sync.c/h` | **时间同步任务**:等待网络就绪 → 与时间源交互 → 校准墙钟 |
+
+## 工作流
+
+```
+timeSyncTask 启动
+ ↓ osEventFlagsWait(SYS_EVT_NET_READY, ...|osFlagsNoClear) // 状态位不可消费!
+time_sync 主循环 → 与时间源通信 → sys_clock 校准
+ ↓
+置 SYS_EVT_TIMESYNC_READY
+```
+
+> ⚠️ 等待**就绪位**(`SYS_EVT_NET_READY`)必须 `osFlagsNoClear`——它是状态位,
+> 用默认消费型等待会把它清掉,导致后续消费者(如 ftpTask)永远等不到。
+
+## 相关文档
+
+- `docs/子系统设计/系统墙钟时间维护说明.md` — 墙钟基准 / tick 回绕防护
+- `test/host/time_sync_server.py` — PC 端对时推送服务(测试用)
+- `docs/架构设计/项目启动顺序管理.md` — 就绪屏障
diff --git a/App/time_sync.c b/App/sync/time_sync.c
similarity index 100%
rename from App/time_sync.c
rename to App/sync/time_sync.c
diff --git a/App/time_sync.h b/App/sync/time_sync.h
similarity index 100%
rename from App/time_sync.h
rename to App/sync/time_sync.h
diff --git a/App/task/README.md b/App/task/README.md
index f30d2078..23ebc527 100644
--- a/App/task/README.md
+++ b/App/task/README.md
@@ -12,14 +12,14 @@
| `ui_task.c/h` | uiTask | BelowNormal | LVGL 界面(菜单 / 内容页 / 待机)+ 推流 |
| `adc_task.c/h` | (ADC 任务) | — | 高精度 ADC(TPAFE5160)数据采集 |
| `rs485_task.c/h` | (RS-485 任务) | — | 半双工 RS-485 协议通信 |
-| `time_sync.c`(在 `App/` 根) | timeSyncTask | Normal | 墙钟时间同步(实现不在本目录) |
+| `../sync/time_sync.c` | timeSyncTask | Normal | 墙钟时间同步(实现不在本目录,见 [`../sync/README.md`](../sync/README.md)) |
> 上表栈大小/优先级以 `Src/freertos.c` 为准(`README.md`/`AGENTS.md` 的任务表由
> `scripts/gen_task_table.py` 生成,勿手抄)。
## 就绪屏障(重要)
-任务间**不用魔法延时**,改用 `App/sys_events.h` 的 Event Flags:
+任务间**不用魔法延时**,改用 `App/app/sys_events.h` 的 Event Flags:
- `SYS_EVT_NET_READY` / `SYS_EVT_STORAGE_READY` 等是**状态位**——等待时必须
`osFlagsWaitAny|osFlagsNoClear`,**不能用默认消费型等待**(否则先到的消费者会清掉位,
diff --git a/Drivers/BSP/NETCFG/README.md b/Drivers/BSP/NETCFG/README.md
index dccc01e8..f036fbe0 100644
--- a/Drivers/BSP/NETCFG/README.md
+++ b/Drivers/BSP/NETCFG/README.md
@@ -1,7 +1,7 @@
# Drivers/BSP/NETCFG/ — 网络配置
> 网络参数的**加载 / 保存 / 旧档迁移**(IP、掩码、网关等)。
-> 本模块是**网络配置的持久化层**,与 `App/cfg_file.c`(配置引擎)配合工作。
+> 本模块是**网络配置的持久化层**,与 `App/cfg/cfg_file.c`(配置引擎)配合工作。
## 文件一览
diff --git a/Drivers/BSP/SD2506/README.md b/Drivers/BSP/SD2506/README.md
index db061346..d5166599 100644
--- a/Drivers/BSP/SD2506/README.md
+++ b/Drivers/BSP/SD2506/README.md
@@ -19,7 +19,7 @@
`sys_clock_init`,使后续日志都带时间戳
- 开机执行 **SD2506 诊断**(ID / 时间 / 温度 / 电池),失败触发"时钟芯片异常"自检上报
- RTC 故障时 `sys_clock_init` **降级到默认时间基准并返回 -1**
-- 时间源同步由 `App/time_sync.c`(timeSyncTask)负责
+- 时间源同步由 `App/sync/time_sync.c`(timeSyncTask)负责
## 相关文档
diff --git a/MDK-ARM/STM32F407-Demo.uvprojx b/MDK-ARM/STM32F407-Demo.uvprojx
index bccb7515..66a9c9f2 100644
--- a/MDK-ARM/STM32F407-Demo.uvprojx
+++ b/MDK-ARM/STM32F407-Demo.uvprojx
@@ -339,7 +339,7 @@
--diag_suppress=1,68,111,188,191,546,1293
USE_HAL_DRIVER,STM32F407xx,NDEBUG
- ../Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../Drivers/BSP;../Drivers/BSP/CH395F;../Drivers/BSP/GD5F2GQ5UE;../Drivers/BSP/TPAFE5160;../Drivers/BSP/SD2506;../Drivers/BSP/RS485;../Drivers/BSP/NET;../Drivers/BSP/NET/lftpd;../Drivers/BSP/NETCFG;../App;../App/log;../App/task;../App/util;../Middlewares/Third_Party/FreeRTOS/Source/include;../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F;../Lib/dhara;../Lib/FatFs;../test;../Lib/lvgl;../Drivers/BSP/UI;../Lib
+ ../Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../Drivers/BSP;../Drivers/BSP/CH395F;../Drivers/BSP/GD5F2GQ5UE;../Drivers/BSP/TPAFE5160;../Drivers/BSP/SD2506;../Drivers/BSP/RS485;../Drivers/BSP/NET;../Drivers/BSP/NET/lftpd;../Drivers/BSP/NETCFG;../App;../App/app;../App/cfg;../App/log;../App/sync;../App/task;../App/util;../Middlewares/Third_Party/FreeRTOS/Source/include;../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F;../Lib/dhara;../Lib/FatFs;../test/board;../Lib/lvgl;../Drivers/BSP/UI;../Lib
@@ -757,17 +757,17 @@
app_main.c
1
- ..\App\app_main.c
+ ..\App\app\app_main.c
cfg_file.c
1
- ..\App\cfg_file.c
+ ..\App\cfg\cfg_file.c
cfg_file_store_mcu.c
1
- ..\App\cfg_file_store_mcu.c
+ ..\App\cfg\cfg_file_store_mcu.c
sys_log_mcu.c
@@ -787,7 +787,7 @@
time_sync.c
1
- ..\App\time_sync.c
+ ..\App\sync\time_sync.c
default_task.c
@@ -2036,37 +2036,37 @@
ch395f_test_task.c
1
- ..\test\ch395f_test_task.c
+ ..\test\board\ch395f_test_task.c
test_config.c
1
- ..\test\test_config.c
+ ..\test\board\test_config.c
net_test_task.c
1
- ..\test\net_test_task.c
+ ..\test\board\net_test_task.c
net_latency_test.c
1
- ..\test\net_latency_test.c
+ ..\test\board\net_latency_test.c
gd5f_test_task.c
1
- ..\test\gd5f_test_task.c
+ ..\test\board\gd5f_test_task.c
storage_test_task.c
1
- ..\test\storage_test_task.c
+ ..\test\board\storage_test_task.c
sd2506_test_task.c
1
- ..\test\sd2506_test_task.c
+ ..\test\board\sd2506_test_task.c
diff --git a/README.md b/README.md
index 447bfc5c..091a43bb 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@
flowchart TB
subgraph APP["应用层 (App/)"]
direction LR
- A1["app_main.c"] ~~~ A2["net_task.c"] ~~~ A3["ui_task.c"] ~~~ A4["time_sync.c"]
+ A1["app/app_main.c"] ~~~ A2["task/net_task.c"] ~~~ A3["task/ui_task.c"] ~~~ A4["sync/time_sync.c"]
end
subgraph BSP["驱动层 (Drivers/BSP/)"]
direction LR
@@ -107,19 +107,18 @@ STM32F4-Base/
│ ├── main.h / FreeRTOSConfig.h / stm32f4xx_hal_conf.h
│ └── gpio.h / dma.h / spi.h / i2c.h / usart.h
├── App/ # 应用层代码
-│ ├── app_main.c/h # 应用初始化入口
-│ ├── app_cfg.h # 功能模块编译开关
-│ ├── sys_events.h # 系统就绪事件定义
-│ ├── sys_clock.c/h # 墙钟时间管理
-│ ├── time_sync.c/h # 时间同步任务
+│ ├── app/ # 应用入口与全局(app_main / app_cfg / sys_events)
+│ ├── cfg/ # 配置引擎(cfg_file 解析/持久化/迁移 + 存储后端)
+│ ├── sync/ # 时间同步(time_sync 任务)
│ ├── log/ # 日志(sys_log 运行/自检记录、console_log 控制台单写者)
│ ├── task/ # FreeRTOS 任务实现
+│ │ ├── default_task.c/h # 存储挂载 + 配置引擎属主 + syslog 写者
│ │ ├── net_task.c/h # 网络任务
│ │ ├── ui_task.c/h # UI 任务
│ │ ├── adc_task.c/h # ADC 任务
│ │ └── rs485_task.c/h # RS-485 任务
-│ ├── protocol/ # 通信协议(预留)
-│ └── util/ # 工具函数(CRC、环形缓冲等)
+│ ├── util/ # 工具函数(crc / ringbuf / sys_clock)
+│ └── protocol/ # 通信协议(预留)
├── Drivers/
│ ├── BSP/ # 板级驱动(手工编写)
│ │ ├── CH395F/ # 以太网控制器驱动
@@ -131,6 +130,7 @@ STM32F4-Base/
│ │ │ ├── net_socket.c/h # Socket API
│ │ │ ├── net_select.c/h # select/poll 多路复用
│ │ │ └── lftpd/ # 轻量 FTP 服务器
+│ │ ├── NETCFG/ # 网络配置(加载/保存/旧档迁移)
│ │ ├── UI/ # LVGL UI 组件
│ │ └── dbg_log.h / dbg_cfg.h # 调试日志(DBG_INFO 等)
│ ├── STM32F4xx_HAL_Driver/ # ST HAL 库
@@ -145,22 +145,26 @@ STM32F4-Base/
│ ├── STM32F407-Demo.uvprojx # 工程文件
│ ├── build.bat # 命令行编译脚本
│ ├── download.bat # 烧录脚本
+│ ├── reset.bat # 复位 / 烧录(ST-LINK_CLI)
+│ ├── *_probe.py # 台架探针(TCP 复连 / FTP 中止等)
│ └── startup_stm32f407xx.s # 启动文件
├── test/ # 测试代码与脚本
-│ ├── run_boot_test.py # 自动化启动测试
-│ ├── verify_log.py # 日志校验脚本
-│ ├── test_config.c/h # 测试任务配置
-│ ├── ch395f_test_task.c/h # CH395F 硬件测试
-│ ├── gd5f_test_task.c/h # NAND Flash 测试
-│ ├── net_test_task.c/h # 网络层测试
-│ ├── sd2506_test_task.c/h # RTC 测试
-│ ├── storage_test_task.c/h # 存储性能测试
-│ ├── ch395f_socket_test.py # Socket 通信测试(主机端)
-│ ├── ftp_test.py # FTP 服务器测试(主机端)
-│ ├── ftp_up_dl_test.py # FTP 上传下载测试(主机端)
-│ ├── ftp_speed_test.py # FTP 传输速度测试(主机端)
-│ ├── ftp_capture.py # FTP 流量抓取(主机端)
-│ └── time_sync_server.py # 时间同步推送服务(主机端)
+│ ├── board/ # 板端测试套件(编入固件)
+│ │ ├── test_config.c/h # 套件选择开关(互斥)
+│ │ ├── ch395f_test_task.c/h # CH395F 测试
+│ │ ├── gd5f_test_task.c/h # NAND Flash 测试
+│ │ ├── sd2506_test_task.c/h # RTC 测试
+│ │ ├── storage_test_task.c/h # 存储性能测试
+│ │ ├── net_test_task.c/h # 网络层测试
+│ │ └── net_latency_test.c/h # 链路时延探针
+│ └── host/ # 主机端脚本(PC 侧)
+│ ├── run_boot_test.py # 自动化启动测试(@test 入口)
+│ ├── verify_log.py # 日志标记校验
+│ ├── ch395f_socket_test.py # Socket 通信测试
+│ ├── ftp_test.py / ftp_up_dl_test.py / ftp_speed_test.py / ftp_capture.py / ftp_regression.py
+│ ├── e02_probe.py # E-02 专项探针
+│ ├── latency_peer.py # 链路时延 PC 对端
+│ └── time_sync_server.py # 时间同步推送服务
├── docs/ # 项目文档(全量索引见 docs/README.md)
│ ├── README.md # 文档索引:目录结构 + 推荐阅读顺序 + 全量清单
│ ├── 待处理内容.md # 跨文档待办登记簿
@@ -281,7 +285,7 @@ UI 改动回归门禁(菜单像素回归 + 内容页黄金参考 + 池水位
```powershell
# 一键测试:串口捕获 → 烧录 → 日志校验(2026-09-20 起为纯 Python 标准库实现)
-& '.venv\Scripts\python.exe' test/run_boot_test.py
+& '.venv\Scripts\python.exe' test/host/run_boot_test.py
```
退出码:0 = PASS | 1 = FAIL | 2 = 错误
@@ -365,15 +369,15 @@ pre-commit run --all-files
|------|------|
| `Src/main.c` | 程序入口,CubeMX 生成 + USER CODE 区域 |
| `Src/freertos.c` | FreeRTOS 任务创建 |
-| `App/app_main.c` | 应用初始化流程编排 |
+| `App/app/app_main.c` | 应用初始化流程编排 |
| `App/task/net_task.c` | 网络任务主循环 |
-| `App/sys_events.h` | 系统就绪事件定义 |
-| `App/app_cfg.h` | 功能模块编译开关 |
+| `App/app/sys_events.h` | 系统就绪事件定义 |
+| `App/app/app_cfg.h` | 功能模块编译开关 |
| `Drivers/BSP/CH395F/ch395f.c` | 以太网控制器驱动 |
| `Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c` | NAND Flash 驱动 |
| `Drivers/BSP/NET/net_socket.c` | BSD Socket API |
| `MDK-ARM/build.bat` | 编译脚本 |
-| `test/run_boot_test.py` | 自动化测试脚本 |
+| `test/host/run_boot_test.py` | 自动化测试脚本 |
## 已知问题
diff --git a/Src/freertos.c b/Src/freertos.c
index 027d8c9c..5fc1e12b 100644
--- a/Src/freertos.c
+++ b/Src/freertos.c
@@ -32,8 +32,8 @@
#include "dbg_log.h"
#include "net_socket.h"
#include "lftpd.h"
-#include "../test/ch395f_test_task.h"
-#include "../test/ch395f_test.h" /* ENABLE_NET_LAYER_TESTS:netTask 条件创建 */
+#include "../test/board/ch395f_test_task.h"
+#include "../test/board/ch395f_test.h" /* ENABLE_NET_LAYER_TESTS:netTask 条件创建 */
#include "time_sync.h"
#include "sys_events.h"
#include "default_task.h"
@@ -56,7 +56,7 @@
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */
-/* 存储测试变量(g_storage_stats / s_perf_buf)已迁至 test/storage_test_task.c */
+/* 存储测试变量(g_storage_stats / s_perf_buf)已迁至 test/board/storage_test_task.c */
osThreadId_t timeSyncTaskHandle;
const osThreadAttr_t timeSyncTask_attributes = {
.name = "timeSyncTask",
diff --git a/docs/UI设计/UI_界面制作流程.md b/docs/UI设计/UI_界面制作流程.md
index b523b32c..4dea4533 100644
--- a/docs/UI设计/UI_界面制作流程.md
+++ b/docs/UI设计/UI_界面制作流程.md
@@ -249,7 +249,7 @@ flowchart TD
## 六、P3:MCU 验证
1. `@build` → **0 错误 0 警告**(AGENTS.md 强制;有警告看 `MDK-ARM/build_log.txt`)
-2. `@test`(一键 `test/run_boot_test.py`):
+2. `@test`(一键 `test/host/run_boot_test.py`):
- 采集窗口**先于烧录武装**(脚本 `--flash-cmd` 已保证顺序)
- Required:`UI port init: OK;UI menu init: OK` + 本界面定制标记(按屏增补,如页头标题字样)
- Forbidden:`FAIL;ERROR;HardFault`
diff --git a/docs/images/引用关系图.dot b/docs/images/引用关系图.dot
index 962f8bd4..15bf3122 100644
--- a/docs/images/引用关系图.dot
+++ b/docs/images/引用关系图.dot
@@ -2,18 +2,20 @@ digraph refgraph_full {
graph [rankdir=LR, bgcolor="white", labelloc=t, label="STM32F4-Base 项目文件引用关系图(项目代码视图)", fontname="Microsoft YaHei", fontsize=18];
node [fontname="Microsoft YaHei", fontsize=10, shape=box, style="rounded,filled"];
edge [fontname="Microsoft YaHei", fontsize=8];
- "App/app_cfg.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/app_main.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/app_main.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/cfg_file.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/cfg_file.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/cfg_file_store.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/cfg_file_store_mcu.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/app/app_cfg.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/app/app_main.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/app/app_main.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/app/sys_events.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/cfg/cfg_file.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/cfg/cfg_file.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/cfg/cfg_file_store.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/cfg/cfg_file_store_mcu.c" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/log/console_log.c" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/log/console_log.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/log/sys_log.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/log/sys_log_mcu.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/sys_events.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/sync/time_sync.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "App/sync/time_sync.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/task/adc_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/task/adc_task.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/task/default_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
@@ -24,8 +26,6 @@ digraph refgraph_full {
"App/task/rs485_task.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/task/ui_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/task/ui_task.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/time_sync.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "App/time_sync.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/util/crc.c" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/util/crc.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"App/util/ringbuf.c" [fillcolor="#dbeafe", color="#1d4ed8"];
@@ -144,47 +144,48 @@ digraph refgraph_full {
"simulator/sim/sim_port.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"simulator/sim/sim_syslog.c" [fillcolor="#dbeafe", color="#1d4ed8"];
"simulator/sim/ui_net_sink_backend_sim.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/ch395f_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/ch395f_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/ch395f_test_task.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/gd5f_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/gd5f_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/net_latency_test.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/net_latency_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/net_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/net_test_task.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/sd2506_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/sd2506_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/storage_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/storage_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/test_config.c" [fillcolor="#dbeafe", color="#1d4ed8"];
- "test/test_config.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/ch395f_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/ch395f_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/ch395f_test_task.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/gd5f_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/gd5f_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/net_latency_test.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/net_latency_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/net_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/net_test_task.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/sd2506_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/sd2506_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/storage_test.h" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/storage_test_task.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/test_config.c" [fillcolor="#dbeafe", color="#1d4ed8"];
+ "test/board/test_config.h" [fillcolor="#dbeafe", color="#1d4ed8"];
"外部/系统头文件" [shape=ellipse, fillcolor="#fef3c7", color="#d97706", fontsize=12];
- "App/app_main.c" -> "App/app_cfg.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "App/app_main.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "App/log/sys_log.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "App/util/sys_clock.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "Drivers/BSP/RS485/rs485.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "Drivers/BSP/SD2506/sd2506.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "Drivers/BSP/TPAFE5160/tpafe5160.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "Inc/main.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.c" -> "Inc/usart.h" [color="#2563eb", penwidth=1.0];
- "App/app_main.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "App/cfg_file.c" -> "App/cfg_file.h" [color="#2563eb", penwidth=1.0];
- "App/cfg_file.c" -> "App/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
- "App/cfg_file.c" -> "App/log/sys_log.h" [color="#2563eb", penwidth=1.0];
- "App/cfg_file.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "App/cfg_file.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "App/cfg_file.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "App/cfg_file_store.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "App/cfg_file_store_mcu.c" -> "App/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
- "App/cfg_file_store_mcu.c" -> "Lib/FatFs/ff.h" [color="#94a3b8", penwidth=0.7];
- "App/cfg_file_store_mcu.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
- "App/cfg_file_store_mcu.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "App/app/app_main.c" -> "App/app/app_cfg.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "App/app/app_main.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "App/log/sys_log.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "App/util/sys_clock.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "Drivers/BSP/RS485/rs485.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "Drivers/BSP/SD2506/sd2506.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "Drivers/BSP/TPAFE5160/tpafe5160.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "Inc/main.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.c" -> "Inc/usart.h" [color="#2563eb", penwidth=1.0];
+ "App/app/app_main.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "App/app/sys_events.h" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.h" [color="#94a3b8", penwidth=0.7];
+ "App/cfg/cfg_file.c" -> "App/cfg/cfg_file.h" [color="#2563eb", penwidth=1.0];
+ "App/cfg/cfg_file.c" -> "App/cfg/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
+ "App/cfg/cfg_file.c" -> "App/log/sys_log.h" [color="#2563eb", penwidth=1.0];
+ "App/cfg/cfg_file.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "App/cfg/cfg_file.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "App/cfg/cfg_file.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "App/cfg/cfg_file_store.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "App/cfg/cfg_file_store_mcu.c" -> "App/cfg/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
+ "App/cfg/cfg_file_store_mcu.c" -> "Lib/FatFs/ff.h" [color="#94a3b8", penwidth=0.7];
+ "App/cfg/cfg_file_store_mcu.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
+ "App/cfg/cfg_file_store_mcu.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "App/log/console_log.c" -> "App/app/sys_events.h" [color="#2563eb", penwidth=1.0];
"App/log/console_log.c" -> "App/log/console_log.h" [color="#2563eb", penwidth=1.0];
- "App/log/console_log.c" -> "App/sys_events.h" [color="#2563eb", penwidth=1.0];
"App/log/console_log.c" -> "Inc/usart.h" [color="#2563eb", penwidth=1.0];
"App/log/console_log.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
"App/log/console_log.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
@@ -198,14 +199,20 @@ digraph refgraph_full {
"App/log/sys_log_mcu.c" -> "Lib/FatFs/ff.h" [color="#94a3b8", penwidth=0.7];
"App/log/sys_log_mcu.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
"App/log/sys_log_mcu.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "App/sys_events.h" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.h" [color="#94a3b8", penwidth=0.7];
+ "App/sync/time_sync.c" -> "App/app/sys_events.h" [color="#2563eb", penwidth=1.0];
+ "App/sync/time_sync.c" -> "App/sync/time_sync.h" [color="#2563eb", penwidth=1.0];
+ "App/sync/time_sync.c" -> "App/util/sys_clock.h" [color="#2563eb", penwidth=1.0];
+ "App/sync/time_sync.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
+ "App/sync/time_sync.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "App/sync/time_sync.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "App/sync/time_sync.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"App/task/adc_task.c" -> "App/task/adc_task.h" [color="#2563eb", penwidth=1.0];
"App/task/adc_task.c" -> "Drivers/BSP/TPAFE5160/tpafe5160.h" [color="#2563eb", penwidth=1.0];
"App/task/adc_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
"App/task/adc_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
- "App/task/default_task.c" -> "App/cfg_file.h" [color="#2563eb", penwidth=1.0];
+ "App/task/default_task.c" -> "App/app/sys_events.h" [color="#2563eb", penwidth=1.0];
+ "App/task/default_task.c" -> "App/cfg/cfg_file.h" [color="#2563eb", penwidth=1.0];
"App/task/default_task.c" -> "App/log/sys_log.h" [color="#2563eb", penwidth=1.0];
- "App/task/default_task.c" -> "App/sys_events.h" [color="#2563eb", penwidth=1.0];
"App/task/default_task.c" -> "App/task/default_task.h" [color="#2563eb", penwidth=1.0];
"App/task/default_task.c" -> "Drivers/BSP/GD5F2GQ5UE/nand_ftl.h" [color="#2563eb", penwidth=1.0];
"App/task/default_task.c" -> "Drivers/BSP/NETCFG/net_cfg.h" [color="#2563eb", penwidth=1.0];
@@ -215,9 +222,9 @@ digraph refgraph_full {
"App/task/default_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
"App/task/default_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
"App/task/default_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/task.h" [color="#94a3b8", penwidth=0.7];
- "App/task/default_task.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
+ "App/task/default_task.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
+ "App/task/net_task.c" -> "App/app/sys_events.h" [color="#2563eb", penwidth=1.0];
"App/task/net_task.c" -> "App/log/sys_log.h" [color="#2563eb", penwidth=1.0];
- "App/task/net_task.c" -> "App/sys_events.h" [color="#2563eb", penwidth=1.0];
"App/task/net_task.c" -> "App/task/net_task.h" [color="#2563eb", penwidth=1.0];
"App/task/net_task.c" -> "Drivers/BSP/CH395F/ch395f.h" [color="#2563eb", penwidth=1.0];
"App/task/net_task.c" -> "Drivers/BSP/NET/net_select.h" [color="#2563eb", penwidth=1.0];
@@ -225,13 +232,13 @@ digraph refgraph_full {
"App/task/net_task.c" -> "Drivers/BSP/NETCFG/net_cfg.h" [color="#2563eb", penwidth=1.0];
"App/task/net_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
"App/task/net_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
- "App/task/net_task.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
+ "App/task/net_task.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
"App/task/net_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"App/task/rs485_task.c" -> "App/task/rs485_task.h" [color="#2563eb", penwidth=1.0];
"App/task/rs485_task.c" -> "Drivers/BSP/RS485/rs485.h" [color="#2563eb", penwidth=1.0];
"App/task/rs485_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
"App/task/rs485_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
- "App/task/ui_task.c" -> "App/sys_events.h" [color="#2563eb", penwidth=1.0];
+ "App/task/ui_task.c" -> "App/app/sys_events.h" [color="#2563eb", penwidth=1.0];
"App/task/ui_task.c" -> "App/task/ui_task.h" [color="#2563eb", penwidth=1.0];
"App/task/ui_task.c" -> "App/util/sys_clock.h" [color="#2563eb", penwidth=1.0];
"App/task/ui_task.c" -> "Drivers/BSP/UI/ui_menu.h" [color="#2563eb", penwidth=1.0];
@@ -240,16 +247,9 @@ digraph refgraph_full {
"App/task/ui_task.c" -> "Drivers/BSP/UI/ui_standby.h" [color="#2563eb", penwidth=1.0];
"App/task/ui_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
"App/task/ui_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
- "App/task/ui_task.c" -> "test/net_latency_test.h" [color="#2563eb", penwidth=1.0];
- "App/task/ui_task.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
+ "App/task/ui_task.c" -> "test/board/net_latency_test.h" [color="#2563eb", penwidth=1.0];
+ "App/task/ui_task.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
"App/task/ui_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "App/time_sync.c" -> "App/sys_events.h" [color="#2563eb", penwidth=1.0];
- "App/time_sync.c" -> "App/time_sync.h" [color="#2563eb", penwidth=1.0];
- "App/time_sync.c" -> "App/util/sys_clock.h" [color="#2563eb", penwidth=1.0];
- "App/time_sync.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
- "App/time_sync.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "App/time_sync.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "App/time_sync.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"App/util/crc.c" -> "App/util/crc.h" [color="#2563eb", penwidth=1.0];
"App/util/crc.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"App/util/ringbuf.c" -> "App/util/ringbuf.h" [color="#2563eb", penwidth=1.0];
@@ -298,22 +298,22 @@ digraph refgraph_full {
"Drivers/BSP/NET/net_socket.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
"Drivers/BSP/NET/net_socket.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
"Drivers/BSP/NET/net_socket.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/task.h" [color="#94a3b8", penwidth=0.7];
- "Drivers/BSP/NET/net_socket.c" -> "test/net_latency_test.h" [color="#2563eb", penwidth=1.0];
- "Drivers/BSP/NET/net_socket.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
+ "Drivers/BSP/NET/net_socket.c" -> "test/board/net_latency_test.h" [color="#2563eb", penwidth=1.0];
+ "Drivers/BSP/NET/net_socket.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NET/net_socket.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"Drivers/BSP/NET/net_socket.h" -> "Drivers/BSP/NET/net_types.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NET/net_socket.h" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
"Drivers/BSP/NET/net_socket.h" -> "Middlewares/Third_Party/FreeRTOS/Source/include/task.h" [color="#94a3b8", penwidth=0.7];
"Drivers/BSP/NET/net_types.h" -> "Drivers/BSP/NET/net_config.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NET/net_types.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "Drivers/BSP/NETCFG/net_cfg.c" -> "App/cfg_file.h" [color="#2563eb", penwidth=1.0];
+ "Drivers/BSP/NETCFG/net_cfg.c" -> "App/cfg/cfg_file.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NETCFG/net_cfg.c" -> "Drivers/BSP/NETCFG/net_cfg.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NETCFG/net_cfg.c" -> "Drivers/BSP/NETCFG/net_cfg_legacy.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NETCFG/net_cfg.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NETCFG/net_cfg.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"Drivers/BSP/NETCFG/net_cfg.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "Drivers/BSP/NETCFG/net_cfg_legacy.c" -> "App/cfg_file.h" [color="#2563eb", penwidth=1.0];
- "Drivers/BSP/NETCFG/net_cfg_legacy.c" -> "App/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
+ "Drivers/BSP/NETCFG/net_cfg_legacy.c" -> "App/cfg/cfg_file.h" [color="#2563eb", penwidth=1.0];
+ "Drivers/BSP/NETCFG/net_cfg_legacy.c" -> "App/cfg/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NETCFG/net_cfg_legacy.c" -> "Drivers/BSP/NETCFG/net_cfg.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NETCFG/net_cfg_legacy.c" -> "Drivers/BSP/NETCFG/net_cfg_legacy.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/NETCFG/net_cfg_legacy.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
@@ -373,8 +373,8 @@ digraph refgraph_full {
"Drivers/BSP/UI/ui_net_sink.c" -> "Drivers/BSP/NET/net_types.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/UI/ui_net_sink.c" -> "Drivers/BSP/UI/ui_net_sink.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/UI/ui_net_sink.c" -> "Drivers/BSP/UI/ui_net_sink_backend.h" [color="#2563eb", penwidth=1.0];
- "Drivers/BSP/UI/ui_net_sink.c" -> "test/net_latency_test.h" [color="#2563eb", penwidth=1.0];
- "Drivers/BSP/UI/ui_net_sink.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
+ "Drivers/BSP/UI/ui_net_sink.c" -> "test/board/net_latency_test.h" [color="#2563eb", penwidth=1.0];
+ "Drivers/BSP/UI/ui_net_sink.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
"Drivers/BSP/UI/ui_net_sink.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"Drivers/BSP/UI/ui_net_sink.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"Drivers/BSP/UI/ui_net_sink_backend.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
@@ -439,10 +439,10 @@ digraph refgraph_full {
"Inc/stm32f4xx_hal_conf.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"Inc/usart.h" -> "Inc/main.h" [color="#2563eb", penwidth=1.0];
"Src/dma.c" -> "Inc/dma.h" [color="#2563eb", penwidth=1.0];
- "Src/freertos.c" -> "App/sys_events.h" [color="#2563eb", penwidth=1.0];
+ "Src/freertos.c" -> "App/app/sys_events.h" [color="#2563eb", penwidth=1.0];
+ "Src/freertos.c" -> "App/sync/time_sync.h" [color="#2563eb", penwidth=1.0];
"Src/freertos.c" -> "App/task/default_task.h" [color="#2563eb", penwidth=1.0];
"Src/freertos.c" -> "App/task/net_task.h" [color="#2563eb", penwidth=1.0];
- "Src/freertos.c" -> "App/time_sync.h" [color="#2563eb", penwidth=1.0];
"Src/freertos.c" -> "Drivers/BSP/CH395F/ch395f.h" [color="#2563eb", penwidth=1.0];
"Src/freertos.c" -> "Drivers/BSP/NET/lftpd/lftpd.h" [color="#94a3b8", penwidth=0.7];
"Src/freertos.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
@@ -451,13 +451,13 @@ digraph refgraph_full {
"Src/freertos.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
"Src/freertos.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
"Src/freertos.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/task.h" [color="#94a3b8", penwidth=0.7];
- "Src/freertos.c" -> "test/ch395f_test.h" [color="#2563eb", penwidth=1.0];
- "Src/freertos.c" -> "test/ch395f_test_task.h" [color="#2563eb", penwidth=1.0];
- "Src/freertos.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
+ "Src/freertos.c" -> "test/board/ch395f_test.h" [color="#2563eb", penwidth=1.0];
+ "Src/freertos.c" -> "test/board/ch395f_test_task.h" [color="#2563eb", penwidth=1.0];
+ "Src/freertos.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
"Src/freertos.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"Src/gpio.c" -> "Inc/gpio.h" [color="#2563eb", penwidth=1.0];
"Src/i2c.c" -> "Inc/i2c.h" [color="#2563eb", penwidth=1.0];
- "Src/main.c" -> "App/app_main.h" [color="#2563eb", penwidth=1.0];
+ "Src/main.c" -> "App/app/app_main.h" [color="#2563eb", penwidth=1.0];
"Src/main.c" -> "App/util/sys_clock.h" [color="#2563eb", penwidth=1.0];
"Src/main.c" -> "Drivers/BSP/CH395F/ch395f.h" [color="#2563eb", penwidth=1.0];
"Src/main.c" -> "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h" [color="#2563eb", penwidth=1.0];
@@ -485,8 +485,8 @@ digraph refgraph_full {
"Src/system_stm32f4xx.c" -> "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h" [color="#94a3b8", penwidth=0.7];
"Src/usart.c" -> "Inc/usart.h" [color="#2563eb", penwidth=1.0];
"simulator/dbg_log.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "simulator/main.c" -> "App/cfg_file.h" [color="#2563eb", penwidth=1.0];
- "simulator/main.c" -> "App/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
+ "simulator/main.c" -> "App/cfg/cfg_file.h" [color="#2563eb", penwidth=1.0];
+ "simulator/main.c" -> "App/cfg/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
"simulator/main.c" -> "App/log/sys_log.h" [color="#2563eb", penwidth=1.0];
"simulator/main.c" -> "Drivers/BSP/NETCFG/net_cfg.h" [color="#2563eb", penwidth=1.0];
"simulator/main.c" -> "Drivers/BSP/UI/ui_menu.h" [color="#2563eb", penwidth=1.0];
@@ -496,11 +496,11 @@ digraph refgraph_full {
"simulator/main.c" -> "simulator/SDL2/SDL2-2.32.10/include/SDL.h" [color="#94a3b8", penwidth=0.7];
"simulator/main.c" -> "simulator/sim/sim_port.h" [color="#2563eb", penwidth=1.0];
"simulator/main.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "simulator/sim/cfg_file_store_sim.c" -> "App/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
+ "simulator/sim/cfg_file_store_sim.c" -> "App/cfg/cfg_file_store.h" [color="#2563eb", penwidth=1.0];
"simulator/sim/cfg_file_store_sim.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
"simulator/sim/net_socket_sim.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
"simulator/sim/net_socket_sim.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "simulator/sim/sim_latency_stub.c" -> "test/net_latency_test.h" [color="#2563eb", penwidth=1.0];
+ "simulator/sim/sim_latency_stub.c" -> "test/board/net_latency_test.h" [color="#2563eb", penwidth=1.0];
"simulator/sim/sim_port.c" -> "Lib/lvgl/lvgl.h" [color="#94a3b8", penwidth=0.7];
"simulator/sim/sim_port.c" -> "simulator/SDL2/SDL2-2.32.10/include/SDL.h" [color="#94a3b8", penwidth=0.7];
"simulator/sim/sim_port.c" -> "simulator/sim/sim_port.h" [color="#2563eb", penwidth=1.0];
@@ -511,77 +511,77 @@ digraph refgraph_full {
"simulator/sim/ui_net_sink_backend_sim.c" -> "Drivers/BSP/UI/ui_port.h" [color="#2563eb", penwidth=1.0];
"simulator/sim/ui_net_sink_backend_sim.c" -> "Lib/lvgl/lvgl.h" [color="#94a3b8", penwidth=0.7];
"simulator/sim/ui_net_sink_backend_sim.c" -> "simulator/sim/sim_port.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/ch395f_test_task.c" -> "App/sys_events.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "App/task/net_task.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "Drivers/BSP/CH395F/ch395f.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
- "test/ch395f_test_task.c" -> "test/ch395f_test.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "test/ch395f_test_task.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "test/gd5f_test.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "test/net_latency_test.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "test/net_test_task.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "test/sd2506_test.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "test/storage_test.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
- "test/ch395f_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/gd5f_test.h" -> "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h" [color="#2563eb", penwidth=1.0];
- "test/gd5f_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/gd5f_test_task.c" -> "Drivers/BSP/GD5F2GQ5UE/nand_ftl.h" [color="#2563eb", penwidth=1.0];
- "test/gd5f_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "test/gd5f_test_task.c" -> "Lib/FatFs/ff.h" [color="#94a3b8", penwidth=0.7];
- "test/gd5f_test_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
- "test/gd5f_test_task.c" -> "test/gd5f_test.h" [color="#2563eb", penwidth=1.0];
- "test/gd5f_test_task.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
- "test/gd5f_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/net_latency_test.c" -> "Drivers/BSP/CH395F/ch395f.h" [color="#2563eb", penwidth=1.0];
- "test/net_latency_test.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
- "test/net_latency_test.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "test/net_latency_test.c" -> "Inc/main.h" [color="#2563eb", penwidth=1.0];
- "test/net_latency_test.c" -> "test/ch395f_test.h" [color="#2563eb", penwidth=1.0];
- "test/net_latency_test.c" -> "test/net_latency_test.h" [color="#2563eb", penwidth=1.0];
- "test/net_latency_test.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
- "test/net_latency_test.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/net_latency_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/net_test_task.c" -> "Drivers/BSP/NET/net_select.h" [color="#2563eb", penwidth=1.0];
- "test/net_test_task.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
- "test/net_test_task.c" -> "Drivers/BSP/NET/net_types.h" [color="#2563eb", penwidth=1.0];
- "test/net_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "test/net_test_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
- "test/net_test_task.c" -> "test/ch395f_test.h" [color="#2563eb", penwidth=1.0];
- "test/net_test_task.c" -> "test/ch395f_test_task.h" [color="#2563eb", penwidth=1.0];
- "test/net_test_task.c" -> "test/net_latency_test.h" [color="#2563eb", penwidth=1.0];
- "test/net_test_task.c" -> "test/net_test_task.h" [color="#2563eb", penwidth=1.0];
- "test/net_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/sd2506_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/sd2506_test_task.c" -> "Drivers/BSP/SD2506/sd2506.h" [color="#2563eb", penwidth=1.0];
- "test/sd2506_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "test/sd2506_test_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
- "test/sd2506_test_task.c" -> "test/sd2506_test.h" [color="#2563eb", penwidth=1.0];
- "test/sd2506_test_task.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
- "test/sd2506_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/storage_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/storage_test_task.c" -> "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h" [color="#2563eb", penwidth=1.0];
- "test/storage_test_task.c" -> "Drivers/BSP/GD5F2GQ5UE/nand_ftl.h" [color="#2563eb", penwidth=1.0];
- "test/storage_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "test/storage_test_task.c" -> "Inc/main.h" [color="#2563eb", penwidth=1.0];
- "test/storage_test_task.c" -> "Lib/FatFs/diskio.h" [color="#94a3b8", penwidth=0.7];
- "test/storage_test_task.c" -> "Lib/FatFs/ff.h" [color="#94a3b8", penwidth=0.7];
- "test/storage_test_task.c" -> "test/storage_test.h" [color="#2563eb", penwidth=1.0];
- "test/storage_test_task.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
- "test/storage_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
- "test/test_config.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
- "test/test_config.c" -> "test/ch395f_test_task.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.c" -> "test/gd5f_test.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.c" -> "test/sd2506_test.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.c" -> "test/storage_test.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.c" -> "test/test_config.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.h" -> "test/ch395f_test.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.h" -> "test/gd5f_test.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.h" -> "test/sd2506_test.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.h" -> "test/storage_test.h" [color="#2563eb", penwidth=1.0];
- "test/test_config.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/ch395f_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/ch395f_test_task.c" -> "App/app/sys_events.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "App/task/net_task.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "Drivers/BSP/CH395F/ch395f.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
+ "test/board/ch395f_test_task.c" -> "test/board/ch395f_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "test/board/ch395f_test_task.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "test/board/gd5f_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "test/board/net_latency_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "test/board/net_test_task.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "test/board/sd2506_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "test/board/storage_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
+ "test/board/ch395f_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/gd5f_test.h" -> "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h" [color="#2563eb", penwidth=1.0];
+ "test/board/gd5f_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/gd5f_test_task.c" -> "Drivers/BSP/GD5F2GQ5UE/nand_ftl.h" [color="#2563eb", penwidth=1.0];
+ "test/board/gd5f_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "test/board/gd5f_test_task.c" -> "Lib/FatFs/ff.h" [color="#94a3b8", penwidth=0.7];
+ "test/board/gd5f_test_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h" [color="#94a3b8", penwidth=0.7];
+ "test/board/gd5f_test_task.c" -> "test/board/gd5f_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/gd5f_test_task.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
+ "test/board/gd5f_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/net_latency_test.c" -> "Drivers/BSP/CH395F/ch395f.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_latency_test.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_latency_test.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_latency_test.c" -> "Inc/main.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_latency_test.c" -> "test/board/ch395f_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_latency_test.c" -> "test/board/net_latency_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_latency_test.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_latency_test.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/net_latency_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/net_test_task.c" -> "Drivers/BSP/NET/net_select.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_test_task.c" -> "Drivers/BSP/NET/net_socket.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_test_task.c" -> "Drivers/BSP/NET/net_types.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_test_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
+ "test/board/net_test_task.c" -> "test/board/ch395f_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_test_task.c" -> "test/board/ch395f_test_task.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_test_task.c" -> "test/board/net_latency_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_test_task.c" -> "test/board/net_test_task.h" [color="#2563eb", penwidth=1.0];
+ "test/board/net_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/sd2506_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/sd2506_test_task.c" -> "Drivers/BSP/SD2506/sd2506.h" [color="#2563eb", penwidth=1.0];
+ "test/board/sd2506_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "test/board/sd2506_test_task.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
+ "test/board/sd2506_test_task.c" -> "test/board/sd2506_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/sd2506_test_task.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
+ "test/board/sd2506_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/storage_test.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/storage_test_task.c" -> "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h" [color="#2563eb", penwidth=1.0];
+ "test/board/storage_test_task.c" -> "Drivers/BSP/GD5F2GQ5UE/nand_ftl.h" [color="#2563eb", penwidth=1.0];
+ "test/board/storage_test_task.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "test/board/storage_test_task.c" -> "Inc/main.h" [color="#2563eb", penwidth=1.0];
+ "test/board/storage_test_task.c" -> "Lib/FatFs/diskio.h" [color="#94a3b8", penwidth=0.7];
+ "test/board/storage_test_task.c" -> "Lib/FatFs/ff.h" [color="#94a3b8", penwidth=0.7];
+ "test/board/storage_test_task.c" -> "test/board/storage_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/storage_test_task.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
+ "test/board/storage_test_task.c" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
+ "test/board/test_config.c" -> "Drivers/BSP/dbg_log.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.c" -> "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h" [color="#94a3b8", penwidth=0.7];
+ "test/board/test_config.c" -> "test/board/ch395f_test_task.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.c" -> "test/board/gd5f_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.c" -> "test/board/sd2506_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.c" -> "test/board/storage_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.c" -> "test/board/test_config.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.h" -> "test/board/ch395f_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.h" -> "test/board/gd5f_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.h" -> "test/board/sd2506_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.h" -> "test/board/storage_test.h" [color="#2563eb", penwidth=1.0];
+ "test/board/test_config.h" -> "外部/系统头文件" [color="#f59e0b", penwidth=0.6, style=dashed];
}
diff --git a/docs/images/引用关系图.json b/docs/images/引用关系图.json
index 5c3aa09a..b9f6d052 100644
--- a/docs/images/引用关系图.json
+++ b/docs/images/引用关系图.json
@@ -2,31 +2,35 @@
"title": "STM32F4-Base 项目文件引用关系图(项目代码视图)",
"nodes": [
{
- "path": "App/app_cfg.h",
+ "path": "App/app/app_cfg.h",
"class": "fp"
},
{
- "path": "App/app_main.c",
+ "path": "App/app/app_main.c",
"class": "fp"
},
{
- "path": "App/app_main.h",
+ "path": "App/app/app_main.h",
"class": "fp"
},
{
- "path": "App/cfg_file.c",
+ "path": "App/app/sys_events.h",
"class": "fp"
},
{
- "path": "App/cfg_file.h",
+ "path": "App/cfg/cfg_file.c",
"class": "fp"
},
{
- "path": "App/cfg_file_store.h",
+ "path": "App/cfg/cfg_file.h",
"class": "fp"
},
{
- "path": "App/cfg_file_store_mcu.c",
+ "path": "App/cfg/cfg_file_store.h",
+ "class": "fp"
+ },
+ {
+ "path": "App/cfg/cfg_file_store_mcu.c",
"class": "fp"
},
{
@@ -46,7 +50,11 @@
"class": "fp"
},
{
- "path": "App/sys_events.h",
+ "path": "App/sync/time_sync.c",
+ "class": "fp"
+ },
+ {
+ "path": "App/sync/time_sync.h",
"class": "fp"
},
{
@@ -89,14 +97,6 @@
"path": "App/task/ui_task.h",
"class": "fp"
},
- {
- "path": "App/time_sync.c",
- "class": "fp"
- },
- {
- "path": "App/time_sync.h",
- "class": "fp"
- },
{
"path": "App/util/crc.c",
"class": "fp"
@@ -5498,63 +5498,63 @@
"class": "fp"
},
{
- "path": "test/ch395f_test.h",
+ "path": "test/board/ch395f_test.h",
"class": "fp"
},
{
- "path": "test/ch395f_test_task.c",
+ "path": "test/board/ch395f_test_task.c",
"class": "fp"
},
{
- "path": "test/ch395f_test_task.h",
+ "path": "test/board/ch395f_test_task.h",
"class": "fp"
},
{
- "path": "test/gd5f_test.h",
+ "path": "test/board/gd5f_test.h",
"class": "fp"
},
{
- "path": "test/gd5f_test_task.c",
+ "path": "test/board/gd5f_test_task.c",
"class": "fp"
},
{
- "path": "test/net_latency_test.c",
+ "path": "test/board/net_latency_test.c",
"class": "fp"
},
{
- "path": "test/net_latency_test.h",
+ "path": "test/board/net_latency_test.h",
"class": "fp"
},
{
- "path": "test/net_test_task.c",
+ "path": "test/board/net_test_task.c",
"class": "fp"
},
{
- "path": "test/net_test_task.h",
+ "path": "test/board/net_test_task.h",
"class": "fp"
},
{
- "path": "test/sd2506_test.h",
+ "path": "test/board/sd2506_test.h",
"class": "fp"
},
{
- "path": "test/sd2506_test_task.c",
+ "path": "test/board/sd2506_test_task.c",
"class": "fp"
},
{
- "path": "test/storage_test.h",
+ "path": "test/board/storage_test.h",
"class": "fp"
},
{
- "path": "test/storage_test_task.c",
+ "path": "test/board/storage_test_task.c",
"class": "fp"
},
{
- "path": "test/test_config.c",
+ "path": "test/board/test_config.c",
"class": "fp"
},
{
- "path": "test/test_config.h",
+ "path": "test/board/test_config.h",
"class": "fp"
},
{
@@ -5564,221 +5564,179 @@
],
"edges": [
{
- "from": "App/app_main.c",
- "to": "App/app_main.h",
+ "from": "App/app/app_main.c",
+ "to": "App/app/app_main.h",
"kind": "fp-fp",
"include": "app_main.h"
},
{
- "from": "App/app_main.c",
- "to": "App/app_cfg.h",
+ "from": "App/app/app_main.c",
+ "to": "App/app/app_cfg.h",
"kind": "fp-fp",
"include": "app_cfg.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "Inc/main.h",
"kind": "fp-fp",
"include": "main.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "Inc/usart.h",
"kind": "fp-fp",
"include": "usart.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "Drivers/BSP/RS485/rs485.h",
"kind": "fp-fp",
"include": "rs485.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "Drivers/BSP/SD2506/sd2506.h",
"kind": "fp-fp",
"include": "sd2506.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "App/util/sys_clock.h",
"kind": "fp-fp",
"include": "sys_clock.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
"kind": "fp-fp",
"include": "gd5f2gq5ue.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "Drivers/BSP/TPAFE5160/tpafe5160.h",
"kind": "fp-fp",
"include": "tpafe5160.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "App/log/sys_log.h",
"kind": "fp-fp",
"include": "sys_log.h"
},
{
- "from": "App/app_main.c",
+ "from": "App/app/app_main.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "App/app_main.h",
+ "from": "App/app/app_main.h",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
{
- "from": "App/cfg_file.c",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "string.h"
- },
- {
- "from": "App/cfg_file.c",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "stdlib.h"
- },
- {
- "from": "App/cfg_file.c",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "stdio.h"
- },
- {
- "from": "App/cfg_file.c",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "ctype.h"
- },
- {
- "from": "App/cfg_file.c",
- "to": "App/cfg_file.h",
- "kind": "fp-fp",
- "include": "cfg_file.h"
- },
- {
- "from": "App/cfg_file.c",
- "to": "App/cfg_file_store.h",
- "kind": "fp-fp",
- "include": "cfg_file_store.h"
- },
- {
- "from": "App/cfg_file.c",
- "to": "App/log/sys_log.h",
- "kind": "fp-fp",
- "include": "sys_log.h"
- },
- {
- "from": "App/cfg_file.c",
- "to": "Drivers/BSP/dbg_log.h",
- "kind": "fp-fp",
- "include": "dbg_log.h"
- },
- {
- "from": "App/cfg_file.h",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "stdint.h"
- },
- {
- "from": "App/cfg_file.h",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "stddef.h"
- },
- {
- "from": "App/cfg_file_store.h",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "stdint.h"
- },
- {
- "from": "App/cfg_file_store.h",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "stddef.h"
- },
- {
- "from": "App/cfg_file_store_mcu.c",
- "to": "外部/系统头文件",
- "kind": "fp-ext",
- "include": "string.h"
- },
- {
- "from": "App/cfg_file_store_mcu.c",
- "to": "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h",
- "kind": "fp-tp",
- "include": "FreeRTOS.h"
- },
- {
- "from": "App/cfg_file_store_mcu.c",
- "to": "App/cfg_file_store.h",
- "kind": "fp-fp",
- "include": "cfg_file_store.h"
- },
- {
- "from": "App/cfg_file_store_mcu.c",
- "to": "Lib/FatFs/ff.h",
- "kind": "fp-tp",
- "include": "ff.h"
- },
- {
- "from": "App/sys_events.h",
+ "from": "App/app/sys_events.h",
"to": "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.h",
"kind": "fp-tp",
"include": "cmsis_os2.h"
},
{
- "from": "App/time_sync.c",
+ "from": "App/cfg/cfg_file.c",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "string.h"
},
{
- "from": "App/time_sync.c",
- "to": "App/time_sync.h",
- "kind": "fp-fp",
- "include": "time_sync.h"
+ "from": "App/cfg/cfg_file.c",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "stdlib.h"
},
{
- "from": "App/time_sync.c",
- "to": "Drivers/BSP/NET/net_socket.h",
- "kind": "fp-fp",
- "include": "net_socket.h"
+ "from": "App/cfg/cfg_file.c",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "stdio.h"
},
{
- "from": "App/time_sync.c",
- "to": "App/util/sys_clock.h",
- "kind": "fp-fp",
- "include": "sys_clock.h"
+ "from": "App/cfg/cfg_file.c",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "ctype.h"
},
{
- "from": "App/time_sync.c",
- "to": "App/sys_events.h",
+ "from": "App/cfg/cfg_file.c",
+ "to": "App/cfg/cfg_file.h",
"kind": "fp-fp",
- "include": "sys_events.h"
+ "include": "cfg_file.h"
},
{
- "from": "App/time_sync.c",
+ "from": "App/cfg/cfg_file.c",
+ "to": "App/cfg/cfg_file_store.h",
+ "kind": "fp-fp",
+ "include": "cfg_file_store.h"
+ },
+ {
+ "from": "App/cfg/cfg_file.c",
+ "to": "App/log/sys_log.h",
+ "kind": "fp-fp",
+ "include": "sys_log.h"
+ },
+ {
+ "from": "App/cfg/cfg_file.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "App/time_sync.h",
+ "from": "App/cfg/cfg_file.h",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
+ {
+ "from": "App/cfg/cfg_file.h",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "stddef.h"
+ },
+ {
+ "from": "App/cfg/cfg_file_store.h",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "stdint.h"
+ },
+ {
+ "from": "App/cfg/cfg_file_store.h",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "stddef.h"
+ },
+ {
+ "from": "App/cfg/cfg_file_store_mcu.c",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "string.h"
+ },
+ {
+ "from": "App/cfg/cfg_file_store_mcu.c",
+ "to": "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h",
+ "kind": "fp-tp",
+ "include": "FreeRTOS.h"
+ },
+ {
+ "from": "App/cfg/cfg_file_store_mcu.c",
+ "to": "App/cfg/cfg_file_store.h",
+ "kind": "fp-fp",
+ "include": "cfg_file_store.h"
+ },
+ {
+ "from": "App/cfg/cfg_file_store_mcu.c",
+ "to": "Lib/FatFs/ff.h",
+ "kind": "fp-tp",
+ "include": "ff.h"
+ },
{
"from": "App/log/console_log.c",
"to": "App/log/console_log.h",
@@ -5817,7 +5775,7 @@
},
{
"from": "App/log/console_log.c",
- "to": "App/sys_events.h",
+ "to": "App/app/sys_events.h",
"kind": "fp-fp",
"include": "sys_events.h"
},
@@ -5887,6 +5845,48 @@
"kind": "fp-fp",
"include": "sys_clock.h"
},
+ {
+ "from": "App/sync/time_sync.c",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "string.h"
+ },
+ {
+ "from": "App/sync/time_sync.c",
+ "to": "App/sync/time_sync.h",
+ "kind": "fp-fp",
+ "include": "time_sync.h"
+ },
+ {
+ "from": "App/sync/time_sync.c",
+ "to": "Drivers/BSP/NET/net_socket.h",
+ "kind": "fp-fp",
+ "include": "net_socket.h"
+ },
+ {
+ "from": "App/sync/time_sync.c",
+ "to": "App/util/sys_clock.h",
+ "kind": "fp-fp",
+ "include": "sys_clock.h"
+ },
+ {
+ "from": "App/sync/time_sync.c",
+ "to": "App/app/sys_events.h",
+ "kind": "fp-fp",
+ "include": "sys_events.h"
+ },
+ {
+ "from": "App/sync/time_sync.c",
+ "to": "Drivers/BSP/dbg_log.h",
+ "kind": "fp-fp",
+ "include": "dbg_log.h"
+ },
+ {
+ "from": "App/sync/time_sync.h",
+ "to": "外部/系统头文件",
+ "kind": "fp-ext",
+ "include": "stdint.h"
+ },
{
"from": "App/task/adc_task.c",
"to": "App/task/adc_task.h",
@@ -5919,7 +5919,7 @@
},
{
"from": "App/task/default_task.c",
- "to": "test/test_config.h",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
@@ -5967,7 +5967,7 @@
},
{
"from": "App/task/default_task.c",
- "to": "App/cfg_file.h",
+ "to": "App/cfg/cfg_file.h",
"kind": "fp-fp",
"include": "cfg_file.h"
},
@@ -5979,7 +5979,7 @@
},
{
"from": "App/task/default_task.c",
- "to": "App/sys_events.h",
+ "to": "App/app/sys_events.h",
"kind": "fp-fp",
"include": "sys_events.h"
},
@@ -6033,7 +6033,7 @@
},
{
"from": "App/task/net_task.c",
- "to": "App/sys_events.h",
+ "to": "App/app/sys_events.h",
"kind": "fp-fp",
"include": "sys_events.h"
},
@@ -6045,7 +6045,7 @@
},
{
"from": "App/task/net_task.c",
- "to": "test/test_config.h",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
@@ -6099,7 +6099,7 @@
},
{
"from": "App/task/ui_task.c",
- "to": "App/sys_events.h",
+ "to": "App/app/sys_events.h",
"kind": "fp-fp",
"include": "sys_events.h"
},
@@ -6135,13 +6135,13 @@
},
{
"from": "App/task/ui_task.c",
- "to": "test/test_config.h",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
"from": "App/task/ui_task.c",
- "to": "test/net_latency_test.h",
+ "to": "test/board/net_latency_test.h",
"kind": "fp-fp",
"include": "net_latency_test.h"
},
@@ -6513,13 +6513,13 @@
},
{
"from": "Drivers/BSP/NET/net_socket.c",
- "to": "test/test_config.h",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
"from": "Drivers/BSP/NET/net_socket.c",
- "to": "test/net_latency_test.h",
+ "to": "test/board/net_latency_test.h",
"kind": "fp-fp",
"include": "net_latency_test.h"
},
@@ -6849,7 +6849,7 @@
},
{
"from": "Drivers/BSP/NETCFG/net_cfg.c",
- "to": "App/cfg_file.h",
+ "to": "App/cfg/cfg_file.h",
"kind": "fp-fp",
"include": "cfg_file.h"
},
@@ -6891,13 +6891,13 @@
},
{
"from": "Drivers/BSP/NETCFG/net_cfg_legacy.c",
- "to": "App/cfg_file.h",
+ "to": "App/cfg/cfg_file.h",
"kind": "fp-fp",
"include": "cfg_file.h"
},
{
"from": "Drivers/BSP/NETCFG/net_cfg_legacy.c",
- "to": "App/cfg_file_store.h",
+ "to": "App/cfg/cfg_file_store.h",
"kind": "fp-fp",
"include": "cfg_file_store.h"
},
@@ -7269,13 +7269,13 @@
},
{
"from": "Drivers/BSP/UI/ui_net_sink.c",
- "to": "test/test_config.h",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
"from": "Drivers/BSP/UI/ui_net_sink.c",
- "to": "test/net_latency_test.h",
+ "to": "test/board/net_latency_test.h",
"kind": "fp-fp",
"include": "net_latency_test.h"
},
@@ -33423,13 +33423,13 @@
},
{
"from": "simulator/main.c",
- "to": "App/cfg_file.h",
+ "to": "App/cfg/cfg_file.h",
"kind": "fp-fp",
"include": "cfg_file.h"
},
{
"from": "simulator/main.c",
- "to": "App/cfg_file_store.h",
+ "to": "App/cfg/cfg_file_store.h",
"kind": "fp-fp",
"include": "cfg_file_store.h"
},
@@ -38517,7 +38517,7 @@
},
{
"from": "simulator/sim/cfg_file_store_sim.c",
- "to": "App/cfg_file_store.h",
+ "to": "App/cfg/cfg_file_store.h",
"kind": "fp-fp",
"include": "cfg_file_store.h"
},
@@ -38553,7 +38553,7 @@
},
{
"from": "simulator/sim/sim_latency_stub.c",
- "to": "test/net_latency_test.h",
+ "to": "test/board/net_latency_test.h",
"kind": "fp-fp",
"include": "net_latency_test.h"
},
@@ -38667,7 +38667,7 @@
},
{
"from": "Src/freertos.c",
- "to": "test/test_config.h",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
@@ -38709,25 +38709,25 @@
},
{
"from": "Src/freertos.c",
- "to": "test/ch395f_test_task.h",
+ "to": "test/board/ch395f_test_task.h",
"kind": "fp-fp",
- "include": "../test/ch395f_test_task.h"
+ "include": "../test/board/ch395f_test_task.h"
},
{
"from": "Src/freertos.c",
- "to": "test/ch395f_test.h",
+ "to": "test/board/ch395f_test.h",
"kind": "fp-fp",
- "include": "../test/ch395f_test.h"
+ "include": "../test/board/ch395f_test.h"
},
{
"from": "Src/freertos.c",
- "to": "App/time_sync.h",
+ "to": "App/sync/time_sync.h",
"kind": "fp-fp",
"include": "time_sync.h"
},
{
"from": "Src/freertos.c",
- "to": "App/sys_events.h",
+ "to": "App/app/sys_events.h",
"kind": "fp-fp",
"include": "sys_events.h"
},
@@ -38847,7 +38847,7 @@
},
{
"from": "Src/main.c",
- "to": "App/app_main.h",
+ "to": "App/app/app_main.h",
"kind": "fp-fp",
"include": "app_main.h"
},
@@ -38918,475 +38918,475 @@
"include": "usart.h"
},
{
- "from": "test/ch395f_test.h",
+ "from": "test/board/ch395f_test.h",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
{
- "from": "test/ch395f_test_task.c",
+ "from": "test/board/ch395f_test_task.c",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "string.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "test/ch395f_test_task.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "test/board/ch395f_test_task.h",
"kind": "fp-fp",
"include": "ch395f_test_task.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "test/ch395f_test.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "test/board/ch395f_test.h",
"kind": "fp-fp",
"include": "ch395f_test.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "test/net_test_task.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "test/board/net_test_task.h",
"kind": "fp-fp",
"include": "net_test_task.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "test/net_latency_test.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "test/board/net_latency_test.h",
"kind": "fp-fp",
"include": "net_latency_test.h"
},
{
- "from": "test/ch395f_test_task.c",
+ "from": "test/board/ch395f_test_task.c",
"to": "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h",
"kind": "fp-tp",
"include": "cmsis_os.h"
},
{
- "from": "test/ch395f_test_task.c",
+ "from": "test/board/ch395f_test_task.c",
"to": "App/task/net_task.h",
"kind": "fp-fp",
"include": "net_task.h"
},
{
- "from": "test/ch395f_test_task.c",
+ "from": "test/board/ch395f_test_task.c",
"to": "Drivers/BSP/NET/net_socket.h",
"kind": "fp-fp",
"include": "net_socket.h"
},
{
- "from": "test/ch395f_test_task.c",
+ "from": "test/board/ch395f_test_task.c",
"to": "Drivers/BSP/CH395F/ch395f.h",
"kind": "fp-fp",
"include": "ch395f.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "test/test_config.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "test/storage_test.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "test/board/storage_test.h",
"kind": "fp-fp",
"include": "storage_test.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "test/gd5f_test.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "test/board/gd5f_test.h",
"kind": "fp-fp",
"include": "gd5f_test.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "test/sd2506_test.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "test/board/sd2506_test.h",
"kind": "fp-fp",
"include": "sd2506_test.h"
},
{
- "from": "test/ch395f_test_task.c",
- "to": "App/sys_events.h",
+ "from": "test/board/ch395f_test_task.c",
+ "to": "App/app/sys_events.h",
"kind": "fp-fp",
"include": "sys_events.h"
},
{
- "from": "test/ch395f_test_task.c",
+ "from": "test/board/ch395f_test_task.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "test/gd5f_test.h",
+ "from": "test/board/gd5f_test.h",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
{
- "from": "test/gd5f_test.h",
+ "from": "test/board/gd5f_test.h",
"to": "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
"kind": "fp-fp",
"include": "gd5f2gq5ue.h"
},
{
- "from": "test/gd5f_test_task.c",
+ "from": "test/board/gd5f_test_task.c",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "string.h"
},
{
- "from": "test/gd5f_test_task.c",
+ "from": "test/board/gd5f_test_task.c",
"to": "Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h",
"kind": "fp-tp",
"include": "FreeRTOS.h"
},
{
- "from": "test/gd5f_test_task.c",
- "to": "test/test_config.h",
+ "from": "test/board/gd5f_test_task.c",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
- "from": "test/gd5f_test_task.c",
- "to": "test/gd5f_test.h",
+ "from": "test/board/gd5f_test_task.c",
+ "to": "test/board/gd5f_test.h",
"kind": "fp-fp",
"include": "gd5f_test.h"
},
{
- "from": "test/gd5f_test_task.c",
+ "from": "test/board/gd5f_test_task.c",
"to": "Drivers/BSP/GD5F2GQ5UE/nand_ftl.h",
"kind": "fp-fp",
"include": "nand_ftl.h"
},
{
- "from": "test/gd5f_test_task.c",
+ "from": "test/board/gd5f_test_task.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "test/gd5f_test_task.c",
+ "from": "test/board/gd5f_test_task.c",
"to": "Lib/FatFs/ff.h",
"kind": "fp-tp",
"include": "ff.h"
},
{
- "from": "test/net_latency_test.c",
+ "from": "test/board/net_latency_test.c",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "string.h"
},
{
- "from": "test/net_latency_test.c",
- "to": "test/net_latency_test.h",
+ "from": "test/board/net_latency_test.c",
+ "to": "test/board/net_latency_test.h",
"kind": "fp-fp",
"include": "net_latency_test.h"
},
{
- "from": "test/net_latency_test.c",
- "to": "test/ch395f_test.h",
+ "from": "test/board/net_latency_test.c",
+ "to": "test/board/ch395f_test.h",
"kind": "fp-fp",
"include": "ch395f_test.h"
},
{
- "from": "test/net_latency_test.c",
+ "from": "test/board/net_latency_test.c",
"to": "Drivers/BSP/CH395F/ch395f.h",
"kind": "fp-fp",
"include": "ch395f.h"
},
{
- "from": "test/net_latency_test.c",
+ "from": "test/board/net_latency_test.c",
"to": "Drivers/BSP/NET/net_socket.h",
"kind": "fp-fp",
"include": "net_socket.h"
},
{
- "from": "test/net_latency_test.c",
- "to": "test/test_config.h",
+ "from": "test/board/net_latency_test.c",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
- "from": "test/net_latency_test.c",
+ "from": "test/board/net_latency_test.c",
"to": "Inc/main.h",
"kind": "fp-fp",
"include": "main.h"
},
{
- "from": "test/net_latency_test.c",
+ "from": "test/board/net_latency_test.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "test/net_latency_test.h",
+ "from": "test/board/net_latency_test.h",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
{
- "from": "test/net_test_task.c",
+ "from": "test/board/net_test_task.c",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "string.h"
},
{
- "from": "test/net_test_task.c",
+ "from": "test/board/net_test_task.c",
"to": "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h",
"kind": "fp-tp",
"include": "cmsis_os.h"
},
{
- "from": "test/net_test_task.c",
+ "from": "test/board/net_test_task.c",
"to": "Drivers/BSP/NET/net_socket.h",
"kind": "fp-fp",
"include": "net_socket.h"
},
{
- "from": "test/net_test_task.c",
+ "from": "test/board/net_test_task.c",
"to": "Drivers/BSP/NET/net_types.h",
"kind": "fp-fp",
"include": "net_types.h"
},
{
- "from": "test/net_test_task.c",
- "to": "test/ch395f_test.h",
+ "from": "test/board/net_test_task.c",
+ "to": "test/board/ch395f_test.h",
"kind": "fp-fp",
"include": "ch395f_test.h"
},
{
- "from": "test/net_test_task.c",
- "to": "test/ch395f_test_task.h",
+ "from": "test/board/net_test_task.c",
+ "to": "test/board/ch395f_test_task.h",
"kind": "fp-fp",
"include": "ch395f_test_task.h"
},
{
- "from": "test/net_test_task.c",
- "to": "test/net_test_task.h",
+ "from": "test/board/net_test_task.c",
+ "to": "test/board/net_test_task.h",
"kind": "fp-fp",
"include": "net_test_task.h"
},
{
- "from": "test/net_test_task.c",
- "to": "test/net_latency_test.h",
+ "from": "test/board/net_test_task.c",
+ "to": "test/board/net_latency_test.h",
"kind": "fp-fp",
"include": "net_latency_test.h"
},
{
- "from": "test/net_test_task.c",
+ "from": "test/board/net_test_task.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "test/net_test_task.c",
+ "from": "test/board/net_test_task.c",
"to": "Drivers/BSP/NET/net_select.h",
"kind": "fp-fp",
"include": "net_select.h"
},
{
- "from": "test/net_test_task.c",
+ "from": "test/board/net_test_task.c",
"to": "Drivers/BSP/NET/net_select.h",
"kind": "fp-fp",
"include": "net_select.h"
},
{
- "from": "test/sd2506_test.h",
+ "from": "test/board/sd2506_test.h",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
{
- "from": "test/sd2506_test_task.c",
+ "from": "test/board/sd2506_test_task.c",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "string.h"
},
{
- "from": "test/sd2506_test_task.c",
+ "from": "test/board/sd2506_test_task.c",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
{
- "from": "test/sd2506_test_task.c",
- "to": "test/sd2506_test.h",
+ "from": "test/board/sd2506_test_task.c",
+ "to": "test/board/sd2506_test.h",
"kind": "fp-fp",
"include": "sd2506_test.h"
},
{
- "from": "test/sd2506_test_task.c",
- "to": "test/test_config.h",
+ "from": "test/board/sd2506_test_task.c",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
- "from": "test/sd2506_test_task.c",
+ "from": "test/board/sd2506_test_task.c",
"to": "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h",
"kind": "fp-tp",
"include": "cmsis_os.h"
},
{
- "from": "test/sd2506_test_task.c",
+ "from": "test/board/sd2506_test_task.c",
"to": "Drivers/BSP/SD2506/sd2506.h",
"kind": "fp-fp",
"include": "sd2506.h"
},
{
- "from": "test/sd2506_test_task.c",
+ "from": "test/board/sd2506_test_task.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "test/storage_test.h",
+ "from": "test/board/storage_test.h",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
{
- "from": "test/storage_test_task.c",
+ "from": "test/board/storage_test_task.c",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "string.h"
},
{
- "from": "test/storage_test_task.c",
+ "from": "test/board/storage_test_task.c",
"to": "Inc/main.h",
"kind": "fp-fp",
"include": "main.h"
},
{
- "from": "test/storage_test_task.c",
+ "from": "test/board/storage_test_task.c",
"to": "Lib/FatFs/ff.h",
"kind": "fp-tp",
"include": "ff.h"
},
{
- "from": "test/storage_test_task.c",
+ "from": "test/board/storage_test_task.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "test/storage_test_task.c",
- "to": "test/test_config.h",
+ "from": "test/board/storage_test_task.c",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
- "from": "test/storage_test_task.c",
- "to": "test/storage_test.h",
+ "from": "test/board/storage_test_task.c",
+ "to": "test/board/storage_test.h",
"kind": "fp-fp",
"include": "storage_test.h"
},
{
- "from": "test/storage_test_task.c",
+ "from": "test/board/storage_test_task.c",
"to": "Drivers/BSP/GD5F2GQ5UE/nand_ftl.h",
"kind": "fp-fp",
"include": "nand_ftl.h"
},
{
- "from": "test/storage_test_task.c",
+ "from": "test/board/storage_test_task.c",
"to": "Lib/FatFs/diskio.h",
"kind": "fp-tp",
"include": "diskio.h"
},
{
- "from": "test/storage_test_task.c",
+ "from": "test/board/storage_test_task.c",
"to": "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h",
"kind": "fp-fp",
"include": "gd5f2gq5ue.h"
},
{
- "from": "test/test_config.c",
+ "from": "test/board/test_config.c",
"to": "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os.h",
"kind": "fp-tp",
"include": "cmsis_os.h"
},
{
- "from": "test/test_config.c",
+ "from": "test/board/test_config.c",
"to": "Drivers/BSP/dbg_log.h",
"kind": "fp-fp",
"include": "dbg_log.h"
},
{
- "from": "test/test_config.c",
- "to": "test/test_config.h",
+ "from": "test/board/test_config.c",
+ "to": "test/board/test_config.h",
"kind": "fp-fp",
"include": "test_config.h"
},
{
- "from": "test/test_config.c",
- "to": "test/ch395f_test_task.h",
+ "from": "test/board/test_config.c",
+ "to": "test/board/ch395f_test_task.h",
"kind": "fp-fp",
"include": "ch395f_test_task.h"
},
{
- "from": "test/test_config.c",
- "to": "test/storage_test.h",
+ "from": "test/board/test_config.c",
+ "to": "test/board/storage_test.h",
"kind": "fp-fp",
"include": "storage_test.h"
},
{
- "from": "test/test_config.c",
- "to": "test/gd5f_test.h",
+ "from": "test/board/test_config.c",
+ "to": "test/board/gd5f_test.h",
"kind": "fp-fp",
"include": "gd5f_test.h"
},
{
- "from": "test/test_config.c",
- "to": "test/sd2506_test.h",
+ "from": "test/board/test_config.c",
+ "to": "test/board/sd2506_test.h",
"kind": "fp-fp",
"include": "sd2506_test.h"
},
{
- "from": "test/test_config.h",
+ "from": "test/board/test_config.h",
"to": "外部/系统头文件",
"kind": "fp-ext",
"include": "stdint.h"
},
{
- "from": "test/test_config.h",
- "to": "test/ch395f_test.h",
+ "from": "test/board/test_config.h",
+ "to": "test/board/ch395f_test.h",
"kind": "fp-fp",
"include": "ch395f_test.h"
},
{
- "from": "test/test_config.h",
- "to": "test/storage_test.h",
+ "from": "test/board/test_config.h",
+ "to": "test/board/storage_test.h",
"kind": "fp-fp",
"include": "storage_test.h"
},
{
- "from": "test/test_config.h",
- "to": "test/gd5f_test.h",
+ "from": "test/board/test_config.h",
+ "to": "test/board/gd5f_test.h",
"kind": "fp-fp",
"include": "gd5f_test.h"
},
{
- "from": "test/test_config.h",
- "to": "test/sd2506_test.h",
+ "from": "test/board/test_config.h",
+ "to": "test/board/sd2506_test.h",
"kind": "fp-fp",
"include": "sd2506_test.h"
}
],
"unresolved": {
- "App/app_main.h": [
+ "App/app/app_main.h": [
"stdint.h"
],
- "App/cfg_file.c": [
+ "App/cfg/cfg_file.c": [
"ctype.h",
"stdio.h",
"stdlib.h",
"string.h"
],
- "App/cfg_file.h": [
+ "App/cfg/cfg_file.h": [
"stddef.h",
"stdint.h"
],
- "App/cfg_file_store.h": [
+ "App/cfg/cfg_file_store.h": [
"stddef.h",
"stdint.h"
],
- "App/cfg_file_store_mcu.c": [
+ "App/cfg/cfg_file_store_mcu.c": [
"string.h"
],
"App/log/console_log.c": [
@@ -39404,18 +39404,18 @@
"stdio.h",
"string.h"
],
+ "App/sync/time_sync.c": [
+ "string.h"
+ ],
+ "App/sync/time_sync.h": [
+ "stdint.h"
+ ],
"App/task/net_task.c": [
"string.h"
],
"App/task/ui_task.c": [
"string.h"
],
- "App/time_sync.c": [
- "string.h"
- ],
- "App/time_sync.h": [
- "stdint.h"
- ],
"App/util/crc.h": [
"stddef.h",
"stdint.h"
@@ -41058,41 +41058,41 @@
"sys/stat.h",
"time.h"
],
- "test/ch395f_test.h": [
+ "test/board/ch395f_test.h": [
"stdint.h"
],
- "test/ch395f_test_task.c": [
+ "test/board/ch395f_test_task.c": [
"string.h"
],
- "test/gd5f_test.h": [
+ "test/board/gd5f_test.h": [
"stdint.h"
],
- "test/gd5f_test_task.c": [
+ "test/board/gd5f_test_task.c": [
"string.h"
],
- "test/net_latency_test.c": [
+ "test/board/net_latency_test.c": [
"string.h"
],
- "test/net_latency_test.h": [
+ "test/board/net_latency_test.h": [
"stdint.h"
],
- "test/net_test_task.c": [
+ "test/board/net_test_task.c": [
"string.h"
],
- "test/sd2506_test.h": [
+ "test/board/sd2506_test.h": [
"stdint.h"
],
- "test/sd2506_test_task.c": [
+ "test/board/sd2506_test_task.c": [
"stdint.h",
"string.h"
],
- "test/storage_test.h": [
+ "test/board/storage_test.h": [
"stdint.h"
],
- "test/storage_test_task.c": [
+ "test/board/storage_test_task.c": [
"string.h"
],
- "test/test_config.h": [
+ "test/board/test_config.h": [
"stdint.h"
]
},
@@ -41121,7 +41121,10 @@
"Drivers/BSP/NET/lftpd",
"Drivers/BSP/NETCFG",
"App",
+ "App/app",
+ "App/cfg",
"App/log",
+ "App/sync",
"App/task",
"App/util",
"Middlewares/Third_Party/FreeRTOS/Source/include",
@@ -41129,7 +41132,7 @@
"Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F",
"Lib/dhara",
"Lib/FatFs",
- "test",
+ "test/board",
"Lib/lvgl",
"Drivers/BSP/UI",
"Lib",
diff --git a/docs/images/引用关系图.svg b/docs/images/引用关系图.svg
index 16a2b0e3..7b964998 100644
--- a/docs/images/引用关系图.svg
+++ b/docs/images/引用关系图.svg
@@ -4,3503 +4,3503 @@
-