绘图流程沉淀为 draw-diagram skill,SVG 收拢到 docs/images/
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="246" viewBox="0 0 600 246" font-family="Microsoft YaHei, Segoe UI, PingFang SC, sans-serif">
|
||||
<rect x="0" y="0" width="600" height="246" fill="#ffffff"/>
|
||||
<text x="40" y="40" font-size="20" font-weight="700" fill="#0f172a">RemoDispBus 协议帧格式</text>
|
||||
<text x="40" y="64" font-size="13" fill="#64748b">整帧 = 4 + LEN + 1 字节 · 大端(网络字节序)· CRC = DATA 段逐字节异或(不含 TAG/CMD/LEN)</text>
|
||||
<line x1="40" y1="96" x2="560" y2="96" stroke="#cbd5e1" stroke-width="1"/>
|
||||
<line x1="40" y1="92" x2="40" y2="100" stroke="#94a3b8" stroke-width="1.5"/>
|
||||
<text x="40" y="88" font-size="12" fill="#94a3b8" text-anchor="middle">0</text>
|
||||
<line x1="92" y1="92" x2="92" y2="100" stroke="#94a3b8" stroke-width="1.5"/>
|
||||
<text x="92" y="88" font-size="12" fill="#94a3b8" text-anchor="middle">1</text>
|
||||
<line x1="144" y1="92" x2="144" y2="100" stroke="#94a3b8" stroke-width="1.5"/>
|
||||
<text x="144" y="88" font-size="12" fill="#94a3b8" text-anchor="middle">2</text>
|
||||
<line x1="196" y1="92" x2="196" y2="100" stroke="#94a3b8" stroke-width="1.5"/>
|
||||
<text x="196" y="88" font-size="12" fill="#94a3b8" text-anchor="middle">3</text>
|
||||
<line x1="248" y1="92" x2="248" y2="100" stroke="#94a3b8" stroke-width="1.5"/>
|
||||
<text x="248" y="88" font-size="12" fill="#94a3b8" text-anchor="middle">4</text>
|
||||
<line x1="508" y1="92" x2="508" y2="100" stroke="#94a3b8" stroke-width="1.5"/>
|
||||
<text x="508" y="88" font-size="12" fill="#94a3b8" text-anchor="middle">4+LEN</text>
|
||||
<line x1="560" y1="92" x2="560" y2="100" stroke="#94a3b8" stroke-width="1.5"/>
|
||||
<text x="560" y="88" font-size="12" fill="#94a3b8" text-anchor="middle">4+LEN+1</text>
|
||||
<rect x="40" y="116" width="52" height="74" fill="#eff6ff" stroke="#2563eb" stroke-width="1.5"/>
|
||||
<text x="66.0" y="146" font-size="15" font-weight="700" fill="#0f172a" text-anchor="middle">TAG</text>
|
||||
<text x="66.0" y="170" font-size="12" fill="#2563eb" text-anchor="middle">1 B</text>
|
||||
<rect x="92" y="116" width="52" height="74" fill="#eff6ff" stroke="#2563eb" stroke-width="1.5"/>
|
||||
<text x="118.0" y="146" font-size="15" font-weight="700" fill="#0f172a" text-anchor="middle">CMD</text>
|
||||
<text x="118.0" y="170" font-size="12" fill="#2563eb" text-anchor="middle">1 B</text>
|
||||
<rect x="144" y="116" width="52" height="74" fill="#f0fdfa" stroke="#0d9488" stroke-width="1.5"/>
|
||||
<text x="170.0" y="146" font-size="15" font-weight="700" fill="#0f172a" text-anchor="middle">LEN_H</text>
|
||||
<text x="170.0" y="170" font-size="12" fill="#0d9488" text-anchor="middle">1 B</text>
|
||||
<rect x="196" y="116" width="52" height="74" fill="#f0fdfa" stroke="#0d9488" stroke-width="1.5"/>
|
||||
<text x="222.0" y="146" font-size="15" font-weight="700" fill="#0f172a" text-anchor="middle">LEN_L</text>
|
||||
<text x="222.0" y="170" font-size="12" fill="#0d9488" text-anchor="middle">1 B</text>
|
||||
<rect x="248" y="116" width="260" height="74" fill="#fffbeb" stroke="#d97706" stroke-width="1.5"/>
|
||||
<text x="378.0" y="146" font-size="15" font-weight="700" fill="#0f172a" text-anchor="middle">DATA</text>
|
||||
<text x="378.0" y="170" font-size="12" fill="#d97706" text-anchor="middle">LEN B · 变长</text>
|
||||
<rect x="508" y="116" width="52" height="74" fill="#f0fdf4" stroke="#16a34a" stroke-width="1.5"/>
|
||||
<text x="534.0" y="146" font-size="15" font-weight="700" fill="#0f172a" text-anchor="middle">CRC</text>
|
||||
<text x="534.0" y="170" font-size="12" fill="#16a34a" text-anchor="middle">1 B</text>
|
||||
<text x="40" y="230" font-size="12" fill="#94a3b8">TAG:0xAA=客户端帧 / 0xBB=服务端帧 · DATA 为变长段(LEN 字节,0–255,图中按 5 字节示意)· 详见 docs/RemoDispBus协议与接收设计说明.md §1</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,89 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1400" height="802" viewBox="0 0 1400 802" font-family="Microsoft YaHei, Segoe UI, PingFang SC, sans-serif">
|
||||
<rect x="0" y="0" width="1400" height="802" fill="#ffffff"/>
|
||||
<text x="40" y="42" font-size="20" font-weight="700" fill="#0f172a">就绪屏障(Readiness Barrier)· 启动依赖链</text>
|
||||
<text x="40" y="68" font-size="13" fill="#64748b">CMSIS-RTOS2 Event Flags · 生产者置位声明「我好了」,消费者阻塞等待</text>
|
||||
<rect x="40" y="96" width="16" height="16" rx="4" fill="#ffffff" stroke="#2563eb" stroke-width="2"/>
|
||||
<text x="64" y="108" font-size="12" fill="#475569">生产者(set)</text>
|
||||
<rect x="178" y="96" width="16" height="16" rx="4" fill="#ffffff" stroke="#7c3aed" stroke-width="2"/>
|
||||
<text x="202" y="108" font-size="12" fill="#475569">消费者(wait)</text>
|
||||
<rect x="324" y="96" width="16" height="16" rx="4" fill="#ffffff" stroke="#16a34a" stroke-width="2"/>
|
||||
<text x="348" y="108" font-size="12" fill="#475569">事件位(Event Flag)</text>
|
||||
<circle cx="520" cy="104" r="6" fill="#0d9488"/>
|
||||
<text x="536" y="108" font-size="12" fill="#475569">All 汇合(等全部位)</text>
|
||||
<line x1="694" y1="104" x2="710" y2="104" stroke="#94a3b8" stroke-width="2.4" stroke-dasharray="7 5"/>
|
||||
<text x="718" y="108" font-size="12" fill="#475569">预留 / 未接入</text>
|
||||
<rect x="400" y="166" width="420" height="462" rx="14" fill="#f8fafc" stroke="#64748b" stroke-opacity="0.35"/>
|
||||
<text x="416" y="192" font-size="14" font-weight="700" fill="#334155">sys_evtHandle(Event Flags 事件组)</text>
|
||||
<rect x="414" y="200" width="392" height="84" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.6"/>
|
||||
<rect x="428" y="227" width="30" height="30" rx="7" fill="#16a34a"/>
|
||||
<text x="443" y="247" font-size="14" font-weight="700" fill="#ffffff" text-anchor="middle">1</text>
|
||||
<text x="470" y="236" font-size="14" font-weight="700" fill="#16a34a">bit1 · STORAGE_READY</text>
|
||||
<text x="470" y="258" font-size="12" fill="#64748b">defaultTask 置位 · netTask / ftpTask 等待</text>
|
||||
<rect x="414" y="310" width="392" height="84" rx="10" fill="#f0fdfa" stroke="#0d9488" stroke-opacity="0.6"/>
|
||||
<rect x="428" y="337" width="30" height="30" rx="7" fill="#0d9488"/>
|
||||
<text x="443" y="357" font-size="14" font-weight="700" fill="#ffffff" text-anchor="middle">0</text>
|
||||
<text x="470" y="346" font-size="14" font-weight="700" fill="#0d9488">bit0 · NET_READY</text>
|
||||
<text x="470" y="368" font-size="12" fill="#64748b">netTask 置位 · 4 个任务等待</text>
|
||||
<rect x="414" y="420" width="392" height="84" rx="10" fill="#fffbeb" stroke="#d97706" stroke-opacity="0.6"/>
|
||||
<rect x="428" y="447" width="30" height="30" rx="7" fill="#d97706"/>
|
||||
<text x="443" y="467" font-size="14" font-weight="700" fill="#ffffff" text-anchor="middle">2</text>
|
||||
<text x="470" y="456" font-size="14" font-weight="700" fill="#d97706">bit2 · FTP_READY</text>
|
||||
<text x="470" y="478" font-size="12" fill="#64748b">ftpTask 置位 · 预留消费者</text>
|
||||
<rect x="414" y="530" width="392" height="84" rx="10" fill="#f8fafc" stroke="#94a3b8" stroke-opacity="0.6"/>
|
||||
<rect x="428" y="557" width="30" height="30" rx="7" fill="#94a3b8"/>
|
||||
<text x="443" y="577" font-size="14" font-weight="700" fill="#ffffff" text-anchor="middle">3</text>
|
||||
<text x="470" y="566" font-size="14" font-weight="700" fill="#94a3b8">bit3 · TIMESYNC_READY</text>
|
||||
<text x="470" y="588" font-size="12" fill="#64748b">预留(尚未接入调度)</text>
|
||||
<rect x="40" y="200" width="290" height="84" rx="10" fill="#eff6ff" stroke="#2563eb" stroke-opacity="0.5"/>
|
||||
<text x="56" y="234" font-size="15" font-weight="700" fill="#0f172a">defaultTask</text>
|
||||
<text x="56" y="258" font-size="12" fill="#64748b">FatFS 挂载(f_mount / f_mkfs)</text>
|
||||
<polyline points="330.0,242.0 400.0,242.0" fill="none" stroke="#16a34a" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 400.0 242.0 L 389.0 247.5 L 389.0 236.5 z" fill="#16a34a"/>
|
||||
<text x="365" y="234.0" font-size="11.5" fill="#16a34a" text-anchor="middle">set bit1</text>
|
||||
<rect x="40" y="310" width="290" height="84" rx="10" fill="#eff6ff" stroke="#2563eb" stroke-opacity="0.5"/>
|
||||
<text x="56" y="344" font-size="15" font-weight="700" fill="#0f172a">netTask</text>
|
||||
<text x="56" y="368" font-size="12" fill="#64748b">net_stack_bring_up()</text>
|
||||
<polyline points="330.0,352.0 400.0,352.0" fill="none" stroke="#0d9488" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 400.0 352.0 L 389.0 357.5 L 389.0 346.5 z" fill="#0d9488"/>
|
||||
<text x="365" y="344.0" font-size="11.5" fill="#0d9488" text-anchor="middle">set bit0</text>
|
||||
<rect x="40" y="420" width="290" height="84" rx="10" fill="#eff6ff" stroke="#2563eb" stroke-opacity="0.5"/>
|
||||
<text x="56" y="454" font-size="15" font-weight="700" fill="#0f172a">ftpTask</text>
|
||||
<text x="56" y="478" font-size="12" fill="#64748b">lftpd_start("/", 21)</text>
|
||||
<polyline points="330.0,462.0 400.0,462.0" fill="none" stroke="#d97706" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 400.0 462.0 L 389.0 467.5 L 389.0 456.5 z" fill="#d97706"/>
|
||||
<text x="365" y="454.0" font-size="11.5" fill="#d97706" text-anchor="middle">set bit2</text>
|
||||
<rect x="910" y="200" width="450" height="84" rx="10" fill="#f5f3ff" stroke="#7c3aed" stroke-opacity="0.5"/>
|
||||
<text x="926" y="234" font-size="15" font-weight="700" fill="#0f172a">netTask</text>
|
||||
<text x="926" y="258" font-size="12" fill="#64748b">wait bit1 · ≤10s</text>
|
||||
<rect x="910" y="310" width="450" height="84" rx="10" fill="#f5f3ff" stroke="#7c3aed" stroke-opacity="0.5"/>
|
||||
<text x="926" y="344" font-size="15" font-weight="700" fill="#0f172a">ftpTask</text>
|
||||
<text x="926" y="368" font-size="12" fill="#64748b">wait bit0 + bit1 · All</text>
|
||||
<rect x="910" y="420" width="450" height="84" rx="10" fill="#f5f3ff" stroke="#7c3aed" stroke-opacity="0.5"/>
|
||||
<text x="926" y="454" font-size="15" font-weight="700" fill="#0f172a">uiTask</text>
|
||||
<text x="926" y="478" font-size="12" fill="#64748b">wait bit0 · Forever</text>
|
||||
<rect x="910" y="530" width="450" height="84" rx="10" fill="#f5f3ff" stroke="#7c3aed" stroke-opacity="0.5"/>
|
||||
<text x="926" y="564" font-size="15" font-weight="700" fill="#0f172a">timeSyncTask</text>
|
||||
<text x="926" y="588" font-size="12" fill="#64748b">wait bit0 · Forever</text>
|
||||
<rect x="910" y="640" width="450" height="84" rx="10" fill="#f5f3ff" stroke="#7c3aed" stroke-opacity="0.5"/>
|
||||
<text x="926" y="674" font-size="15" font-weight="700" fill="#0f172a">testTask</text>
|
||||
<text x="926" y="698" font-size="12" fill="#64748b">wait bit0 · NET 模式</text>
|
||||
<polyline points="820.0,242.0 910.0,242.0" fill="none" stroke="#16a34a" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 910.0 242.0 L 899.0 247.5 L 899.0 236.5 z" fill="#16a34a"/>
|
||||
<text x="865" y="234.0" font-size="11.5" fill="#16a34a" text-anchor="middle">wait</text>
|
||||
<polyline points="832.0,242.0 832.0,352.0" fill="none" stroke="#16a34a" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<circle cx="832" cy="352.0" r="5.5" fill="#0d9488"/>
|
||||
<text x="841" y="344.0" font-size="11.5" font-weight="700" fill="#0d9488">All</text>
|
||||
<polyline points="820.0,352.0 862.0,352.0" fill="none" stroke="#0d9488" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 862.0 352.0 L 851.0 357.5 L 851.0 346.5 z" fill="#0d9488"/>
|
||||
<polyline points="862.0,352.0 862.0,682.0" fill="none" stroke="#0d9488" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<polyline points="862.0,352.0 910.0,352.0" fill="none" stroke="#0d9488" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 910.0 352.0 L 899.0 357.5 L 899.0 346.5 z" fill="#0d9488"/>
|
||||
<polyline points="862.0,462.0 910.0,462.0" fill="none" stroke="#0d9488" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 910.0 462.0 L 899.0 467.5 L 899.0 456.5 z" fill="#0d9488"/>
|
||||
<polyline points="862.0,572.0 910.0,572.0" fill="none" stroke="#0d9488" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 910.0 572.0 L 899.0 577.5 L 899.0 566.5 z" fill="#0d9488"/>
|
||||
<polyline points="862.0,682.0 910.0,682.0" fill="none" stroke="#0d9488" stroke-width="2.2" stroke-linejoin="round"/>
|
||||
<path d="M 910.0 682.0 L 899.0 687.5 L 899.0 676.5 z" fill="#0d9488"/>
|
||||
<text transform="rotate(-90 850.0 517.0)" x="850.0" y="517.0" font-size="11.5" fill="#0d9488" text-anchor="middle">wait bit0</text>
|
||||
<text x="40" y="784" font-size="12" fill="#94a3b8">生产者与消费者互不知晓,只经事件组解耦;新增子系统 = 新 bit + 各自 wait/set,不改已有任务。详见 docs/项目启动顺序管理.md</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.3 KiB |
@@ -0,0 +1,152 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 745" width="1600" height="1490" font-family="Microsoft YaHei, SimSun, sans-serif">
|
||||
<rect width="800" height="745" fill="#ffffff"/>
|
||||
<text x="10.0" y="24.0" font-size="14" text-anchor="start" fill="#000" font-weight="bold">级联框几何计算 —— ui_menu_view_frame_build():先算三个数(宽 w / 位置 x,y / 高 h),再照数建对象</text>
|
||||
<rect x="10.0" y="40.0" width="780.0" height="208.0" fill="none" stroke="#ddd" stroke-width="1"/>
|
||||
<text x="18.0" y="58.0" font-size="12" text-anchor="start" fill="#000" font-weight="bold">① 框宽 w = 最宽行 + 2×边框:同框各行宽可以不同,框宽只跟“最宽的一行”走</text>
|
||||
<rect x="30.0" y="80.0" width="66.0" height="32.0" fill="#fff" stroke="#000" stroke-width="1.5"/>
|
||||
<line x1="31.0" y1="96.0" x2="95.0" y2="96.0" stroke="#ccc" stroke-width="1"/>
|
||||
<rect x="33.0" y="82.0" width="12.0" height="13.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<rect x="45.0" y="82.0" width="12.0" height="13.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<rect x="57.0" y="82.0" width="12.0" height="13.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<rect x="69.0" y="82.0" width="12.0" height="13.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<polygon points="83.0,83.5 83.0,93.5 93.0,88.5" fill="#000" stroke="none" stroke-width="1"/>
|
||||
<rect x="33.0" y="97.0" width="12.0" height="13.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<rect x="45.0" y="97.0" width="12.0" height="13.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<rect x="57.0" y="97.0" width="12.0" height="13.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<text x="30.0" y="122.0" font-size="10" text-anchor="start" fill="#000">2 行框(1× 原尺寸):行 1 = 4字+▶(最宽),行 2 = 3字</text>
|
||||
<line x1="100.0" y1="80.0" x2="100.0" y2="112.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="96.0" y1="80.0" x2="104.0" y2="80.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="96.0" y1="112.0" x2="104.0" y2="112.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="106.0" y="96.0" font-size="10" text-anchor="start" fill="#444">框宽 66</text>
|
||||
<line x1="96.0" y1="88.0" x2="205.0" y2="104.0" stroke="#999" stroke-width="1" stroke-dasharray="4 3"/>
|
||||
<text x="140.0" y="92.0" font-size="10" text-anchor="start" fill="#666">行 1 剖面(×4 放大)</text>
|
||||
<rect x="210.0" y="80.0" width="264.0" height="68.0" fill="#fff" stroke="#000" stroke-width="2"/>
|
||||
<rect x="210.0" y="80.0" width="4.0" height="68.0" fill="#d9d9d9" stroke="none" stroke-width="1"/>
|
||||
<rect x="470.0" y="80.0" width="4.0" height="68.0" fill="#d9d9d9" stroke="none" stroke-width="1"/>
|
||||
<rect x="214.0" y="84.0" width="256.0" height="4.0" fill="#f2f2f2" stroke="none" stroke-width="1"/>
|
||||
<rect x="214.0" y="140.0" width="256.0" height="4.0" fill="#f2f2f2" stroke="none" stroke-width="1"/>
|
||||
<rect x="222.0" y="88.0" width="48.0" height="52.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<rect x="270.0" y="88.0" width="48.0" height="52.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<rect x="318.0" y="88.0" width="48.0" height="52.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<rect x="366.0" y="88.0" width="48.0" height="52.0" fill="none" stroke="#888" stroke-width="1"/>
|
||||
<polygon points="423.0,97.0 423.0,135.0 459.0,116.0" fill="#000" stroke="none" stroke-width="1"/>
|
||||
<line x1="210.0" y1="156.0" x2="214.0" y2="156.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="210.0" y1="153.0" x2="210.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="214.0" y1="153.0" x2="214.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="212.0" y="171.0" font-size="9" text-anchor="middle" fill="#444">边框1</text>
|
||||
<line x1="214.0" y1="156.0" x2="222.0" y2="156.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="214.0" y1="153.0" x2="214.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="222.0" y1="153.0" x2="222.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="218.0" y="186.0" font-size="9" text-anchor="middle" fill="#444">留白2</text>
|
||||
<line x1="222.0" y1="156.0" x2="414.0" y2="156.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="222.0" y1="153.0" x2="222.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="414.0" y1="153.0" x2="414.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="318.0" y="171.0" font-size="9" text-anchor="middle" fill="#444">文本 4×12=48</text>
|
||||
<line x1="414.0" y1="156.0" x2="422.0" y2="156.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="414.0" y1="153.0" x2="414.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="422.0" y1="153.0" x2="422.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="418.0" y="186.0" font-size="9" text-anchor="middle" fill="#444">间距2</text>
|
||||
<line x1="422.0" y1="156.0" x2="462.0" y2="156.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="422.0" y1="153.0" x2="422.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="462.0" y1="153.0" x2="462.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="442.0" y="171.0" font-size="9" text-anchor="middle" fill="#444">▶10</text>
|
||||
<line x1="462.0" y1="156.0" x2="470.0" y2="156.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="462.0" y1="153.0" x2="462.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="470.0" y1="153.0" x2="470.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="466.0" y="186.0" font-size="9" text-anchor="middle" fill="#444">留白2</text>
|
||||
<line x1="470.0" y1="156.0" x2="474.0" y2="156.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="470.0" y1="153.0" x2="470.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="474.0" y1="153.0" x2="474.0" y2="159.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="472.0" y="171.0" font-size="9" text-anchor="middle" fill="#444">边框1</text>
|
||||
<text x="210.0" y="207.0" font-size="11" text-anchor="start" fill="#000" font-weight="bold">w = 2 + 48 + 2 + 10 + 2 + 2×1 = 66(最宽行决定)</text>
|
||||
<text x="210.0" y="224.0" font-size="10" text-anchor="start" fill="#555">窄行(如 3 字)左对齐、右侧留空,框宽不变</text>
|
||||
<rect x="10.0" y="258.0" width="385.0" height="232.0" fill="none" stroke="#ddd" stroke-width="1"/>
|
||||
<text x="18.0" y="276.0" font-size="12" text-anchor="start" fill="#000" font-weight="bold">② X 定位:子框左缘 = 父框右缘(共享 1px 边框列)</text>
|
||||
<rect x="40.0" y="298.0" width="66.0" height="77.0" fill="#fff" stroke="#000" stroke-width="1.5"/>
|
||||
<rect x="105.0" y="298.0" width="42.0" height="77.0" fill="#fff" stroke="#000" stroke-width="1.5"/>
|
||||
<line x1="41.0" y1="314.0" x2="105.0" y2="314.0" stroke="#e5e5e5" stroke-width="1"/>
|
||||
<line x1="106.0" y1="314.0" x2="146.0" y2="314.0" stroke="#e5e5e5" stroke-width="1"/>
|
||||
<line x1="41.0" y1="329.0" x2="105.0" y2="329.0" stroke="#e5e5e5" stroke-width="1"/>
|
||||
<line x1="106.0" y1="329.0" x2="146.0" y2="329.0" stroke="#e5e5e5" stroke-width="1"/>
|
||||
<line x1="41.0" y1="344.0" x2="105.0" y2="344.0" stroke="#e5e5e5" stroke-width="1"/>
|
||||
<line x1="106.0" y1="344.0" x2="146.0" y2="344.0" stroke="#e5e5e5" stroke-width="1"/>
|
||||
<line x1="41.0" y1="359.0" x2="105.0" y2="359.0" stroke="#e5e5e5" stroke-width="1"/>
|
||||
<line x1="106.0" y1="359.0" x2="146.0" y2="359.0" stroke="#e5e5e5" stroke-width="1"/>
|
||||
<line x1="40.0" y1="390.0" x2="105.0" y2="390.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="40.0" y1="387.0" x2="40.0" y2="393.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="105.0" y1="387.0" x2="105.0" y2="393.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="72.0" y="406.0" font-size="10" text-anchor="middle" fill="#444">65 = 父.w − 1</text>
|
||||
<text x="18.0" y="428.0" font-size="10" text-anchor="start" fill="#000">减的 1 = 父框右边框列:子框左边框与它重叠为同一 1px</text>
|
||||
<text x="18.0" y="442.0" font-size="10" text-anchor="start" fill="#000">→ 零间隙、边框不重画,逐级向右“生长”</text>
|
||||
<rect x="150.0" y="452.0" width="210.0" height="30.0" fill="#fff" stroke="#999" stroke-width="1"/>
|
||||
<rect x="240.0" y="452.0" width="25.0" height="30.0" fill="#888" stroke="none" stroke-width="1"/>
|
||||
<text x="195.0" y="471.0" font-size="10" text-anchor="middle" fill="#000">父框</text>
|
||||
<text x="307.0" y="471.0" font-size="10" text-anchor="middle" fill="#000">子框</text>
|
||||
<text x="252.0" y="448.0" font-size="9" text-anchor="middle" fill="#555">共享边框列 1px(×25 放大)</text>
|
||||
<line x1="106.0" y1="375.0" x2="245.0" y2="452.0" stroke="#999" stroke-width="1" stroke-dasharray="4 3"/>
|
||||
<rect x="410.0" y="258.0" width="380.0" height="232.0" fill="none" stroke="#ddd" stroke-width="1"/>
|
||||
<text x="418.0" y="276.0" font-size="12" text-anchor="start" fill="#000" font-weight="bold">③ Y 定位(默认):顶边 = 父“选中行”行顶</text>
|
||||
<rect x="430.0" y="288.0" width="160.0" height="160.0" fill="#000" stroke="#000" stroke-width="1.5"/>
|
||||
<text x="585.0" y="300.0" font-size="8" text-anchor="end" fill="#888">屏 160×160</text>
|
||||
<rect x="434.0" y="298.0" width="42.0" height="62.0" fill="#000" stroke="#fff" stroke-width="1.5"/>
|
||||
<line x1="435.0" y1="314.0" x2="475.0" y2="314.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="435.0" y1="329.0" x2="475.0" y2="329.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="435.0" y1="344.0" x2="475.0" y2="344.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<rect x="435.0" y="314.0" width="40.0" height="15.0" fill="#fff" stroke="none" stroke-width="1"/>
|
||||
<text x="438.0" y="309.0" font-size="8" text-anchor="start" fill="#fff">参数</text>
|
||||
<text x="438.0" y="324.0" font-size="8" text-anchor="start" fill="#000">定值</text>
|
||||
<text x="438.0" y="339.0" font-size="8" text-anchor="start" fill="#fff">控制字</text>
|
||||
<text x="438.0" y="354.0" font-size="8" text-anchor="start" fill="#fff">软压板</text>
|
||||
<rect x="475.0" y="314.0" width="42.0" height="62.0" fill="#000" stroke="#fff" stroke-width="1.5"/>
|
||||
<line x1="476.0" y1="330.0" x2="516.0" y2="330.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="476.0" y1="345.0" x2="516.0" y2="345.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="476.0" y1="360.0" x2="516.0" y2="360.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<rect x="476.0" y="315.0" width="40.0" height="15.0" fill="#fff" stroke="none" stroke-width="1"/>
|
||||
<text x="479.0" y="324.0" font-size="8" text-anchor="start" fill="#000">参数</text>
|
||||
<text x="479.0" y="339.0" font-size="8" text-anchor="start" fill="#fff">定值</text>
|
||||
<text x="479.0" y="354.0" font-size="8" text-anchor="start" fill="#fff">控制字</text>
|
||||
<text x="479.0" y="369.0" font-size="8" text-anchor="start" fill="#fff">软压板</text>
|
||||
<line x1="430.0" y1="314.0" x2="592.0" y2="314.0" stroke="#e33" stroke-width="1.2" stroke-dasharray="5 3"/>
|
||||
<text x="598.0" y="317.0" font-size="10" text-anchor="start" fill="#c22">顶边 = 选中行行顶</text>
|
||||
<text x="430.0" y="462.0" font-size="10" text-anchor="start" fill="#000">y = 父.y + 1 + 父sel×15 → 26 = 10 + 1 + 1×15(屏内坐标)</text>
|
||||
<text x="430.0" y="477.0" font-size="10" text-anchor="start" fill="#555">选中行以下空间够 → 子框原样落下,不上移</text>
|
||||
<rect x="10.0" y="500.0" width="780.0" height="240.0" fill="none" stroke="#ddd" stroke-width="1"/>
|
||||
<text x="18.0" y="518.0" font-size="12" text-anchor="start" fill="#000" font-weight="bold">④ Y 定位(溢出):整框上移,底边对齐“选中行”行底</text>
|
||||
<rect x="40.0" y="530.0" width="160.0" height="160.0" fill="#000" stroke="#000" stroke-width="1.5"/>
|
||||
<rect x="44.0" y="539.0" width="66.0" height="107.0" fill="#000" stroke="#fff" stroke-width="1.5"/>
|
||||
<line x1="45.0" y1="555.0" x2="109.0" y2="555.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="45.0" y1="570.0" x2="109.0" y2="570.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="45.0" y1="585.0" x2="109.0" y2="585.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="45.0" y1="600.0" x2="109.0" y2="600.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="45.0" y1="615.0" x2="109.0" y2="615.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="45.0" y1="630.0" x2="109.0" y2="630.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<rect x="45.0" y="615.0" width="64.0" height="15.0" fill="#fff" stroke="none" stroke-width="1"/>
|
||||
<text x="47.0" y="625.0" font-size="8" text-anchor="start" fill="#000">选中行</text>
|
||||
<rect x="109.0" y="615.0" width="42.0" height="92.0" fill="none" stroke="#e33" stroke-width="1.2" stroke-dasharray="5 3"/>
|
||||
<rect x="109.0" y="690.0" width="42.0" height="17.0" fill="#e33" stroke="none" stroke-width="1" opacity="0.35"/>
|
||||
<rect x="109.0" y="538.0" width="42.0" height="92.0" fill="#000" stroke="#fff" stroke-width="1.5"/>
|
||||
<line x1="110.0" y1="554.0" x2="150.0" y2="554.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="110.0" y1="569.0" x2="150.0" y2="569.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="110.0" y1="584.0" x2="150.0" y2="584.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="110.0" y1="599.0" x2="150.0" y2="599.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<line x1="110.0" y1="614.0" x2="150.0" y2="614.0" stroke="#3a3a3a" stroke-width="1"/>
|
||||
<rect x="110.0" y="539.0" width="40.0" height="15.0" fill="#fff" stroke="none" stroke-width="1"/>
|
||||
<text x="112.0" y="549.0" font-size="8" text-anchor="start" fill="#000">选中行</text>
|
||||
<line x1="44.0" y1="630.0" x2="155.0" y2="630.0" stroke="#e33" stroke-width="1.2" stroke-dasharray="5 3"/>
|
||||
<text x="158.0" y="627.0" font-size="10" text-anchor="start" fill="#c22">底边 = 选中行行底</text>
|
||||
<line x1="101.0" y1="538.0" x2="101.0" y2="615.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="98.0" y1="538.0" x2="104.0" y2="538.0" stroke="#444" stroke-width="1"/>
|
||||
<line x1="98.0" y1="615.0" x2="104.0" y2="615.0" stroke="#444" stroke-width="1"/>
|
||||
<text x="94.0" y="582.0" font-size="9" text-anchor="end" fill="#444">上移 77</text>
|
||||
<text x="240.0" y="545.0" font-size="12" text-anchor="start" fill="#000" font-weight="bold">上移公式</text>
|
||||
<text x="240.0" y="568.0" font-size="11" text-anchor="start" fill="#000">触发:y + h > 160(顶对齐后底边超屏)</text>
|
||||
<text x="240.0" y="589.0" font-size="11.5" text-anchor="start" fill="#000" font-weight="bold">y = 选中行行顶 + ROW_H − h</text>
|
||||
<text x="240.0" y="609.0" font-size="10.5" text-anchor="start" fill="#555">本例(屏内坐标):85 + 92 = 177 > 160 → y = 85 + 15 − 92 = 8</text>
|
||||
<text x="240.0" y="637.0" font-size="11" text-anchor="start" fill="#000" font-weight="bold">为什么对齐“行底”而不贴屏底:</text>
|
||||
<text x="240.0" y="657.0" font-size="10.5" text-anchor="start" fill="#000">子框挂在父框“选中行”下沿——选中行不动,子框位置就不动;</text>
|
||||
<text x="240.0" y="673.0" font-size="10.5" text-anchor="start" fill="#000">若贴屏底,父框选中行一移,子框位置跟着乱跳(父子脱钩)。</text>
|
||||
<text x="240.0" y="699.0" font-size="10" text-anchor="start" fill="#555">兜底:上移后 y < 0 → 钳 0;仍溢出 → 框高截到可见区、行在框内滚动(§5.4 AUTO 滚动条)</text>
|
||||
<text x="240.0" y="716.0" font-size="9.5" text-anchor="start" fill="#c22">虚线红框 = 顶对齐(会超屏 17px);实线框 = 上移 77 后</text>
|
||||
<text x="240.0" y="730.0" font-size="9.5" text-anchor="start" fill="#555">红底 = 超屏部分(由截断/框内滚动兜底)</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 300" font-family="sans-serif">
|
||||
<rect x="0" y="0" width="800" height="300" fill="#ffffff"/>
|
||||
<text x="24" y="15" font-size="13" fill="#000000">横向级联子框总览(示例:主界面 → 参数定值 → 整定;按 §5.2 常量、§5.3 公式绘制,设备 px)</text>
|
||||
<rect x="24" y="24" width="160" height="160" fill="#000000" stroke="#ffffff" stroke-width="1"/>
|
||||
<line x1="31" y1="31" x2="40" y2="41" stroke="#ffffff" stroke-width="3"/>
|
||||
<line x1="182" y1="31" x2="169" y2="41" stroke="#ffffff" stroke-width="3"/>
|
||||
<line x1="40" y1="41" x2="169" y2="41" stroke="#ffffff" stroke-width="2"/>
|
||||
<text x="41" y="55" font-size="11" fill="#ffffff">当前模式:无模式</text>
|
||||
<rect x="24" y="68" width="66" height="107" fill="none" stroke="#ffffff" stroke-width="1"/>
|
||||
<text x="26" y="81" font-size="12" fill="#ffffff">装</text>
|
||||
<text x="38" y="81" font-size="12" fill="#ffffff">置</text>
|
||||
<text x="50" y="81" font-size="12" fill="#ffffff">信</text>
|
||||
<text x="62" y="81" font-size="12" fill="#ffffff">息</text>
|
||||
<text x="26" y="96" font-size="12" fill="#ffffff">实</text>
|
||||
<text x="38" y="96" font-size="12" fill="#ffffff">时</text>
|
||||
<text x="50" y="96" font-size="12" fill="#ffffff">数</text>
|
||||
<text x="62" y="96" font-size="12" fill="#ffffff">据</text>
|
||||
<text x="76" y="96" font-size="10" fill="#ffffff">▶</text>
|
||||
<rect x="25" y="99" width="64" height="15" fill="#ffffff"/>
|
||||
<text x="26" y="111" font-size="12" fill="#000000">参</text>
|
||||
<text x="38" y="111" font-size="12" fill="#000000">数</text>
|
||||
<text x="50" y="111" font-size="12" fill="#000000">定</text>
|
||||
<text x="62" y="111" font-size="12" fill="#000000">值</text>
|
||||
<text x="76" y="111" font-size="10" fill="#000000">▶</text>
|
||||
<text x="26" y="126" font-size="12" fill="#ffffff">三</text>
|
||||
<text x="38" y="126" font-size="12" fill="#ffffff">遥</text>
|
||||
<text x="50" y="126" font-size="12" fill="#ffffff">设</text>
|
||||
<text x="62" y="126" font-size="12" fill="#ffffff">置</text>
|
||||
<text x="76" y="126" font-size="10" fill="#ffffff">▶</text>
|
||||
<text x="26" y="141" font-size="12" fill="#ffffff">装</text>
|
||||
<text x="38" y="141" font-size="12" fill="#ffffff">置</text>
|
||||
<text x="50" y="141" font-size="12" fill="#ffffff">维</text>
|
||||
<text x="62" y="141" font-size="12" fill="#ffffff">护</text>
|
||||
<text x="76" y="141" font-size="10" fill="#ffffff">▶</text>
|
||||
<text x="26" y="156" font-size="12" fill="#ffffff">通</text>
|
||||
<text x="38" y="156" font-size="12" fill="#ffffff">讯</text>
|
||||
<text x="50" y="156" font-size="12" fill="#ffffff">参</text>
|
||||
<text x="62" y="156" font-size="12" fill="#ffffff">数</text>
|
||||
<text x="76" y="156" font-size="10" fill="#ffffff">▶</text>
|
||||
<text x="26" y="171" font-size="12" fill="#ffffff">记</text>
|
||||
<text x="38" y="171" font-size="12" fill="#ffffff">录</text>
|
||||
<text x="50" y="171" font-size="12" fill="#ffffff">查</text>
|
||||
<text x="62" y="171" font-size="12" fill="#ffffff">询</text>
|
||||
<text x="76" y="171" font-size="10" fill="#ffffff">▶</text>
|
||||
<rect x="89" y="99" width="42" height="32" fill="none" stroke="#ffffff" stroke-width="1"/>
|
||||
<rect x="90" y="100" width="40" height="15" fill="#ffffff"/>
|
||||
<text x="91" y="112" font-size="12" fill="#000000">整</text>
|
||||
<text x="103" y="112" font-size="12" fill="#000000">定</text>
|
||||
<text x="117" y="112" font-size="10" fill="#000000">▶</text>
|
||||
<text x="91" y="127" font-size="12" fill="#ffffff">查</text>
|
||||
<text x="103" y="127" font-size="12" fill="#ffffff">看</text>
|
||||
<text x="117" y="127" font-size="10" fill="#ffffff">▶</text>
|
||||
<rect x="130" y="100" width="42" height="62" fill="none" stroke="#ffffff" stroke-width="1"/>
|
||||
<rect x="131" y="101" width="40" height="15" fill="#ffffff"/>
|
||||
<text x="132" y="113" font-size="12" fill="#000000">参</text>
|
||||
<text x="144" y="113" font-size="12" fill="#000000">数</text>
|
||||
<text x="132" y="128" font-size="12" fill="#ffffff">定</text>
|
||||
<text x="144" y="128" font-size="12" fill="#ffffff">值</text>
|
||||
<text x="132" y="143" font-size="12" fill="#ffffff">控</text>
|
||||
<text x="144" y="143" font-size="12" fill="#ffffff">制</text>
|
||||
<text x="156" y="143" font-size="12" fill="#ffffff">字</text>
|
||||
<text x="132" y="158" font-size="12" fill="#ffffff">软</text>
|
||||
<text x="144" y="158" font-size="12" fill="#ffffff">压</text>
|
||||
<text x="156" y="158" font-size="12" fill="#ffffff">板</text>
|
||||
<line x1="89" y1="99" x2="89" y2="131" stroke="#888888" stroke-width="2"/>
|
||||
<line x1="130" y1="100" x2="130" y2="162" stroke="#888888" stroke-width="2"/>
|
||||
<circle cx="57" cy="68" r="2.5" fill="#888888"/>
|
||||
<line x1="208" y1="33" x2="57" y2="68" stroke="#bbbbbb" stroke-width="1"/>
|
||||
<text x="212" y="36" font-size="11" fill="#000000">① 根框 (0, 44)</text>
|
||||
<text x="212" y="49" font-size="11" fill="#555555">w = 66(最宽行 = 4 字 + 箭头);h = 7×15 + 2 = 107</text>
|
||||
<circle cx="57" cy="106" r="2.5" fill="#888888"/>
|
||||
<line x1="208" y1="63" x2="57" y2="106" stroke="#bbbbbb" stroke-width="1"/>
|
||||
<text x="212" y="66" font-size="11" fill="#000000">② 选中行 = 第 2 行“参数定值”</text>
|
||||
<text x="212" y="79" font-size="11" fill="#555555">整行反色:白底黑字,箭头随反色变黑</text>
|
||||
<circle cx="96" cy="99" r="2.5" fill="#888888"/>
|
||||
<line x1="208" y1="93" x2="96" y2="99" stroke="#bbbbbb" stroke-width="1"/>
|
||||
<text x="212" y="96" font-size="11" fill="#000000">③ y_mid = 44 + 1 + 2×15 = 75</text>
|
||||
<text x="212" y="109" font-size="11" fill="#555555">= 父框“选中行”行顶(顶对齐)</text>
|
||||
<circle cx="89" cy="115" r="2.5" fill="#888888"/>
|
||||
<line x1="208" y1="123" x2="89" y2="115" stroke="#bbbbbb" stroke-width="1"/>
|
||||
<text x="212" y="126" font-size="11" fill="#000000">④ x_mid = 0 + 66 − 1 = 65</text>
|
||||
<text x="212" y="139" font-size="11" fill="#555555">子框左缘 = 父框右缘:共享边框列、零间隙</text>
|
||||
<circle cx="136" cy="100" r="2.5" fill="#888888"/>
|
||||
<line x1="208" y1="153" x2="136" y2="100" stroke="#bbbbbb" stroke-width="1"/>
|
||||
<text x="212" y="156" font-size="11" fill="#000000">⑤ y_right = 75 + 1 + 0×15 = 76</text>
|
||||
<text x="212" y="169" font-size="11" fill="#555555">= “整定”行顶(中框首行 → 本例与中框顶同高)</text>
|
||||
<circle cx="110" cy="131" r="2.5" fill="#888888"/>
|
||||
<line x1="208" y1="183" x2="110" y2="131" stroke="#bbbbbb" stroke-width="1"/>
|
||||
<text x="212" y="186" font-size="11" fill="#000000">⑥ h = 行数 × 15 + 2(按内容,不强顶屏底)</text>
|
||||
<text x="212" y="199" font-size="11" fill="#555555">中框 = 32;右框 = 62(底边 138 < 160,无上移)</text>
|
||||
<circle cx="148" cy="143" r="2.5" fill="#888888"/>
|
||||
<line x1="208" y1="213" x2="148" y2="143" stroke="#bbbbbb" stroke-width="1"/>
|
||||
<text x="212" y="216" font-size="11" fill="#000000">⑦ x_right = 65 + 42 − 1 = 106</text>
|
||||
<text x="212" y="229" font-size="11" fill="#555555">w = 42(最宽行 = 3 字无箭头)</text>
|
||||
<rect x="24" y="252" width="752" height="40" fill="#f5f5f5" stroke="#dddddd" stroke-width="1"/>
|
||||
<text x="32" y="268" font-size="11" fill="#333333">x = x_parent + w_parent − 1 y = y_parent + 1 + sel × 15 h = 行数 × 15 + 2 w = 2 + 文本_w + [2 + 10] + 2 + 2</text>
|
||||
<text x="32" y="284" font-size="11" fill="#333333">y + h > 160 → 整框上移使底边对齐父框“选中行”行底(顶部不钳制) 行超框高 → 框内 ↑/↓ 滚动</text>
|
||||
<text x="24" y="196" font-size="10" fill="#666666">屏幕 160×160(1bpp 单色,白 = 亮)</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.3 KiB |
@@ -0,0 +1,111 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1560" height="1000" viewBox="0 0 1560 1000" font-family="Microsoft YaHei, Segoe UI, PingFang SC, sans-serif">
|
||||
<rect x="0" y="0" width="1560" height="1000" fill="#ffffff"/>
|
||||
<text x="26" y="40" font-size="20" font-weight="700" fill="#0f172a">STM32F4-Base 项目分层架构</text>
|
||||
<text x="26" y="62" font-size="13" fill="#64748b">STM32F407ZGTx @168MHz · FreeRTOS V10.3.1 (CMSIS-RTOS2) · 上层只依赖相邻下层</text>
|
||||
<rect x="26" y="78" width="1508" height="92" rx="12" fill="#eff6ff" stroke="#2563eb" stroke-opacity="0.45"/>
|
||||
<text x="44" y="104" font-size="17" font-weight="700" fill="#2563eb">① 业务层</text>
|
||||
<text x="134" y="104" font-size="12" fill="#64748b">顶层共享配置 · 被 UI 与基础服务共用</text>
|
||||
<rect x="44" y="116" width="394" height="38" rx="8" fill="#ffffff" stroke="#2563eb" stroke-opacity="0.55"/>
|
||||
<text x="241" y="139" font-size="13" fill="#1e293b" text-anchor="middle">net_cfg(网口配置:IP/掩码/网关/MAC + Flash 持久化)</text>
|
||||
<rect x="26" y="214" width="741" height="188" rx="12" fill="#f5f3ff" stroke="#7c3aed" stroke-opacity="0.45"/>
|
||||
<text x="44" y="240" font-size="17" font-weight="700" fill="#7c3aed">② UI 层</text>
|
||||
<text x="129" y="240" font-size="12" fill="#64748b">Drivers/BSP/UI · 与 PC 模拟器共用</text>
|
||||
<rect x="44" y="252" width="162" height="38" rx="8" fill="#ffffff" stroke="#7c3aed" stroke-opacity="0.55"/>
|
||||
<text x="125" y="275" font-size="13" fill="#1e293b" text-anchor="middle">ui_port(显示端口)</text>
|
||||
<rect x="216" y="252" width="275" height="38" rx="8" fill="#ffffff" stroke="#7c3aed" stroke-opacity="0.55"/>
|
||||
<text x="354" y="275" font-size="13" fill="#1e293b" text-anchor="middle">ui_menu / ui_menu_view(级联菜单)</text>
|
||||
<rect x="502" y="252" width="179" height="38" rx="8" fill="#ffffff" stroke="#7c3aed" stroke-opacity="0.55"/>
|
||||
<text x="592" y="275" font-size="13" fill="#1e293b" text-anchor="middle">ui_menu_tab(菜单表)</text>
|
||||
<rect x="44" y="300" width="236" height="38" rx="8" fill="#ffffff" stroke="#7c3aed" stroke-opacity="0.55"/>
|
||||
<text x="162" y="323" font-size="13" fill="#1e293b" text-anchor="middle">ui_content_page(内容页框架)</text>
|
||||
<rect x="290" y="300" width="179" height="38" rx="8" fill="#ffffff" stroke="#7c3aed" stroke-opacity="0.55"/>
|
||||
<text x="380" y="323" font-size="13" fill="#1e293b" text-anchor="middle">ui_page_*(5 页插件)</text>
|
||||
<rect x="480" y="300" width="238" height="38" rx="8" fill="#ffffff" stroke="#7c3aed" stroke-opacity="0.55"/>
|
||||
<text x="599" y="323" font-size="13" fill="#1e293b" text-anchor="middle">ui_net_sink(远程显示 :7003)</text>
|
||||
<rect x="44" y="348" width="208" height="38" rx="8" fill="#ffffff" stroke="#7c3aed" stroke-opacity="0.55"/>
|
||||
<text x="148" y="371" font-size="13" fill="#1e293b" text-anchor="middle">ui_font_cn_12(中文字体)</text>
|
||||
<rect x="262" y="348" width="172" height="38" rx="8" fill="#ffffff" stroke="#7c3aed" stroke-opacity="0.55"/>
|
||||
<text x="348" y="371" font-size="13" fill="#1e293b" text-anchor="middle">ui_deco(浅 V 装饰)</text>
|
||||
<rect x="793" y="214" width="741" height="188" rx="12" fill="#f0fdfa" stroke="#0d9488" stroke-opacity="0.45"/>
|
||||
<text x="811" y="240" font-size="17" font-weight="700" fill="#0d9488">③ 基础服务层</text>
|
||||
<text x="935" y="240" font-size="12" fill="#64748b">应用侧服务 / 编排</text>
|
||||
<rect x="811" y="252" width="170" height="38" rx="8" fill="#ffffff" stroke="#0d9488" stroke-opacity="0.55"/>
|
||||
<text x="896" y="275" font-size="13" fill="#1e293b" text-anchor="middle">app_main(启动编排)</text>
|
||||
<rect x="991" y="252" width="177" height="38" rx="8" fill="#ffffff" stroke="#0d9488" stroke-opacity="0.55"/>
|
||||
<text x="1080" y="275" font-size="13" fill="#1e293b" text-anchor="middle">sys_clock(墙钟基准)</text>
|
||||
<rect x="1179" y="252" width="185" height="38" rx="8" fill="#ffffff" stroke="#0d9488" stroke-opacity="0.55"/>
|
||||
<text x="1271" y="275" font-size="13" fill="#1e293b" text-anchor="middle">sys_events(就绪屏障)</text>
|
||||
<rect x="811" y="300" width="162" height="38" rx="8" fill="#ffffff" stroke="#0d9488" stroke-opacity="0.55"/>
|
||||
<text x="892" y="323" font-size="13" fill="#1e293b" text-anchor="middle">app_cfg(编译开关)</text>
|
||||
<rect x="983" y="300" width="276" height="38" rx="8" fill="#ffffff" stroke="#0d9488" stroke-opacity="0.55"/>
|
||||
<text x="1122" y="323" font-size="13" fill="#1e293b" text-anchor="middle">task/(net · ui · adc* · rs485*)</text>
|
||||
<rect x="1270" y="300" width="148" height="38" rx="8" fill="#ffffff" stroke="#0d9488" stroke-opacity="0.55"/>
|
||||
<text x="1344" y="323" font-size="13" fill="#1e293b" text-anchor="middle">lftpd(FTP :21)</text>
|
||||
<rect x="811" y="348" width="227" height="38" rx="8" fill="#ffffff" stroke="#0d9488" stroke-opacity="0.55"/>
|
||||
<text x="924" y="371" font-size="13" fill="#1e293b" text-anchor="middle">time_sync(TCP 对时 :8888)</text>
|
||||
<rect x="26" y="446" width="1508" height="92" rx="12" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="44" y="472" font-size="17" font-weight="700" fill="#16a34a">④ 中间件层</text>
|
||||
<text x="151" y="472" font-size="12" fill="#64748b">通用库 / 协议栈</text>
|
||||
<rect x="44" y="484" width="284" height="38" rx="8" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="186" y="507" font-size="13" fill="#1e293b" text-anchor="middle">net_socket / net_select(BSD API)</text>
|
||||
<rect x="338" y="484" width="147" height="38" rx="8" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="412" y="507" font-size="13" fill="#1e293b" text-anchor="middle">FatFs(文件系统)</text>
|
||||
<rect x="495" y="484" width="186" height="38" rx="8" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="588" y="507" font-size="13" fill="#1e293b" text-anchor="middle">nand_ftl(dhara FTL)</text>
|
||||
<rect x="692" y="484" width="164" height="38" rx="8" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="774" y="507" font-size="13" fill="#1e293b" text-anchor="middle">LVGL v9.2(图形库)</text>
|
||||
<rect x="866" y="484" width="186" height="38" rx="8" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="960" y="507" font-size="13" fill="#1e293b" text-anchor="middle">util(crc · ringbuf)</text>
|
||||
<rect x="26" y="582" width="1508" height="92" rx="12" fill="#fffbeb" stroke="#d97706" stroke-opacity="0.45"/>
|
||||
<text x="44" y="608" font-size="17" font-weight="700" fill="#d97706">⑤ 驱动层</text>
|
||||
<text x="134" y="608" font-size="12" fill="#64748b">Drivers/BSP · 芯片时序/中断</text>
|
||||
<rect x="44" y="620" width="178" height="38" rx="8" fill="#ffffff" stroke="#d97706" stroke-opacity="0.55"/>
|
||||
<text x="133" y="643" font-size="13" fill="#1e293b" text-anchor="middle">ch395f(SPI2 + DMA)</text>
|
||||
<rect x="232" y="620" width="163" height="38" rx="8" fill="#ffffff" stroke="#d97706" stroke-opacity="0.55"/>
|
||||
<text x="314" y="643" font-size="13" fill="#1e293b" text-anchor="middle">gd5f2gq5ue(SPI1)</text>
|
||||
<rect x="406" y="620" width="195" height="38" rx="8" fill="#ffffff" stroke="#d97706" stroke-opacity="0.55"/>
|
||||
<text x="503" y="643" font-size="13" fill="#1e293b" text-anchor="middle">tpafe5160(并行 16 位)</text>
|
||||
<rect x="611" y="620" width="133" height="38" rx="8" fill="#ffffff" stroke="#d97706" stroke-opacity="0.55"/>
|
||||
<text x="677" y="643" font-size="13" fill="#1e293b" text-anchor="middle">sd2506(I2C1)</text>
|
||||
<rect x="754" y="620" width="171" height="38" rx="8" fill="#ffffff" stroke="#d97706" stroke-opacity="0.55"/>
|
||||
<text x="840" y="643" font-size="13" fill="#1e293b" text-anchor="middle">rs485(UART5 + DE)</text>
|
||||
<rect x="26" y="718" width="1508" height="92" rx="12" fill="#f1f5f9" stroke="#475569" stroke-opacity="0.45"/>
|
||||
<text x="44" y="744" font-size="17" font-weight="700" fill="#475569">⑥ 内核 / HAL</text>
|
||||
<text x="176" y="744" font-size="12" fill="#64748b">调度 · 外设抽象</text>
|
||||
<rect x="44" y="756" width="329" height="38" rx="8" fill="#ffffff" stroke="#475569" stroke-opacity="0.55"/>
|
||||
<text x="208" y="779" font-size="13" fill="#1e293b" text-anchor="middle">FreeRTOS V10.3.1(CMSIS-RTOS2 · heap_4)</text>
|
||||
<rect x="383" y="756" width="189" height="38" rx="8" fill="#ffffff" stroke="#475569" stroke-opacity="0.55"/>
|
||||
<text x="478" y="779" font-size="13" fill="#1e293b" text-anchor="middle">STM32 HAL(时基 TIM7)</text>
|
||||
<rect x="582" y="756" width="144" height="38" rx="8" fill="#ffffff" stroke="#475569" stroke-opacity="0.55"/>
|
||||
<text x="655" y="779" font-size="13" fill="#1e293b" text-anchor="middle">CMSIS / 启动文件</text>
|
||||
<rect x="26" y="854" width="1508" height="92" rx="12" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="44" y="880" font-size="17" font-weight="700" fill="#e11d48">⑦ 硬件</text>
|
||||
<text x="117" y="880" font-size="12" fill="#64748b">STM32F407ZGTx @168MHz</text>
|
||||
<rect x="44" y="892" width="179" height="38" rx="8" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="133" y="915" font-size="13" fill="#1e293b" text-anchor="middle">CH395F 以太网(SPI2)</text>
|
||||
<rect x="233" y="892" width="201" height="38" rx="8" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="334" y="915" font-size="13" fill="#1e293b" text-anchor="middle">GD5F2GQ5UE NAND(SPI1)</text>
|
||||
<rect x="445" y="892" width="182" height="38" rx="8" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="536" y="915" font-size="13" fill="#1e293b" text-anchor="middle">TPAFE5160 ADC(并行)</text>
|
||||
<rect x="637" y="892" width="163" height="38" rx="8" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="718" y="915" font-size="13" fill="#1e293b" text-anchor="middle">SD2506 RTC(I2C1)</text>
|
||||
<rect x="810" y="892" width="140" height="38" rx="8" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="881" y="915" font-size="13" fill="#1e293b" text-anchor="middle">RS-485(UART5)</text>
|
||||
<rect x="961" y="892" width="182" height="38" rx="8" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="1052" y="915" font-size="13" fill="#1e293b" text-anchor="middle">USART1 调试(115200)</text>
|
||||
<rect x="1153" y="892" width="77" height="38" rx="8" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="1192" y="915" font-size="13" fill="#1e293b" text-anchor="middle">6x LED</text>
|
||||
<line x1="780.0" y1="176.0" x2="780.0" y2="199.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 780.0 206.0 l -6 -9 h 12 z" fill="#94a3b8"/>
|
||||
<line x1="396.5" y1="408.0" x2="396.5" y2="431.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 396.5 438.0 l -6 -9 h 12 z" fill="#94a3b8"/>
|
||||
<line x1="1163.5" y1="408.0" x2="1163.5" y2="431.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 1163.5 438.0 l -6 -9 h 12 z" fill="#94a3b8"/>
|
||||
<line x1="780.0" y1="544.0" x2="780.0" y2="567.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 780.0 574.0 l -6 -9 h 12 z" fill="#94a3b8"/>
|
||||
<line x1="780.0" y1="680.0" x2="780.0" y2="703.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 780.0 710.0 l -6 -9 h 12 z" fill="#94a3b8"/>
|
||||
<line x1="780.0" y1="816.0" x2="780.0" y2="839.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 780.0 846.0 l -6 -9 h 12 z" fill="#94a3b8"/>
|
||||
<text x="26" y="982" font-size="12" fill="#94a3b8">上层只依赖相邻下层(单向);UI 层与基础服务层同级并列,均使用顶层 net_cfg。跨层调用细节见 docs/项目架构总览.md §1.2 * 预留未接入调度</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
Reference in New Issue
Block a user