<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Hoshitori's Blog</title><link>https://blog.ctree.site/post/</link><description>Recent content in Posts on Hoshitori's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2026 10:56:41 +0800</lastBuildDate><atom:link href="https://blog.ctree.site/post/index.xml" rel="self" type="application/rss+xml"/><item><title>使用STM32CubeMX2+CLion时的注意事项</title><link>https://blog.ctree.site/p/stm32cubemx2-with-clion/</link><pubDate>Tue, 11 Aug 2026 10:56:41 +0800</pubDate><guid>https://blog.ctree.site/p/stm32cubemx2-with-clion/</guid><description>&lt;p&gt;最近入手了一块 NUCLEO-C562RE 开发板，需要用到新的 STM32CubeMX2 开发环境。本来想着都是 CMake 编译，环境也大差不差，依葫芦画瓢就可以了，结果出现编译失败和下载失败的问题。稍微踩坑后解决，故编写本文。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;本次复现环境为STM32CubeMX2 1.1.1 + CLion 2026.1.2&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="编译失败"&gt;编译失败
&lt;/h2&gt;&lt;h3 id="排查"&gt;排查
&lt;/h3&gt;&lt;p&gt;用 STM32CubeMX2 生成 CMake 工程后，使用 CLion 打开。加载生成的预设&lt;code&gt;debug_GCC_NUCLEO-C562RE&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;结果 CMake 输出报错：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-0-2"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CMake Error at CMakeLists.txt:12 (add_executable):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; No SOURCES given to target: STM32C5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CMakeLists.txt 长这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-1"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-1-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-1-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-1-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-1-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-1-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-1-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-1-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-1-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-1-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-1-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-1-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-1-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-1-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-1-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-1-15"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-CMake" data-lang="CMake"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cmake_minimum_required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;VERSION&lt;/span&gt; &lt;span class="s"&gt;3.30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_EXPORT_COMPILE_COMMANDS&lt;/span&gt; &lt;span class="s"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_C_COMPILER_FORCED&lt;/span&gt; &lt;span class="s"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_CXX_COMPILER_FORCED&lt;/span&gt; &lt;span class="s"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;cmake/target.cmake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;cmake/&lt;/span&gt;&lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOOLCHAIN_FILE&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;STM32C5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;add_executable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;STM32C5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;cmake/files.cmake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;cmake/flags.cmake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;cmake/components.cmake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;进入&lt;code&gt;cmake/files.cmake&lt;/code&gt;查看生成的文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-2"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-2-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-2-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-2-3"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-CMake" data-lang="CMake"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_BUILD_TYPE&lt;/span&gt; &lt;span class="s"&gt;STREQUAL&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;debug_GCC_NUCLEO-C562RE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="nb"&gt;target_sources&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="s"&gt;PRIVATE&lt;/span&gt; &lt;span class="s"&gt;main.c&lt;/span&gt; &lt;span class="s"&gt;main.h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;endif&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里看到 target_sources 前有一个条件判断，怀疑是&lt;code&gt;CMAKE_BUILD_TYPE&lt;/code&gt;出现问题。在 CMakeLists.txt 中加入 debug 语句 &lt;code&gt;message(&amp;quot;Build type: &amp;quot; ${CMAKE_BUILD_TYPE})&lt;/code&gt;后发现输出&lt;code&gt;Build type: ${presetName}&lt;/code&gt;。真相大白：就是因为&lt;code&gt;CMAKE_BUILD_TYPE&lt;/code&gt;被错误地设置了。&lt;/p&gt;
&lt;h3 id="原因"&gt;原因
&lt;/h3&gt;&lt;p&gt;CMakePresets.json 中定义的是&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-3"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-3-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-3-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-3-3"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;cacheVariables&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;CMAKE_BUILD_TYPE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${presetName}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CLion 把 preset 导入成只读的 CMake profile 时并没有解析这个 variable，Build type 直接变成了 &lt;code&gt;${presetName}&lt;/code&gt;，执行命令的时候就把这个字面量原样传给了 &lt;code&gt;-DCMAKE_BUILD_TYPE&lt;/code&gt;。&lt;code&gt;files.cmake&lt;/code&gt;中什么都没有添加。&lt;/p&gt;
&lt;h3 id="解决办法"&gt;解决办法
&lt;/h3&gt;&lt;p&gt;在 CLion 里复制一份 preset，然后手动改 CMAKE_BUILD_TYPE：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;code&gt;设置 -&amp;gt; 构建、执行、部署 -&amp;gt; CMake&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;选中 &lt;code&gt;debug_GCC_NUCLEO-C562RE 预设&lt;/code&gt;，点击复制&lt;/li&gt;
&lt;li&gt;复制出来的配置里把 &lt;code&gt;构建类型&lt;/code&gt; 改成 &lt;code&gt;debug_GCC_NUCLEO-C562RE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启用复制出来的配置&lt;/li&gt;
&lt;li&gt;重新加载 CMake 项目并编译&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/stm32cubemx2-with-clion/20260811113008.png"
width="984"
height="735"
srcset="https://blog.ctree.site/p/stm32cubemx2-with-clion/20260811113008_hu_b521bfa5c0e9b0d6.png 480w, https://blog.ctree.site/p/stm32cubemx2-with-clion/20260811113008_hu_897fec865fc90d7a.png 1024w"
loading="lazy"
alt="更改后的配置"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="321px"
&gt;&lt;/p&gt;
&lt;h2 id="下载失败"&gt;下载失败
&lt;/h2&gt;&lt;h3 id="排查-1"&gt;排查
&lt;/h3&gt;&lt;p&gt;编译没问题了，结果下载又报错……反复尝试后发现 STM32CubeProgrammer 能正常下载，但是 CLion 的 ST-LINK GDB Server 连不上。&lt;/p&gt;
&lt;p&gt;搜了一下，有人遇到过一模一样的问题：
&lt;a class="link" href="https://community.st.com/stm32cubeide-for-visual-studio-code-mcus-133/st-link-gdb-server-issue-with-stm32c5-165612" target="_blank" rel="noopener"
&gt;ST-LINK GDB Server issue with STM32C5 | Community&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;回复说这个芯片的 CPU core 在 access port 1 上，需要加 &lt;code&gt;-m 1&lt;/code&gt; 参数。&lt;/p&gt;
&lt;h3 id="原因-1"&gt;原因
&lt;/h3&gt;&lt;p&gt;参考手册的 Debug support（DBG）章节写了有两个 AP：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AP0：System debug access port，访问 DBGMCU 和系统 ROM 表&lt;/li&gt;
&lt;li&gt;AP1：Cortex-M33 debug access port，访问内核的调试和 trace 功能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GDB Server 默认连的是 AP0，但内核在 AP1，所以找不到。STM32CubeProgrammer 估计是内置了这部分的处理逻辑，所以什么都不用改就连上了。&lt;/p&gt;
&lt;h3 id="解决办法-1"&gt;解决办法
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;打开 &lt;code&gt;设置 -&amp;gt; 调试器 -&amp;gt; 调试服务器&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;选中 &lt;code&gt;ST-LINK&lt;/code&gt; 配置&lt;/li&gt;
&lt;li&gt;把 &lt;code&gt;多核 -&amp;gt; 访问端口&lt;/code&gt; 改成 1&lt;/li&gt;
&lt;li&gt;确定后重新调试&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/stm32cubemx2-with-clion/20260811130027.png"
width="984"
height="735"
srcset="https://blog.ctree.site/p/stm32cubemx2-with-clion/20260811130027_hu_ee774ff46cad8e43.png 480w, https://blog.ctree.site/p/stm32cubemx2-with-clion/20260811130027_hu_b5785c73384c09ec.png 1024w"
loading="lazy"
alt="访问端口改为1"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="321px"
&gt;&lt;/p&gt;
&lt;p&gt;改完就正常了。&lt;/p&gt;</description></item><item><title>Java sun.font.TrueTypeFont源码分析</title><link>https://blog.ctree.site/p/java-ttf-source-reverse/</link><pubDate>Mon, 01 Jun 2026 15:01:09 +0800</pubDate><guid>https://blog.ctree.site/p/java-ttf-source-reverse/</guid><description>&lt;h2 id="前言"&gt;前言
&lt;/h2&gt;&lt;p&gt;最近在开发一个要和字体打交道的工具，写完后端实现后想着写个能可视化字体、选择并生成配置的GUI工具。但是遇到了一个问题：Java导出的Family name匹配不上Matplot端的，导致找不到字体。没办法，只能在Python端选择自己实现字体搜索算法了。在那之前，我们需要搞明白Java侧是怎么设置字体参数的。
本次分析选择OpenJDK 27，源码在&lt;a class="link" href="https://github.com/openjdk/jdk/blob/jdk-27%2B0/src/java.desktop/share/classes/sun/font/TrueTypeFont.java" target="_blank" rel="noopener"
&gt;这里&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="正文"&gt;正文
&lt;/h2&gt;&lt;p&gt;进入&lt;code&gt;TrueTypeFont&lt;/code&gt;类，首先看到了一堆tag。我们先不管他，往下翻找到我们关心的&lt;code&gt;familyName&lt;/code&gt;字段。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-0-2"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Java" data-lang="Java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localeFamilyName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localeFullName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;可以看到没有&lt;code&gt;familyName&lt;/code&gt;字段，说明它定义在父类里。那我们就顺着&lt;code&gt;localeFamilyName&lt;/code&gt;找吧，反正都是要初始化的。&lt;/p&gt;
&lt;p&gt;Ctrl+F搜索，下一个引用位置就是&lt;code&gt;initNames&lt;/code&gt;函数。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-1"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-1-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-1-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-1-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-1-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-1-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-1-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-1-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-1-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-1-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-1-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-1-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-1-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-1-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-1-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-1-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-1-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-1-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-1-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-1-19"&gt;19
&lt;/span&gt;&lt;span class="lnt" id="code-1-20"&gt;20
&lt;/span&gt;&lt;span class="lnt" id="code-1-21"&gt;21
&lt;/span&gt;&lt;span class="lnt" id="code-1-22"&gt;22
&lt;/span&gt;&lt;span class="lnt" id="code-1-23"&gt;23
&lt;/span&gt;&lt;span class="lnt" id="code-1-24"&gt;24
&lt;/span&gt;&lt;span class="lnt" id="code-1-25"&gt;25
&lt;/span&gt;&lt;span class="lnt" id="code-1-26"&gt;26
&lt;/span&gt;&lt;span class="lnt" id="code-1-27"&gt;27
&lt;/span&gt;&lt;span class="lnt" id="code-1-28"&gt;28
&lt;/span&gt;&lt;span class="lnt" id="code-1-29"&gt;29
&lt;/span&gt;&lt;span class="lnt" id="code-1-30"&gt;30
&lt;/span&gt;&lt;span class="lnt" id="code-1-31"&gt;31
&lt;/span&gt;&lt;span class="lnt" id="code-1-32"&gt;32
&lt;/span&gt;&lt;span class="lnt" id="code-1-33"&gt;33
&lt;/span&gt;&lt;span class="lnt" id="code-1-34"&gt;34
&lt;/span&gt;&lt;span class="lnt" id="code-1-35"&gt;35
&lt;/span&gt;&lt;span class="lnt" id="code-1-36"&gt;36
&lt;/span&gt;&lt;span class="lnt" id="code-1-37"&gt;37
&lt;/span&gt;&lt;span class="lnt" id="code-1-38"&gt;38
&lt;/span&gt;&lt;span class="lnt" id="code-1-39"&gt;39
&lt;/span&gt;&lt;span class="lnt" id="code-1-40"&gt;40
&lt;/span&gt;&lt;span class="lnt" id="code-1-41"&gt;41
&lt;/span&gt;&lt;span class="lnt" id="code-1-42"&gt;42
&lt;/span&gt;&lt;span class="lnt" id="code-1-43"&gt;43
&lt;/span&gt;&lt;span class="lnt" id="code-1-44"&gt;44
&lt;/span&gt;&lt;span class="lnt" id="code-1-45"&gt;45
&lt;/span&gt;&lt;span class="lnt" id="code-1-46"&gt;46
&lt;/span&gt;&lt;span class="lnt" id="code-1-47"&gt;47
&lt;/span&gt;&lt;span class="lnt" id="code-1-48"&gt;48
&lt;/span&gt;&lt;span class="lnt" id="code-1-49"&gt;49
&lt;/span&gt;&lt;span class="lnt" id="code-1-50"&gt;50
&lt;/span&gt;&lt;span class="lnt" id="code-1-51"&gt;51
&lt;/span&gt;&lt;span class="lnt" id="code-1-52"&gt;52
&lt;/span&gt;&lt;span class="lnt" id="code-1-53"&gt;53
&lt;/span&gt;&lt;span class="lnt" id="code-1-54"&gt;54
&lt;/span&gt;&lt;span class="lnt" id="code-1-55"&gt;55
&lt;/span&gt;&lt;span class="lnt" id="code-1-56"&gt;56
&lt;/span&gt;&lt;span class="lnt" id="code-1-57"&gt;57
&lt;/span&gt;&lt;span class="lnt" id="code-1-58"&gt;58
&lt;/span&gt;&lt;span class="lnt" id="code-1-59"&gt;59
&lt;/span&gt;&lt;span class="lnt" id="code-1-60"&gt;60
&lt;/span&gt;&lt;span class="lnt" id="code-1-61"&gt;61
&lt;/span&gt;&lt;span class="lnt" id="code-1-62"&gt;62
&lt;/span&gt;&lt;span class="lnt" id="code-1-63"&gt;63
&lt;/span&gt;&lt;span class="lnt" id="code-1-64"&gt;64
&lt;/span&gt;&lt;span class="lnt" id="code-1-65"&gt;65
&lt;/span&gt;&lt;span class="lnt" id="code-1-66"&gt;66
&lt;/span&gt;&lt;span class="lnt" id="code-1-67"&gt;67
&lt;/span&gt;&lt;span class="lnt" id="code-1-68"&gt;68
&lt;/span&gt;&lt;span class="lnt" id="code-1-69"&gt;69
&lt;/span&gt;&lt;span class="lnt" id="code-1-70"&gt;70
&lt;/span&gt;&lt;span class="lnt" id="code-1-71"&gt;71
&lt;/span&gt;&lt;span class="lnt" id="code-1-72"&gt;72
&lt;/span&gt;&lt;span class="lnt" id="code-1-73"&gt;73
&lt;/span&gt;&lt;span class="lnt" id="code-1-74"&gt;74
&lt;/span&gt;&lt;span class="lnt" id="code-1-75"&gt;75
&lt;/span&gt;&lt;span class="lnt" id="code-1-76"&gt;76
&lt;/span&gt;&lt;span class="lnt" id="code-1-77"&gt;77
&lt;/span&gt;&lt;span class="lnt" id="code-1-78"&gt;78
&lt;/span&gt;&lt;span class="lnt" id="code-1-79"&gt;79
&lt;/span&gt;&lt;span class="lnt" id="code-1-80"&gt;80
&lt;/span&gt;&lt;span class="lnt" id="code-1-81"&gt;81
&lt;/span&gt;&lt;span class="lnt" id="code-1-82"&gt;82
&lt;/span&gt;&lt;span class="lnt" id="code-1-83"&gt;83
&lt;/span&gt;&lt;span class="lnt" id="code-1-84"&gt;84
&lt;/span&gt;&lt;span class="lnt" id="code-1-85"&gt;85
&lt;/span&gt;&lt;span class="lnt" id="code-1-86"&gt;86
&lt;/span&gt;&lt;span class="lnt" id="code-1-87"&gt;87
&lt;/span&gt;&lt;span class="lnt" id="code-1-88"&gt;88
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Java" data-lang="Java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;initNames&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;256&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getTableBuffer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nameTag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ShortBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asShortBuffer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// format - not needed.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numRecords&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* The name table uses unsigned shorts. Many of these
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * are known small values that fit in a short.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * The values that are sizes or offsets into the table could be
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * greater than 32767, so read and store those as ints
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stringPtr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0xffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLocale&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sun&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;awt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SunToolkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getStartupLocale&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLocaleID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getLCIDFromLocale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nameLocale&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;languageCompatibleLCIDs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getLanguageCompatibleLCIDsFromLocale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nameLocale&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;numRecords&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;platformID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;platformID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MS_PLATFORM_ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;platformID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MAC_PLATFORM_ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// skip over this record.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;encodingID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0xffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;namePtr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0xffff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stringPtr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmpName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// only want MacRoman encoding and English name on Mac.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;platformID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MAC_PLATFORM_ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encodingID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MACROMAN_SPECIFIC_ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MACROMAN_ENGLISH_LANG&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nameID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FAMILY_NAME_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compatible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;familyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENGLISH_LOCALE_ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLocaleID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localeFamilyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compatible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isLanguageCompatible&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;namePtr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLen&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmpName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;makeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;platformID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;encodingID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;familyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENGLISH_LOCALE_ID&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;familyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmpName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLocaleID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localeFamilyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compatible&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localeFamilyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmpName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FULL_NAME_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compatible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENGLISH_LOCALE_ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLocaleID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localeFullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compatible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isLanguageCompatible&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;namePtr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLen&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmpName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;makeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;platformID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;encodingID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENGLISH_LOCALE_ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmpName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;langID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nameLocaleID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localeFullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compatible&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localeFullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmpName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localeFamilyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localeFamilyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;familyName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;localeFullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;localeFullName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;快速预览一下，这个方法大概干了这些事情：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;读取Name Table到buffer&lt;/li&gt;
&lt;li&gt;从buffer读取header&lt;/li&gt;
&lt;li&gt;遍历&lt;code&gt;nameRecord&lt;/code&gt;并解析元数据，这里是我们需要关注的地方。
我们一步步来分析。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;首先是
&lt;a class="codeline" href=#code-1-3 data-block=1 data-line=[3,4,5]&gt;读取到buffer&lt;/a&gt;，没什么好说的，只需要注意一下每个单位是uint16（两个byte）。&lt;/p&gt;
&lt;p&gt;然后是从buffer读取header。header的结构如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-2"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-2-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-2-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-2-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-2-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-2-5"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; format: uint16,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; nameRecordNum: uint16,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; stringOffset: uint16
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;根据&lt;a class="link" href="https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html" target="_blank" rel="noopener"
&gt;TrueType Reference Manual&lt;/a&gt;，对于TrueType文件&lt;code&gt;format&lt;/code&gt;固定为0，所以
&lt;a class="codeline" href=#code-1-6 data-block=1 data-line=6&gt;源码&lt;/a&gt;中跳过了。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;numRecords&lt;/code&gt;就是NameRecord结构体的个数；&lt;code&gt;stringOffset&lt;/code&gt;是指字符串段的起始偏移。&lt;br&gt;
我们只要seek到&lt;code&gt;stringOffset + nameRecord.offset&lt;/code&gt;，就能拿到对应record存下的string。&lt;/p&gt;
&lt;p&gt;
&lt;a class="codeline" href=#code-1-13 data-block=1 data-line=13&gt;读取stringPtr的这一行&lt;/a&gt;可能有一些迷惑，实际上就是把&lt;code&gt;stringOffset&lt;/code&gt;映射成无符号的short（因为Java中不存在uint16，所以这里取低四位并转换为int，符号位就固定为0了）。&lt;/p&gt;
&lt;p&gt;解析&lt;code&gt;nameRecord&lt;/code&gt;需要的长度拿到了，接下来开始解析。每个NameRecord的结构如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-3"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-3-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-3-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-3-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-3-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-3-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-3-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-3-7"&gt;7
&lt;/span&gt;&lt;span class="lnt" id="code-3-8"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; platformID: uint16,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; platformSpecificID: uint16,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; languageID: uint16,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; nameID: uint16,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; length: uint16,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; offset: uint16
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;platformID&lt;/code&gt;和&lt;code&gt;platformSpecificID&lt;/code&gt;都是为了一些兼容性问题而设计的，我们不用管，大概看看就好了。感兴趣的话可以自行查看&lt;a class="link" href="https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html" target="_blank" rel="noopener"
&gt;TrueType Reference Manual&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;值得注意的是，platformID的取值为(0, 1, 3)，
&lt;a class="codeline" href=#code-1-20 data-block=1 data-line=[20,21,22,23,24]&gt;这里JDK只处理MS_PLATFORM_ID 和 MAC_PLATFORM_ID 的情况&lt;/a&gt;，也就是1和3。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;languageID&lt;/code&gt;是标记这个&lt;code&gt;nameRecord&lt;/code&gt;中&lt;code&gt;nameID&lt;/code&gt;字段使用的语言。&lt;br&gt;
还记得前面看到的&lt;code&gt;localeFamilyName&lt;/code&gt;吗？就是通过这个字段实现的。&lt;code&gt;nameTable&lt;/code&gt;中有多个标记&lt;code&gt;familyName&lt;/code&gt;的record，只需要匹配&lt;code&gt;languageID&lt;/code&gt;就能找到本地化的&lt;code&gt;familyName&lt;/code&gt;了。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;nameID&lt;/code&gt;标记了这个record里存的是什么信息，这里节选一部分主要使用到的字段。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;nameID&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;th&gt;示例(思源黑体)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;版权信息&lt;/td&gt;
&lt;td&gt;© 2014-2021 Adobe (&lt;a class="link" href="http://www.adobe.com/%29" target="_blank" rel="noopener"
&gt;http://www.adobe.com/)&lt;/a&gt;, with Reserved Font Name &amp;lsquo;Source&amp;rsquo;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Family name&lt;/td&gt;
&lt;td&gt;Source Han Sans SC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Sub-family name&lt;/td&gt;
&lt;td&gt;Bold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;唯一标识(FontName + Style + Version + Vendor)&lt;/td&gt;
&lt;td&gt;2.004;ADBO;SourceHanSansSC-Bold;ADOBE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Full name&lt;/td&gt;
&lt;td&gt;Source Han Sans SC Bold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;版本号&lt;/td&gt;
&lt;td&gt;Version 2.004;hotconv 1.0.118;makeotfexe 2.5.65603&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;PostScript name&lt;/td&gt;
&lt;td&gt;SourceHanSansSC-Bold&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;我们可以发现，其实主要逻辑在
&lt;a class="codeline" href=#code-1-37 data-block=1 data-line=[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79]&gt;这个大switch块&lt;/a&gt;。它匹配了&lt;code&gt;FAMILY_NAME_ID&lt;/code&gt;(1)和&lt;code&gt;FULL_NAME_ID&lt;/code&gt;(4)两个nameID，并且两个case的结构几乎一模一样。&lt;/p&gt;
&lt;p&gt;第一步，
&lt;a class="codeline" href=#code-1-40 data-block=1 data-line=40&gt;检查当前familyName是否已被设置&lt;/a&gt;，如果是则跳过当前nameRecord。&lt;/p&gt;
&lt;p&gt;第二步，
&lt;a class="codeline" href=#code-1-43 data-block=1 data-line=43&gt;检查languageID是否适配startupLocale&lt;/a&gt;。如果是，认为当前nameRecord是localized的，
&lt;a class="codeline" href=#code-1-51 data-block=1 data-line=[51,52,53,54,55]&gt;并保存到localeFamilyName或localeFullName字段。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;第三步，
&lt;a class="codeline" href=#code-1-47 data-block=1 data-line=[47,48,49,50]&gt;读取对应的string，并保存到familyName或fullName字段&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;所以看到这里其实已经真相大白了，我们通过&lt;code&gt;java.awt.Font#getFamily&lt;/code&gt;拿到的就是ttf中第一个&lt;code&gt;nameID == 1&lt;/code&gt;的记录，通过&lt;code&gt;java.awt.Font#getFontName&lt;/code&gt;拿到的是ttf中第一个&lt;code&gt;nameID == 4&lt;/code&gt;的记录。&lt;br&gt;
想要实现一致的行为，我们只需要仿照这个去解析字体文件就可以了。我的目的是匹配对应字体文件，所以我选择在Java侧使用&lt;code&gt;getFontName&lt;/code&gt;读取字体的Full name，在Python侧解析匹配&lt;code&gt;nameID == 4&lt;/code&gt;并拿到字体名称。&lt;/p&gt;
&lt;h2 id="后记"&gt;后记
&lt;/h2&gt;&lt;p&gt;其实笔者一开始是直接从IntelliJ IDEA分析反编译后的class，写到一半觉得还是分析开源的比较好。同时我也发现不同JDK对字体的处理有许多不同，比如&lt;span class="hint" data-hint="JetBrains Runtime"&gt;JBR&lt;/span&gt;直接在类里面定义了&lt;code&gt;postScriptName&lt;/code&gt;字段，而OpenJDK则是选择重写了&lt;code&gt;getPostscriptName&lt;/code&gt;方法并在调用时按需解析。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-4"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-4-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-4-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-4-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-4-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-4-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-4-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-4-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-4-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-4-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-4-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-4-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-4-12"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Java" data-lang="Java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Postscript name is rarely requested. Don&amp;#39;t waste cycles locating it
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * as part of font creation, nor storage to hold it. Get it only on demand.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getPostscriptName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookupName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ENGLISH_LOCALE_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;POSTSCRIPT_NAME_ID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;所以……反射这些内部的状态还是能不用就不用吧。使用任何未公开API的方法和字段都是未定义行为XD&lt;/p&gt;</description></item><item><title>使用STM32CubeMX快速搭建适用于CLion的项目</title><link>https://blog.ctree.site/p/stm32cubemx-with-clion-plus-cmake/</link><pubDate>Wed, 13 May 2026 18:39:57 +0800</pubDate><guid>https://blog.ctree.site/p/stm32cubemx-with-clion-plus-cmake/</guid><description>&lt;h2 id="环境安装"&gt;环境安装
&lt;/h2&gt;&lt;p&gt;尝试在cmd中输入&lt;code&gt;starm-clang&lt;/code&gt;或&lt;code&gt;arm-none-eabi-gcc&lt;/code&gt;，如果没有出现&lt;code&gt;……不是内部或外部命令，也不是可运行的程序或批处理文件&lt;/code&gt;则可&lt;a class="link" href="#%e6%ad%a3%e6%96%87" &gt;跳过&lt;/a&gt;此部分。&lt;/p&gt;
&lt;h3 id="工具链"&gt;工具链
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;下载并安装&lt;a class="link" href="https://www.st.com/en/development-tools/stm32cubeclt.html#" target="_blank" rel="noopener"
&gt;STM32CubeCLT&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;安装MingW或Cygwin。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="正文"&gt;正文
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;在STM32CubeMX中配置完毕后，点击顶栏&lt;code&gt;Project Manager&lt;/code&gt; -&amp;gt; &lt;code&gt;Project&lt;/code&gt;，在右侧&lt;code&gt;Project Settings&lt;/code&gt; -&amp;gt; &lt;code&gt;Toolchain / IDE&lt;/code&gt;中选择CMake&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GENERATE CODE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;打开CLion，等项目加载完毕后找到顶栏的&lt;code&gt;Debug&lt;/code&gt;，点击&lt;code&gt;编辑 CMake 配置文件…&lt;/code&gt;，将默认的第一个配置文件禁用，并打开&lt;code&gt;Debug - Debug&lt;/code&gt;和&lt;code&gt;Release - Release&lt;/code&gt;预设&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;删除&lt;code&gt;cmake-build-debug/CMakeCache.txt&lt;/code&gt;&lt;/strong&gt;，并&lt;code&gt;重新加载 CMake 项目&lt;/code&gt;（左上角可找到）&lt;/li&gt;
&lt;li&gt;现在你可以编译项目了。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="附录"&gt;附录
&lt;/h3&gt;&lt;h3 id="重新选择编译器"&gt;重新选择编译器
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;打开根目录下的&lt;code&gt;CMakePresets.json&lt;/code&gt;，将&lt;code&gt;configurePresets[0].toolchainFile&lt;/code&gt;改为以下两个值之一：&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;GCC: &lt;code&gt;${sourceDir}/cmake/gcc-arm-none-eabi.cmake&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ST Arm Clang: &lt;code&gt;${sourceDir}/cmake/starm-clang.cmake&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用VSCode或其他文本编辑器&lt;/strong&gt;打开根目录下的&lt;code&gt;xxx.ioc&lt;/code&gt;(xxx为项目名)，找到&lt;code&gt;ProjectManager.CompilerLinker&lt;/code&gt;并将其修改为以下两个值之一：&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;GCC: &lt;code&gt;GCC&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ST Arm Clang: &lt;code&gt;Starm-Clang&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;删除&lt;code&gt;cmake-build-debug/CMakeCache.txt&lt;/code&gt;&lt;/strong&gt;，并&lt;code&gt;重新加载 CMake 项目&lt;/code&gt;（左上角可找到）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;现在你可以重新编译了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GD32VW553立创开发板折腾日志1</title><link>https://blog.ctree.site/p/gd32vw553-dev/</link><pubDate>Fri, 24 Apr 2026 17:56:05 +0800</pubDate><guid>https://blog.ctree.site/p/gd32vw553-dev/</guid><description>&lt;p&gt;最近入手了一块GD32VW553的开发板，到手价9.9。
号称是有板载的2.4Ghz WiFi6 + BLE5.2支持，感觉买一个来玩玩很划算（？）&lt;/p&gt;
&lt;h2 id="购买方式"&gt;购买方式
&lt;/h2&gt;&lt;p&gt;首先去&lt;a class="link" href="https://lckfb.com/activities/lckfb-gd32vw553-hmq6/xian-shi-you-hui" target="_blank" rel="noopener"
&gt;这里&lt;/a&gt;领取开发板优惠券，要求是发送到朋友圈并集5个赞。然后再去&lt;a class="link" href="https://www.szlcsc.com/huodong.html" target="_blank" rel="noopener"
&gt;这里&lt;/a&gt;领取免邮券就可以9.9到手了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260424180212.png"
width="280"
height="257"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260424180212_hu_751293f03389924.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260424180212_hu_65ad556cf54b2380.png 1024w"
loading="lazy"
alt="购买凭证"
class="gallery-image"
data-flex-grow="108"
data-flex-basis="261px"
&gt;&lt;/p&gt;
&lt;h2 id="到手开箱"&gt;到手开箱
&lt;/h2&gt;&lt;p&gt;除了开发板本体以外，还额外赠送了两个排针（x）除此以外居然是彩色丝印，给好评。
（图片占位）&lt;/p&gt;
&lt;p&gt;东西很小巧，但是对一个买来当玩具的人（我）来说肯定够用了。&lt;/p&gt;
&lt;p&gt;扫描随板附送的说明书二维码，可以看到板子的&lt;a class="link" href="https://wiki.lckfb.com/zh-hans/gd32vw553/" target="_blank" rel="noopener"
&gt;官方文档&lt;/a&gt;。扫了一眼感觉还是不错的，适合慢慢从头学起。&lt;del&gt;但是我是一个很没有耐心的人&lt;/del&gt;，所以看了一点就开始自己折腾了！以下是一些折腾的成果，附带一些官方教程里没有的东西。&lt;/p&gt;
&lt;h2 id="新建工程"&gt;新建工程
&lt;/h2&gt;&lt;h3 id="新建工程官方ide"&gt;新建工程(官方IDE)
&lt;/h3&gt;&lt;p&gt;点击左上角&lt;code&gt;File -&amp;gt; New -&amp;gt; C/C++ Project&lt;/code&gt;新建项目。不要点首页的&lt;code&gt;Create GD Project&lt;/code&gt;!!!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260424181623.png"
width="772"
height="576"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260424181623_hu_9a5f18d2e3053d2.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260424181623_hu_40b48d40691c146f.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="134"
data-flex-basis="321px"
&gt;&lt;/p&gt;
&lt;p&gt;然后选择C/C++ Managed Build，选择&lt;code&gt;Project Type: GigaDevice RISC-V Project&lt;/code&gt;。输入项目名，在下一页中找到&lt;code&gt;GD32VW553HMQ6&lt;/code&gt;就完成了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260424183514.png"
width="621"
height="302"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260424183514_hu_55813ab7318285f.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260424183514_hu_54e88cd0398dceac.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="205"
data-flex-basis="493px"
&gt;
&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260424183646.png"
width="629"
height="485"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260424183646_hu_2f9fa1a2f290b6a.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260424183646_hu_3cbdaa7ce4b500f1.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="129"
data-flex-basis="311px"
&gt;&lt;/p&gt;
&lt;p&gt;创建完成之后并不会自动打开项目，需要手动关闭Welcome选项卡。&lt;/p&gt;
&lt;h3 id="新建工程vscode"&gt;新建工程(VSCode)
&lt;/h3&gt;&lt;h4 id="从头移植"&gt;从头移植
&lt;/h4&gt;&lt;p&gt;在扩展中搜索&lt;code&gt;Embedded IDE&lt;/code&gt;并安装，随后新建项目&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429131642.png"
width="608"
height="231"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429131642_hu_5b361a8a1099e806.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429131642_hu_2c3c77b444172620.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="263"
data-flex-basis="631px"
&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429131701.png"
width="604"
height="270"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429131701_hu_b5e5deeb7b716c8.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429131701_hu_e45d9d396c21c2f0.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="223"
data-flex-basis="536px"
&gt;&lt;/p&gt;
&lt;p&gt;到&lt;a class="link" href="https://www.gd32mcu.com/cn/download/7?kw=GD32VW5" target="_blank" rel="noopener"
&gt;GigaDevice资料下载&lt;/a&gt;处获取最新的&lt;code&gt;GD32VW55x Firmware Library&lt;/code&gt;，解压。&lt;/p&gt;
&lt;p&gt;将&lt;code&gt;Firmware&lt;/code&gt;, &lt;code&gt;Template&lt;/code&gt;和&lt;code&gt;Utilities&lt;/code&gt;复制到项目下，删除&lt;code&gt;Template&lt;/code&gt;下的&lt;code&gt;xxx_project&lt;/code&gt;文件夹和&lt;code&gt;Firmware\RISCV&lt;/code&gt;下的&lt;code&gt;env_IAR&lt;/code&gt;, &lt;code&gt;env_SES&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;新建src文件夹，将&lt;code&gt;Template&lt;/code&gt;里的&lt;code&gt;main.c&lt;/code&gt;和&lt;code&gt;main.h&lt;/code&gt;移动到&lt;code&gt;src&lt;/code&gt;内&lt;/p&gt;
&lt;p&gt;右键项目资源，点击添加源文件夹，点击普通文件夹，将&lt;code&gt;Firmware&lt;/code&gt;, &lt;code&gt;Template&lt;/code&gt;, &lt;code&gt;Utilities&lt;/code&gt;, &lt;code&gt;src&lt;/code&gt;添加到项目&lt;/p&gt;
&lt;p&gt;点击构建配置，将链接脚本路径设置为&lt;code&gt;Firmware\RISCV\env_Eclipse\GD32VW553xM.lds&lt;/code&gt;，点击构建器选项右边的编辑按钮，在新打开的页面中选择链接器选项卡，在“不生成指定的二进制文件”中删除&lt;code&gt;*.bin file&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429134404.png"
width="689"
height="125"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429134404_hu_7fe3047e3effe14.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429134404_hu_7592441cbc8a36e8.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="551"
data-flex-basis="1322px"
&gt;&lt;/p&gt;
&lt;p&gt;在页面中选择全局选项，在编译器附加选项后面加入&lt;code&gt;-msmall-data-limit=8 -mdiv&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429134751.png"
width="1253"
height="577"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429134751_hu_3c731787d7148484.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429134751_hu_ac0d9ff2e0ae4fd5.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="217"
data-flex-basis="521px"
&gt;&lt;/p&gt;
&lt;p&gt;点击C/C++属性，在包含目录中添加&lt;code&gt;Firmware/GD32VW55x_standard_peripheral&lt;/code&gt;, &lt;code&gt;Firmware/GD32VW55x_standard_peripheral/Include&lt;/code&gt;, &lt;code&gt;Template&lt;/code&gt;, &lt;code&gt;Utilities&lt;/code&gt;, &lt;code&gt;src&lt;/code&gt;, &lt;code&gt;Firmware/RISCV/stubs&lt;/code&gt;, &lt;code&gt;Firmware/RISCV/drivers&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在预处理器定义中添加&lt;code&gt;USE_STDPERIPH_DRIVER&lt;/code&gt;, &lt;code&gt;HXTAL_VALUE=40000000U&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="使用模板"&gt;使用模板
&lt;/h4&gt;&lt;p&gt;EIDE其实是有GD32VW553的模板的，只需要进行如下操作就可以直接启动了。
&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429141925.png"
width="602"
height="223"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429141925_hu_c2197ad371e8e3a0.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429141925_hu_63c1f16e1a3c58cb.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="269"
data-flex-basis="647px"
&gt;
&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429141957.png"
width="604"
height="180"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429141957_hu_de3cb2a16a9bb0ca.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429141957_hu_900a86cbc72a7bf9.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="335"
data-flex-basis="805px"
&gt;
&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429142019.png"
width="603"
height="362"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429142019_hu_7346c2cbdbe258b9.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429142019_hu_b4eeb2c165e11bd9.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="166"
data-flex-basis="399px"
&gt;
&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429142041.png"
width="603"
height="115"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429142041_hu_3397eb7595c35e6d.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429142041_hu_8362dcfe5983778b.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="524"
data-flex-basis="1258px"
&gt;
&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429142101.png"
width="603"
height="114"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429142101_hu_ce6caa1f100caca7.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429142101_hu_ee560ee8ca93d29c.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="528"
data-flex-basis="1269px"
&gt;&lt;/p&gt;
&lt;h3 id="新建工程clion"&gt;新建工程(CLion)
&lt;/h3&gt;&lt;p&gt;要在Clion环境下编译，我们需要先安装对应的工具链。本文使用的是&lt;a class="link" href="https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/tag/v15.2.0-1" target="_blank" rel="noopener"
&gt;xPack GNU RISC-V Embedded GCC v15.2.0-1&lt;/a&gt;，下载win32-x64的包后解压加入环境变量，重启CLion。&lt;/p&gt;
&lt;p&gt;新建C可执行文件项目&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429200739.png"
width="802"
height="651"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429200739_hu_36f173ddb5f8700b.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429200739_hu_fb652b927934d5dd.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="123"
data-flex-basis="295px"
&gt;&lt;/p&gt;
&lt;p&gt;到&lt;a class="link" href="https://www.gd32mcu.com/cn/download/7?kw=GD32VW5" target="_blank" rel="noopener"
&gt;GigaDevice资料下载&lt;/a&gt;处获取最新的&lt;code&gt;GD32VW55x Firmware Library&lt;/code&gt;，解压。
将&lt;code&gt;Firmware&lt;/code&gt;, &lt;code&gt;Template&lt;/code&gt;和&lt;code&gt;Utilities&lt;/code&gt;复制到项目下，删除&lt;code&gt;Template&lt;/code&gt;下的&lt;code&gt;xxx_project&lt;/code&gt;文件夹和&lt;code&gt;Firmware\RISCV&lt;/code&gt;下的&lt;code&gt;env_IAR&lt;/code&gt;, &lt;code&gt;env_SES&lt;/code&gt;文件夹。随后在项目根目录下新建&lt;code&gt;src&lt;/code&gt;文件夹，将&lt;code&gt;Template&lt;/code&gt;里的&lt;code&gt;main.c&lt;/code&gt;和&lt;code&gt;main.h&lt;/code&gt;移动到&lt;code&gt;src&lt;/code&gt;内。&lt;/p&gt;
&lt;p&gt;打开&lt;code&gt;CMakeLists.txt&lt;/code&gt;，将内容更改为&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-0-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-0-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-0-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-0-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-0-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-0-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-0-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-0-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-0-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-0-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-0-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-0-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-0-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-0-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-0-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-0-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-0-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-0-19"&gt;19
&lt;/span&gt;&lt;span class="lnt" id="code-0-20"&gt;20
&lt;/span&gt;&lt;span class="lnt" id="code-0-21"&gt;21
&lt;/span&gt;&lt;span class="lnt" id="code-0-22"&gt;22
&lt;/span&gt;&lt;span class="lnt" id="code-0-23"&gt;23
&lt;/span&gt;&lt;span class="lnt" id="code-0-24"&gt;24
&lt;/span&gt;&lt;span class="lnt" id="code-0-25"&gt;25
&lt;/span&gt;&lt;span class="lnt" id="code-0-26"&gt;26
&lt;/span&gt;&lt;span class="lnt" id="code-0-27"&gt;27
&lt;/span&gt;&lt;span class="lnt" id="code-0-28"&gt;28
&lt;/span&gt;&lt;span class="lnt" id="code-0-29"&gt;29
&lt;/span&gt;&lt;span class="lnt" id="code-0-30"&gt;30
&lt;/span&gt;&lt;span class="lnt" id="code-0-31"&gt;31
&lt;/span&gt;&lt;span class="lnt" id="code-0-32"&gt;32
&lt;/span&gt;&lt;span class="lnt" id="code-0-33"&gt;33
&lt;/span&gt;&lt;span class="lnt" id="code-0-34"&gt;34
&lt;/span&gt;&lt;span class="lnt" id="code-0-35"&gt;35
&lt;/span&gt;&lt;span class="lnt" id="code-0-36"&gt;36
&lt;/span&gt;&lt;span class="lnt" id="code-0-37"&gt;37
&lt;/span&gt;&lt;span class="lnt" id="code-0-38"&gt;38
&lt;/span&gt;&lt;span class="lnt" id="code-0-39"&gt;39
&lt;/span&gt;&lt;span class="lnt" id="code-0-40"&gt;40
&lt;/span&gt;&lt;span class="lnt" id="code-0-41"&gt;41
&lt;/span&gt;&lt;span class="lnt" id="code-0-42"&gt;42
&lt;/span&gt;&lt;span class="lnt" id="code-0-43"&gt;43
&lt;/span&gt;&lt;span class="lnt" id="code-0-44"&gt;44
&lt;/span&gt;&lt;span class="lnt" id="code-0-45"&gt;45
&lt;/span&gt;&lt;span class="lnt" id="code-0-46"&gt;46
&lt;/span&gt;&lt;span class="lnt" id="code-0-47"&gt;47
&lt;/span&gt;&lt;span class="lnt" id="code-0-48"&gt;48
&lt;/span&gt;&lt;span class="lnt" id="code-0-49"&gt;49
&lt;/span&gt;&lt;span class="lnt" id="code-0-50"&gt;50
&lt;/span&gt;&lt;span class="lnt" id="code-0-51"&gt;51
&lt;/span&gt;&lt;span class="lnt" id="code-0-52"&gt;52
&lt;/span&gt;&lt;span class="lnt" id="code-0-53"&gt;53
&lt;/span&gt;&lt;span class="lnt" id="code-0-54"&gt;54
&lt;/span&gt;&lt;span class="lnt" id="code-0-55"&gt;55
&lt;/span&gt;&lt;span class="lnt" id="code-0-56"&gt;56
&lt;/span&gt;&lt;span class="lnt" id="code-0-57"&gt;57
&lt;/span&gt;&lt;span class="lnt" id="code-0-58"&gt;58
&lt;/span&gt;&lt;span class="lnt" id="code-0-59"&gt;59
&lt;/span&gt;&lt;span class="lnt" id="code-0-60"&gt;60
&lt;/span&gt;&lt;span class="lnt" id="code-0-61"&gt;61
&lt;/span&gt;&lt;span class="lnt" id="code-0-62"&gt;62
&lt;/span&gt;&lt;span class="lnt" id="code-0-63"&gt;63
&lt;/span&gt;&lt;span class="lnt" id="code-0-64"&gt;64
&lt;/span&gt;&lt;span class="lnt" id="code-0-65"&gt;65
&lt;/span&gt;&lt;span class="lnt" id="code-0-66"&gt;66
&lt;/span&gt;&lt;span class="lnt" id="code-0-67"&gt;67
&lt;/span&gt;&lt;span class="lnt" id="code-0-68"&gt;68
&lt;/span&gt;&lt;span class="lnt" id="code-0-69"&gt;69
&lt;/span&gt;&lt;span class="lnt" id="code-0-70"&gt;70
&lt;/span&gt;&lt;span class="lnt" id="code-0-71"&gt;71
&lt;/span&gt;&lt;span class="lnt" id="code-0-72"&gt;72
&lt;/span&gt;&lt;span class="lnt" id="code-0-73"&gt;73
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-CMake" data-lang="CMake"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cmake_minimum_required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;VERSION&lt;/span&gt; &lt;span class="s"&gt;3.16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_SYSTEM_NAME&lt;/span&gt; &lt;span class="s"&gt;Generic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_SYSTEM_PROCESSOR&lt;/span&gt; &lt;span class="s"&gt;riscv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_TRY_COMPILE_TARGET_TYPE&lt;/span&gt; &lt;span class="s"&gt;STATIC_LIBRARY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_EXECUTABLE_SUFFIX&lt;/span&gt; &lt;span class="s"&gt;.elf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;gd32vw553&lt;/span&gt; &lt;span class="s"&gt;C&lt;/span&gt; &lt;span class="s"&gt;ASM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;TOOLCHAIN_PREFIX&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;riscv-none-elf-&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_C_COMPILER&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOOLCHAIN_PREFIX&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;gcc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_CXX_COMPILER&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOOLCHAIN_PREFIX&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;g++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_ASM_COMPILER&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOOLCHAIN_PREFIX&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;gcc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_OBJCOPY&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOOLCHAIN_PREFIX&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;objcopy&lt;/span&gt; &lt;span class="s"&gt;CACHE&lt;/span&gt; &lt;span class="s"&gt;INTERNAL&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;objcopy tool&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_OBJDUMP&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOOLCHAIN_PREFIX&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;objdump&lt;/span&gt; &lt;span class="s"&gt;CACHE&lt;/span&gt; &lt;span class="s"&gt;INTERNAL&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;objdump tool&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_SIZE&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOOLCHAIN_PREFIX&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;size&lt;/span&gt; &lt;span class="s"&gt;CACHE&lt;/span&gt; &lt;span class="s"&gt;INTERNAL&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;size tool&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_AR&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOOLCHAIN_PREFIX&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;ar&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;ARCH_FLAGS&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;-march=rv32imac_zicsr -mabi=ilp32 -mcmodel=medlow -msmall-data-limit=8 -mdiv&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_C_FLAGS&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${ARCH_FLAGS} -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -std=gnu11&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_ASM_FLAGS&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${ARCH_FLAGS} -x assembler-with-cpp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;LDSCRIPT&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${CMAKE_SOURCE_DIR}/Firmware/RISCV/env_Eclipse/GD32VW553xM.lds&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_EXE_LINKER_FLAGS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${ARCH_FLAGS} -T${LDSCRIPT} -Wl,--cref -Wl,--gc-sections \ --specs=nosys.specs --specs=nano.specs -nostartfiles -Wl,-Bstatic&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_BUILD_TYPE&lt;/span&gt; &lt;span class="s"&gt;STREQUAL&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Debug&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_C_FLAGS&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${CMAKE_C_FLAGS} -g -gdwarf-2 -O0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;else&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;CMAKE_C_FLAGS&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${CMAKE_C_FLAGS} -O2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;endif&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;add_definitions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;-DUSE_STDPERIPH_DRIVER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;-DHXTAL_VALUE=40000000U&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;include_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/src&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/Template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/Utilities&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/Firmware/GD32VW55x_standard_peripheral/Include&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/Firmware/GD32VW55x_standard_peripheral&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/Firmware/RISCV/drivers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;FIRMWARE_DIR&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/Firmware&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;GLOB_RECURSE&lt;/span&gt; &lt;span class="s"&gt;C_SOURCES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${FIRMWARE_DIR}/GD32VW55x_standard_peripheral/Source/*.c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${FIRMWARE_DIR}/GD32VW55x_standard_peripheral/*.c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${FIRMWARE_DIR}/RISCV/env_Eclipse/*.c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${FIRMWARE_DIR}/RISCV/stubs/*.c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${FIRMWARE_DIR}/RISCV/drivers/*.c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${CMAKE_SOURCE_DIR}/Template/*.c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${CMAKE_SOURCE_DIR}/Utilities/*.c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;${CMAKE_SOURCE_DIR}/src/*.c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;ASM_SOURCES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;FIRMWARE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/RISCV/env_Eclipse/start.S&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;FIRMWARE_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/RISCV/env_Eclipse/entry.S&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;add_executable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;C_SOURCES&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ASM_SOURCES&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;add_custom_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;TARGET&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="s"&gt;POST_BUILD&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;COMMAND&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_OBJCOPY&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="s"&gt;-O&lt;/span&gt; &lt;span class="s"&gt;ihex&lt;/span&gt; &lt;span class="o"&gt;$&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;TARGET_FILE:${PROJECT_NAME}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.hex&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;COMMAND&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_OBJCOPY&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="s"&gt;-O&lt;/span&gt; &lt;span class="s"&gt;binary&lt;/span&gt; &lt;span class="s"&gt;-S&lt;/span&gt; &lt;span class="o"&gt;$&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;TARGET_FILE:${PROJECT_NAME}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.bin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;COMMAND&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_OBJDUMP&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="s"&gt;-xS&lt;/span&gt; &lt;span class="o"&gt;$&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;TARGET_FILE:${PROJECT_NAME}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;COMMAND&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_SIZE&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;$&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;TARGET_FILE:${PROJECT_NAME}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;COMMENT&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Post-build: generating hex, bin and disassembly&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;加载CMake项目后点击小锤子即可编译。&lt;/p&gt;
&lt;p&gt;如果你好奇CMake代码是怎么编写出来的，可以尝试对照&lt;a class="link" href="#%E4%BB%8E%E5%A4%B4%E7%A7%BB%E6%A4%8D" &gt;3.2.1.从头移植&lt;/a&gt;理解一下^^&lt;/p&gt;
&lt;h2 id="上手开发"&gt;上手开发
&lt;/h2&gt;&lt;h3 id="更改gpio"&gt;更改GPIO
&lt;/h3&gt;&lt;p&gt;阅读代码发现，官方的示例中有非常完整的LED闪烁代码，但是接口定义和板子的不同。原理图告诉我们这个板子只有一个LED连接到GPIO：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429140719.png"
width="486"
height="334"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429140719_hu_d4b7cdd00f470d91.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429140719_hu_39fa9651ecf1ae27.png 1024w"
loading="lazy"
alt="LED原理图"
class="gallery-image"
data-flex-grow="145"
data-flex-basis="349px"
&gt;&lt;/p&gt;
&lt;p&gt;可以发现LED1连接的是GPIOC的PIN13。打开&lt;code&gt;Utilities\gd32vw553h_eval.h&lt;/code&gt;，进行以下更改&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429141354.png"
width="1027"
height="631"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429141354_hu_5423f56e9e70bb46.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429141354_hu_f0f72f01f118abcb.png 1024w"
loading="lazy"
alt="gd32vw553h_eval.h"
class="gallery-image"
data-flex-grow="162"
data-flex-basis="390px"
&gt;&lt;/p&gt;
&lt;p&gt;打开&lt;code&gt;Utilities\gd32vw553h_eval.c&lt;/code&gt;，进行以下更改&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429141526.png"
width="1055"
height="190"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429141526_hu_765e6640ec3aae0d.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429141526_hu_2508e53dd65cb46e.png 1024w"
loading="lazy"
alt="gd32vw553h_eval.c"
class="gallery-image"
data-flex-grow="555"
data-flex-basis="1332px"
&gt;&lt;/p&gt;
&lt;p&gt;打开&lt;code&gt;src\main.c&lt;/code&gt;，进行以下更改
&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429141620.png"
width="995"
height="361"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429141620_hu_6497a41d480d5561.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429141620_hu_a8da0738064aba30.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="275"
data-flex-basis="661px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429141641.png"
width="907"
height="56"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429141641_hu_fec271add4766810.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429141641_hu_871e0048b8cb9cad.png 1024w"
loading="lazy"
alt="main.c"
class="gallery-image"
data-flex-grow="1619"
data-flex-basis="3887px"
&gt;&lt;/p&gt;
&lt;h3 id="下载和调试"&gt;下载和调试
&lt;/h3&gt;&lt;p&gt;虽然板子留了JTAG接口且声称支持J-Link，但是芯片是RISC-V架构的。除非你的J-Link是花大价钱买的新款正版，不然洗洗睡吧。
因本人没有支持RISC-V的J-Link，也没有购买官方的&lt;span class="hint" data-hint="板子9.9元，下载器&amp;lt;a href=&amp;#39;https://item.szlcsc.com/5722345.html&amp;#39;&amp;gt;350元&amp;lt;/a&amp;gt;XD根本买不起"&gt;GD-Link&lt;/span&gt;，所以这里只介绍如何使用串口下载。&lt;/p&gt;
&lt;p&gt;注意：以下工具均可在&lt;a class="link" href="https://www.gigadevice.com.cn/technical-resource/mcu-resource-center" target="_blank" rel="noopener"
&gt;兆易MCU资源中心&lt;/a&gt;找到最新版本。&lt;/p&gt;
&lt;h4 id="官方gui工具"&gt;官方GUI工具
&lt;/h4&gt;&lt;p&gt;使用官方的&lt;a class="link" href="https://download.gigadevice.com/Other_Software/GD32AllInOneProgrammer_win_V5.0.2.34907.7z" target="_blank" rel="noopener"
&gt;GD32 All-In-One Programmer&lt;/a&gt;即可方便地通过串口烧录程序。下载并解压后，双击打开&lt;code&gt;GD32AllInOneProgrammer.exe&lt;/code&gt;，调整以下红框处参数&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429234216.png"
width="987"
height="779"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429234216_hu_46cb9acb8e5c8fa.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429234216_hu_a5e03e4ae08836bd.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="126"
data-flex-basis="304px"
&gt;&lt;/p&gt;
&lt;p&gt;将&lt;code&gt;Port Name&lt;/code&gt;调整为&lt;span class="hint" data-hint="将开发板上的USB-C接口连接到电脑，Win&amp;#43;R输入devmgmt.msc，然后找到端口 (COM 和 LPT) -&amp;gt; USB-SERIAL CH340"&gt;CH340对应的串口号&lt;/span&gt;，将&lt;code&gt;Baud Rate&lt;/code&gt;调整为&lt;code&gt;512000&lt;/code&gt;。修改完成后，按住板子上的&lt;code&gt;BOOT0&lt;/code&gt;按钮并轻按&lt;code&gt;RESET&lt;/code&gt;按钮，此时MCU会进入BootLoader模式。现在你可以点击页面上的&lt;code&gt;Connect&lt;/code&gt;按钮连接串口了。&lt;/p&gt;
&lt;p&gt;连接完成且下方出现&lt;code&gt;Device Information&lt;/code&gt;后，&lt;span class="hint" data-hint="某些版本中存在直接输入路径不生效的bug，所以建议大家都使用Browse找到固件"&gt;在右侧Download处点击Browse按钮&lt;/span&gt;，找到编译好的固件后&lt;code&gt;Download&lt;/code&gt;，等待下方进度条跑满后，在&lt;strong&gt;没有&lt;/strong&gt;按住&lt;code&gt;BOOT0&lt;/code&gt;按钮的状态下再次轻按&lt;code&gt;RESET&lt;/code&gt;按钮，此时固件烧录并启动成功。&lt;/p&gt;
&lt;h4 id="嵌入ide"&gt;嵌入IDE
&lt;/h4&gt;&lt;p&gt;使用官方的&lt;a class="link" href="https://download.gigadevice.com/Other_Software/GD32_ISP_CLI%28Windows%29_V5.1.0.39034.7z" target="_blank" rel="noopener"
&gt;GD32_ISP_CLI&lt;/a&gt;配合各种脚本即可做到丝滑地编译+烧录。在进行以下操作前，请确保&lt;code&gt;GD32_ISP_CLI.exe&lt;/code&gt;已在环境变量里。&lt;/p&gt;
&lt;h5 id="vscodeeide"&gt;VSCode(EIDE)
&lt;/h5&gt;&lt;p&gt;&lt;img src="https://blog.ctree.site/p/gd32vw553-dev/20260429222727.png"
width="327"
height="180"
srcset="https://blog.ctree.site/p/gd32vw553-dev/20260429222727_hu_bf3b0c3828b4480f.png 480w, https://blog.ctree.site/p/gd32vw553-dev/20260429222727_hu_c1808f2e2bca6609.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="181"
data-flex-basis="436px"
&gt;&lt;/p&gt;
&lt;p&gt;待补充&lt;/p&gt;
&lt;h5 id="clioncmake"&gt;CLion(CMake)
&lt;/h5&gt;&lt;p&gt;在CMakeLists.txt中加入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-1"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-1-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-1-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-1-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-1-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-1-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-1-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-1-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-1-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-1-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-1-10"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-CMake" data-lang="CMake"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;COM_PORT&lt;/span&gt; &lt;span class="s"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# 这里设置你的串口号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;find_program&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;GD32_TOOL_PATH&lt;/span&gt; &lt;span class="s"&gt;GD32_ISP_CLI.exe&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;get_filename_component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;GD32_TOOL_DIR&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GD32_TOOL_PATH&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="s"&gt;DIRECTORY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="nb"&gt;add_custom_target&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;flash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;COMMAND&lt;/span&gt; &lt;span class="s"&gt;GD32_ISP_CLI.exe&lt;/span&gt; &lt;span class="s"&gt;-c&lt;/span&gt; &lt;span class="s"&gt;--pn&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;COM_PORT&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="s"&gt;--br&lt;/span&gt; &lt;span class="s"&gt;512000&lt;/span&gt; &lt;span class="s"&gt;-i&lt;/span&gt; &lt;span class="s"&gt;GD32VW553HMQ6&lt;/span&gt; &lt;span class="s"&gt;-d&lt;/span&gt; &lt;span class="s"&gt;--a&lt;/span&gt; &lt;span class="s"&gt;08000000&lt;/span&gt; &lt;span class="s"&gt;--fn&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_BINARY_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.bin&lt;/span&gt; &lt;span class="s"&gt;--n&lt;/span&gt; &lt;span class="s"&gt;||&lt;/span&gt; &lt;span class="s"&gt;exit&lt;/span&gt; &lt;span class="s"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;WORKING_DIRECTORY&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GD32_TOOL_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;DEPENDS&lt;/span&gt; &lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;COMMENT&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Flashing via UART...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;随后选择构建目标&lt;code&gt;flash&lt;/code&gt;，点击小锤子即可编译并烧录。&lt;/p&gt;
&lt;h5 id="疑难解答"&gt;疑难解答
&lt;/h5&gt;&lt;p&gt;Q: 我正在尝试在其他工具链中使用这个CLI，为什么提示&lt;code&gt;Init OptionBytes failed!&lt;/code&gt;？&lt;/p&gt;
&lt;p&gt;A: 在目前最新的5.1.0.39034版本下，这个CLI工具依赖当前工作目录来获取&lt;code&gt;OptionBytesXML&lt;/code&gt;。你需要想办法切换工作目录，或是把&lt;code&gt;OptionBytesXML&lt;/code&gt;文件夹复制到当前目录下。&lt;/p&gt;
&lt;h2 id="进阶sdk"&gt;进阶SDK
&lt;/h2&gt;&lt;p&gt;要想使用蓝牙和WiFi，我们需要构建专用的SDK包。SDK内包括两个部分：&lt;code&gt;MBL&lt;/code&gt;和&lt;code&gt;MSDK&lt;/code&gt;。&lt;code&gt;MBL&lt;/code&gt;就是我们固件的&lt;code&gt;BootLoader&lt;/code&gt;，负责启动系统前的初始化工作。我们想要二次开发一般只需要修改&lt;code&gt;MSDK&lt;/code&gt;部分，也就是&lt;code&gt;MSDK\app&lt;/code&gt;文件夹内的代码。
在执行以下操作前，请先下载&lt;a class="link" href="https://download.gigadevice.com/Other_Software/GD32VW55x_RELEASE_V1.0.3g.zip" target="_blank" rel="noopener"
&gt;GD32VW553系列Wi-Fi &amp;amp; BLE SDK&lt;/a&gt;, &lt;a class="link" href="https://download.nucleisys.com/upload/files/toolchain/gcc/nuclei_riscv_newlibc_prebuilt_win32_2022.12.zip" target="_blank" rel="noopener"
&gt;Nuclei RISC-V Embedded Toolchain(Baremetal/RTOS + Newlibc)&lt;/a&gt;和&lt;a class="link" href="https://github.com/openocd-org/openocd/releases/latest" target="_blank" rel="noopener"
&gt;OpenOCD&lt;/a&gt;，并将工具链和OpenOCD添加至环境变量。&lt;/p&gt;
&lt;p&gt;注意：以上工具可在&lt;a class="link" href="https://www.gigadevice.com.cn/technical-resource/mcu-resource-center" target="_blank" rel="noopener"
&gt;兆易MCU资源中心&lt;/a&gt;和&lt;a class="link" href="https://nucleisys.com/download.php" target="_blank" rel="noopener"
&gt;芯来工具链&lt;/a&gt;找到最新版本。&lt;/p&gt;
&lt;p&gt;如果你想尝试使用更新版本的工具链，请务必检查目标平台是否为riscv-nuclei-elf！！
&lt;span class="hint" data-hint="Nuclei工具链从2024.02版本开始，将目标平台从riscv-nuclei-elf更改为了riscv64-unknown-elf。这同时代表着工具链可执行文件的文件名已被更改，你需要将toolchain.cmake中的CROSS_COMPILE改为riscv64-unknown-elf。与此同时，经过测试截至2025.10版本，新版工具链并不支持我们需要的DSP指令集扩展：&amp;lt;code&amp;gt;riscv64-unknown-elf-gcc.exe: error: &amp;#39;-march=rv32imafcbp&amp;#39;: extension &amp;#39;p&amp;#39; is unsupported standard single letter extension&amp;lt;/code&amp;gt;。"&gt;(为什么？)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;注意：必须下载并将OpenOCD添加至环境变量，即使你使用串口下载。
&lt;span class="hint" data-hint="在CMakeLists中调用image_afterbuild.bat执行后处理时，传参用的是&amp;lt;code&amp;gt;COMMAND ${TARGET_PROJECT_DIR}/image_afterbuild.bat ${CROSS_COMPILE}- ECDSA256 CERT ${OPENOCD_DIR} ${PROJECT_SOURCE_DIR}&amp;lt;/code&amp;gt;，此时如果OpenOCD不存在环境变量中， 本该传递给位置5的PROJECT_SOURCE_DIR就会来到位置4上，导致后处理脚本中无法获取项目目录，最终生成bin文件失败。"&gt;(为什么？)&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="clioncmake-1"&gt;CLion(CMake)
&lt;/h3&gt;&lt;p&gt;打开项目&lt;code&gt;GD32VW55x_RELEASE_V1.0.3g&lt;/code&gt;，点击&lt;code&gt;设置&lt;/code&gt; - &lt;code&gt;构建、执行、部署&lt;/code&gt; - &lt;code&gt;CMake&lt;/code&gt;，将CMake选项更改为&lt;code&gt;-DCMAKE_TOOLCHAIN_FILE:PATH=scripts/cmake/toolchain.cmake&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;打开&lt;code&gt;MSDK\plf\src\uart\uart_config.h&lt;/code&gt;，将第81行的&lt;code&gt;#define LOG_UART UART2&lt;/code&gt;改为&lt;code&gt;#define LOG_UART USART0&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;打开MBL\mainboot\mbl.c，将第48行的&lt;code&gt;#define LOG_UART UART2&lt;/code&gt;改为&lt;code&gt;#define LOG_UART USART0&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;将120行的&lt;br&gt;
gpio_mode_set(GPIOA, GPIO_MODE_AF, &lt;strong&gt;GPIO_PUPD_NONE&lt;/strong&gt;, GPIO_PIN_8);&lt;br&gt;
改为&lt;br&gt;
gpio_mode_set(GPIOA, GPIO_MODE_AF, &lt;strong&gt;GPIO_PUPD_PULLUP&lt;/strong&gt;, GPIO_PIN_8);&lt;br&gt;
并同样修改122行的代码，配置上拉模式。&lt;/p&gt;
&lt;p&gt;打开&lt;code&gt;MSDK\plf\src\uart\uart.h&lt;/code&gt;，将58-64行的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-2"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-2-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-2-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-2-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-2-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-2-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-2-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-2-7"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_TX_GPIO GPIOA
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_TX_PIN GPIO_PIN_0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_TX_AF_NUM GPIO_AF_0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_RX_GPIO GPIOA
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_RX_PIN GPIO_PIN_1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_RX_AF_NUM GPIO_AF_0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;改为&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-3"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-3-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-3-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-3-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-3-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-3-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-3-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-3-7"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_TX_GPIO GPIOB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_TX_PIN GPIO_PIN_15
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_TX_AF_NUM GPIO_AF_8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_RX_GPIO GPIOA
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_RX_PIN GPIO_PIN_8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define USART0_RX_AF_NUM GPIO_AF_2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;现在你应该能够编译MBL和MSDK了。编译完的固件bin在&lt;code&gt;scripts\images&lt;/code&gt;文件夹下。&lt;/p&gt;</description></item><item><title>游戏反编译工程工作流</title><link>https://blog.ctree.site/p/mono-decompile-workflow/</link><pubDate>Sun, 15 Mar 2026 21:20:47 +0800</pubDate><guid>https://blog.ctree.site/p/mono-decompile-workflow/</guid><description>&lt;ol&gt;
&lt;li&gt;AssetRipper反编译
注意&lt;code&gt;Sprite Export Format&lt;/code&gt;选择&lt;code&gt;Texture&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;打开工程
使用2018.4.36f1&lt;/li&gt;
&lt;li&gt;删除已经被反编译，但后续需要重新安装的依赖&lt;/li&gt;
&lt;li&gt;在&lt;code&gt;Packages/manifest.json&lt;/code&gt;里加入&lt;code&gt;&amp;quot;com.unity.package-manager-ui&amp;quot;: &amp;quot;2.0.13&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在Package Manager中添加&lt;code&gt;TextMesh Pro&lt;/code&gt;
重启unity，然后执行&lt;code&gt;Window - TextMeshPro - Import TMP Essential Resources&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;修复项目中的TMP依赖。其中包括脚本依赖、Shader依赖。可能出现在Scene和Prefab中。&lt;/li&gt;
&lt;li&gt;解决报错。&lt;/li&gt;
&lt;li&gt;把逆向出来字体的&lt;code&gt;MonoBehavior&lt;/code&gt;对TMP Script的依赖修复。&lt;/li&gt;
&lt;li&gt;修复shader&lt;/li&gt;
&lt;li&gt;修复某些素材被错误设置为Mesh Type: Tight&lt;/li&gt;
&lt;li&gt;将Build target改为Android
如果遇到Texture2D不能正常显示（如预览为水蓝色）请设置Override for Android -&amp;gt; Max Size 4096&lt;/li&gt;
&lt;li&gt;留意代码中有没有硬编码的&lt;code&gt;MonoBehaviour&lt;/code&gt;引用，反编译后可能会错误地加入_0之类的后缀，这时候如果代码里用&lt;code&gt;==&lt;/code&gt;判等就会出错（Timeline动画相关出错很可能是因为这个）&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>嵌入式Linux开发1</title><link>https://blog.ctree.site/p/embedded-linux-01/</link><pubDate>Fri, 23 Jan 2026 00:53:06 +0800</pubDate><guid>https://blog.ctree.site/p/embedded-linux-01/</guid><description>&lt;h2 id="正文"&gt;正文
&lt;/h2&gt;&lt;h3 id="如何关闭默认的hdmi输出"&gt;如何关闭默认的HDMI输出
&lt;/h3&gt;&lt;p&gt;root@firefly:/# cat /sys/class/vtconsole/vtcon1/name
(M) frame buffer device&lt;/p&gt;
&lt;p&gt;root@firefly:/# echo 0 &amp;gt; /sys/class/vtconsole/vtcon1/bind&lt;/p&gt;
&lt;h3 id="连接到wifi"&gt;连接到WiFi
&lt;/h3&gt;&lt;p&gt;nmcli device wifi connect &amp;ldquo;SSID名称&amp;rdquo; password &amp;ldquo;密码&amp;rdquo;&lt;/p&gt;</description></item><item><title>LVGL Pro环境配置及初体验</title><link>https://blog.ctree.site/p/lvgl-pro-01/</link><pubDate>Wed, 21 Jan 2026 04:44:36 +0800</pubDate><guid>https://blog.ctree.site/p/lvgl-pro-01/</guid><description>&lt;img src="https://blog.ctree.site/p/lvgl-pro-01/IMG_20260121_044947.jpg" alt="Featured image of post LVGL Pro环境配置及初体验" /&gt;&lt;h2 id="啥是lvgl-pro"&gt;啥是LVGL Pro
&lt;/h2&gt;&lt;p&gt;最近入手了一块STM32F103ZET6的开发板，用一周时间学习了外设基本知识并移植完FreeRTOS、电阻触摸屏和其他一些IO后决定开发LVGL。在经历完操蛋的LVGL 9.4移植后，我想起了LVGL官方大力推荐的Next-gen方案：LVGL Pro。这是一个让你可以使用XML编辑布局和样式并编译到C代码的工具链，我们可以看一下官方示例感受一下写法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-0-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-0-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-0-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-0-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-0-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-0-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-0-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-0-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-0-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-0-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-0-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-0-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-0-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-0-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-0-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-0-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-0-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-0-19"&gt;19
&lt;/span&gt;&lt;span class="lnt" id="code-0-20"&gt;20
&lt;/span&gt;&lt;span class="lnt" id="code-0-21"&gt;21
&lt;/span&gt;&lt;span class="lnt" id="code-0-22"&gt;22
&lt;/span&gt;&lt;span class="lnt" id="code-0-23"&gt;23
&lt;/span&gt;&lt;span class="lnt" id="code-0-24"&gt;24
&lt;/span&gt;&lt;span class="lnt" id="code-0-25"&gt;25
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-XML" data-lang="XML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;component&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;previews&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;preview&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;320&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;240&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;style_pad_all=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;24&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;style_bg_color=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0xaaa&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/previews&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;styles&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;style_main&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;100%&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;flex_cross_place=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;center&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;pad_row=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#unit_sm&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;style_main_dark&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;text_color=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#surface_primary_dark&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;style_bar&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#unit_md&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;flex_grow=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/styles&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;api&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;prop&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;move&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;int&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;default=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;5000&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;prop&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;day&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;string&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;default=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Mon&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/api&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;view&lt;/span&gt; &lt;span class="na"&gt;extends=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;column&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;style_main&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;bind_style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;style_main_dark&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;subject=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dark_theme&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;ref_value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;bar&lt;/span&gt; &lt;span class="na"&gt;min_value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;max_value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10000&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;$move&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;style&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;style_bar&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/bar&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;lv_label&lt;/span&gt; &lt;span class="na"&gt;text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;$day&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;style_text_font=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;geist_semibold_12&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/view&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/component&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;看起来就像在写HTML呢。不管怎么样，至少肯定比对着C代码硬搓简单多了。上面的代码会生成以下C代码（已简化）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-1"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-1-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-1-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-1-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-1-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-1-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-1-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-1-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-1-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-1-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-1-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-1-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-1-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-1-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-1-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-1-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-1-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-1-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-1-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-1-19"&gt;19
&lt;/span&gt;&lt;span class="lnt" id="code-1-20"&gt;20
&lt;/span&gt;&lt;span class="lnt" id="code-1-21"&gt;21
&lt;/span&gt;&lt;span class="lnt" id="code-1-22"&gt;22
&lt;/span&gt;&lt;span class="lnt" id="code-1-23"&gt;23
&lt;/span&gt;&lt;span class="lnt" id="code-1-24"&gt;24
&lt;/span&gt;&lt;span class="lnt" id="code-1-25"&gt;25
&lt;/span&gt;&lt;span class="lnt" id="code-1-26"&gt;26
&lt;/span&gt;&lt;span class="lnt" id="code-1-27"&gt;27
&lt;/span&gt;&lt;span class="lnt" id="code-1-28"&gt;28
&lt;/span&gt;&lt;span class="lnt" id="code-1-29"&gt;29
&lt;/span&gt;&lt;span class="lnt" id="code-1-30"&gt;30
&lt;/span&gt;&lt;span class="lnt" id="code-1-31"&gt;31
&lt;/span&gt;&lt;span class="lnt" id="code-1-32"&gt;32
&lt;/span&gt;&lt;span class="lnt" id="code-1-33"&gt;33
&lt;/span&gt;&lt;span class="lnt" id="code-1-34"&gt;34
&lt;/span&gt;&lt;span class="lnt" id="code-1-35"&gt;35
&lt;/span&gt;&lt;span class="lnt" id="code-1-36"&gt;36
&lt;/span&gt;&lt;span class="lnt" id="code-1-37"&gt;37
&lt;/span&gt;&lt;span class="lnt" id="code-1-38"&gt;38
&lt;/span&gt;&lt;span class="lnt" id="code-1-39"&gt;39
&lt;/span&gt;&lt;span class="lnt" id="code-1-40"&gt;40
&lt;/span&gt;&lt;span class="lnt" id="code-1-41"&gt;41
&lt;/span&gt;&lt;span class="lnt" id="code-1-42"&gt;42
&lt;/span&gt;&lt;span class="lnt" id="code-1-43"&gt;43
&lt;/span&gt;&lt;span class="lnt" id="code-1-44"&gt;44
&lt;/span&gt;&lt;span class="lnt" id="code-1-45"&gt;45
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;lv_obj_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;stat_col_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;lv_obj_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt; &lt;span class="n"&gt;move&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;LV_TRACE_OBJ_CREATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;begin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;lv_style_t&lt;/span&gt; &lt;span class="n"&gt;style_main&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;lv_style_t&lt;/span&gt; &lt;span class="n"&gt;style_main_dark&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;lv_style_t&lt;/span&gt; &lt;span class="n"&gt;style_bar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;style_inited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;style_inited&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_main&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_set_height&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_main&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;lv_pct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_set_flex_cross_place&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_main&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LV_FLEX_ALIGN_CENTER&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_set_pad_row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_main&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UNIT_SM&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_main_dark&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_set_text_color&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_main_dark&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SURFACE_PRIMARY_DARK&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_bar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_set_width&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_bar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UNIT_MD&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_style_set_flex_grow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_bar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;style_inited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;lv_obj_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;column_0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;column_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_obj_set_name_static&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;column_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;stat_col_#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_obj_add_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;column_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_main&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_obj_bind_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;column_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_main_dark&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;dark_theme&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;lv_obj_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;bar_0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;bar_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;column_0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_bar_set_min_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bar_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_bar_set_max_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bar_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_bar_set_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bar_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;move&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_obj_add_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bar_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;style_bar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;lv_obj_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;lv_label_0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lv_label_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;column_0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_label_set_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lv_label_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_obj_set_style_text_font&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lv_label_0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;geist_semibold_12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;LV_TRACE_OBJ_CREATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;finished&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;column_0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;而且LVGL Pro还支持可视化。简直香爆了！值得一提的是，要在本地使用LVGL Pro的话是&lt;span class="hint" data-hint="感觉这种方案真的挺不错的，不仅降低了广大开发者的开发成本，也是一个很好的变现方式。"&gt;需要订阅的&lt;/span&gt;，想免费用只能在网页端编辑开源项目。下面是&lt;a class="link" href="https://pro.lvgl.io/pricing" target="_blank" rel="noopener"
&gt;订阅价格表&lt;/a&gt;（2026/1/21）：
&lt;div class="shadow-host"&gt;
&lt;template shadowrootmode="open"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 897 521"&gt;&lt;foreignObject xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="897" height="521" style="overflow:visible"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" style="width:897px;height:521px;overflow:visible"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml" id="plans" class="c24" style="color:#0e0e0e;margin:0;inset:auto;animation:auto ease 0s 1 normal none running none;transition:none;will-change:auto;float:none;clear:none;box-shadow:none;text-shadow:none;outline:0;filter:none;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c13" style="color:#0e0e0e;background-color:#f5f7f8;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c4" data-color="0" style="color:#0e0e0e;background-color:#e0f8e5;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Community&lt;/div&gt;&lt;div class="c25" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c27" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Free&lt;/div&gt;&lt;div class="c22" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;a draggable="false" class="c7" aria-disabled="false" target="_blank" rel="noopener noreferrer" href="https://viewer.lvgl.io/" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Open Online Editor&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="c16" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c10" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c36" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;For personal use, open-source projects, and education.&lt;/div&gt;&lt;/div&gt;&lt;div class="c8" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c34" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Use all LVGL Pro features online at &lt;a href="https://viewer.lvgl.io" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box" class="c32"&gt;viewer.lvgl.io&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="c8" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c34" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Completely free with public GitHub repositories.&lt;/div&gt;&lt;/div&gt;&lt;div class="c8" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c34" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Changes cannot be saved, push-to-GitHub feature is coming soon.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="c15" style="color:#0e0e0e;background-color:#fff;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c6" data-color="1" style="color:#0e0e0e;background-color:#e5dafb;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Starter&lt;/div&gt;&lt;div class="c26" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c28" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;$1000 &lt;span class="c29" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;per yr. / seat&lt;/span&gt;&lt;/div&gt;&lt;div class="c23" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;a draggable="false" class="c30" aria-disabled="false" href="https://pro.lvgl.io/account/licenses/buy?plan=Starter&amp;amp;billingInterval=annually" style="color:#fff;background-color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Select Plan&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="c18" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c11" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c37" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Helping startups and freelancers thrive and succeed.&lt;/div&gt;&lt;/div&gt;&lt;div class="c9" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c1" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;For companies with yearly revenue up to &lt;strong style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box" class="c3"&gt;$250k&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="c12" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c2" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;All core features included, available on Windows, Linux, macOS, and in VS Code&lt;/div&gt;&lt;/div&gt;&lt;div class="c9" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c35" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Includes a 30-day free trial, no credit card required&lt;/div&gt;&lt;/div&gt;&lt;div class="c9" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c1" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Recurring monthly or yearly payments&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="c14" style="color:#0e0e0e;background-color:#fff;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c5" data-color="2" style="color:#0e0e0e;background-color:#e5dafb;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Business&lt;/div&gt;&lt;div class="c26" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c28" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;$3000 &lt;span class="c29" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;per yr. / seat&lt;/span&gt;&lt;/div&gt;&lt;div class="c23" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;a draggable="false" class="c30" aria-disabled="false" href="https://pro.lvgl.io/account/licenses/buy?plan=Business&amp;amp;billingInterval=annually" style="color:#fff;background-color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Select Plan&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="c17" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c11" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;div class="c37" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;For companies of any size, with &lt;strong style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box" class="c41"&gt;no limitations&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="c12" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c2" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;All core features included, available on Windows, Linux, macOS, and in VS Code&lt;/div&gt;&lt;/div&gt;&lt;div class="c9" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c35" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Includes a 30-day free trial, no credit card required&lt;/div&gt;&lt;/div&gt;&lt;div class="c9" style="color:#0e0e0e;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="c31" style="color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;path d="M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM10.9502 5.40039C10.6396 5.16746 10.2069 5.2119 9.94922 5.49121L9.89941 5.55078L7.35059 8.94922L5.9502 7.89941C5.61894 7.6512 5.14891 7.71879 4.90039 8.0498C4.66746 8.36038 4.7119 8.79312 4.99121 9.05078L5.0498 9.10059L7.0498 10.6006C7.2089 10.7198 7.40961 10.7703 7.60645 10.7422C7.80313 10.714 7.98133 10.6091 8.10059 10.4502L11.0996 6.44922L11.1426 6.38574C11.3385 6.06029 11.2605 5.63337 10.9502 5.40039Z" fill="currentColor" style="fill:rgb(85,183,105);color:#55b769;background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;div class="c1" style="color:rgba(14,14,14,.88);background-position:0 0;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-blend-mode:normal;mask-position:0% 0%;mask-size:auto;mask-repeat:repeat;mask-origin:border-box;mask-clip:border-box"&gt;Recurring monthly or yearly payments&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;a,span,strong,svg{-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-mask-box-image:none;-webkit-rtl-ordering:logical;-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(0,0,0);-webkit-text-orientation:vertical-right;-webkit-text-stroke-color:rgb(0,0,0);-webkit-text-stroke-width:0px;-webkit-writing-mode:horizontal-tb;accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0,0,0,0);background-image:none;background-origin:padding-box;background-position:0 0;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(0,0,0);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(0,0,0);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:#000;border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-style:none;border-bottom-width:0;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(0,0,0);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(0,0,0);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:#000;border-left-style:none;border-left-width:0;border-right-color:#000;border-right-style:none;border-right-width:0;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:#000;border-top-left-radius:0;border-top-right-radius:0;border-top-style:none;border-top-width:0;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:content-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(0,0,0);caret-shape:auto;clear:none;clip-path:none;clip-rule:nonzero;clip:auto;color-interpolation-filters:linearrgb;color-interpolation:srgb;color-rendering:auto;color:#000;column-count:auto;column-gap:normal;column-rule-color:rgb(0,0,0);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;content:normal;corner-bottom-left-shape:round;corner-bottom-right-shape:round;corner-end-end-shape:round;corner-end-start-shape:round;corner-start-end-shape:round;corner-start-start-shape:round;corner-top-left-shape:round;corner-top-right-shape:round;cx:0px;cy:0px;d:none;direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill-opacity:1;fill-rule:nonzero;fill:rgb(0,0,0);filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0,0,0);flood-opacity:1;font-family:"Noto Sans SC";font-kerning:auto;font-language-override:normal;font-optical-sizing:auto;font-palette:normal;font-size-adjust:none;font-size:16px;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-variant:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interest-delay-end:normal;interest-delay-start:normal;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255,255,255);line-break:auto;line-height:normal;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0;margin-inline-end:0;margin-inline-start:0;margin-left:0;margin-right:0;margin-top:0;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0;min-inline-size:0px;min-width:0;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:#000;outline-offset:0px;outline-style:none;outline-width:0;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:normal;overflow-x:visible;overflow-y:visible;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0;padding-inline-end:0px;padding-inline-start:0px;padding-left:0;padding-right:0;padding-top:0;paint-order:normal;perspective-origin:0px 0px;perspective:none;position-anchor:none;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:anchors-visible;position:static;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-target-group:none;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;stop-color:rgb(0,0,0);stop-opacity:1;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;stroke:none;tab-size:8;table-layout:auto;text-align-last:auto;text-align:start;text-anchor:start;text-autospace:no-autospace;text-box-edge:auto;text-box-trim:none;text-decoration-color:rgb(0,0,0);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-decoration:none;text-emphasis-color:rgb(0,0,0);text-emphasis-position:over;text-emphasis-style:none;text-indent:0;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:auto;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;top:auto;transform-origin:0px 0px;transform-style:flat;transform:none;translate:none;unicode-bidi:normal;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1}div{-webkit-border-horizontal-spacing:0px;-webkit-border-image:none;-webkit-border-vertical-spacing:0px;-webkit-box-align:stretch;-webkit-box-decoration-break:slice;-webkit-box-direction:normal;-webkit-box-flex:0;-webkit-box-ordinal-group:1;-webkit-box-orient:horizontal;-webkit-box-pack:start;-webkit-box-reflect:none;-webkit-font-smoothing:auto;-webkit-line-break:auto;-webkit-line-clamp:none;-webkit-mask-box-image-outset:0;-webkit-mask-box-image-repeat:stretch;-webkit-mask-box-image-slice:0 fill;-webkit-mask-box-image-source:none;-webkit-mask-box-image-width:auto;-webkit-mask-box-image:none;-webkit-rtl-ordering:logical;-webkit-text-combine:none;-webkit-text-decorations-in-effect:none;-webkit-text-fill-color:rgb(0,0,0);-webkit-text-orientation:vertical-right;-webkit-text-stroke-color:rgb(0,0,0);-webkit-text-stroke-width:0px;-webkit-writing-mode:horizontal-tb;accent-color:auto;align-content:normal;align-items:normal;align-self:auto;alignment-baseline:auto;appearance:none;backdrop-filter:none;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:rgba(0,0,0,0);background-image:none;background-origin:padding-box;background-position:0 0;background-repeat:repeat;background-size:auto;baseline-shift:0px;baseline-source:auto;block-size:auto;border-block-end-color:rgb(0,0,0);border-block-end-style:none;border-block-end-width:0px;border-block-start-color:rgb(0,0,0);border-block-start-style:none;border-block-start-width:0px;border-bottom-color:#000;border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-style:none;border-bottom-width:0;border-collapse:separate;border-end-end-radius:0px;border-end-start-radius:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:rgb(0,0,0);border-inline-end-style:none;border-inline-end-width:0px;border-inline-start-color:rgb(0,0,0);border-inline-start-style:none;border-inline-start-width:0px;border-left-color:#000;border-left-style:none;border-left-width:0;border-right-color:#000;border-right-style:none;border-right-width:0;border-start-end-radius:0px;border-start-start-radius:0px;border-top-color:#000;border-top-left-radius:0;border-top-right-radius:0;border-top-style:none;border-top-width:0;bottom:auto;box-decoration-break:slice;box-shadow:none;box-sizing:content-box;break-after:auto;break-before:auto;break-inside:auto;buffered-rendering:auto;caption-side:top;caret-color:rgb(0,0,0);caret-shape:auto;clear:none;clip-path:none;clip-rule:nonzero;clip:auto;color-interpolation-filters:linearrgb;color-interpolation:srgb;color-rendering:auto;color:#000;column-count:auto;column-gap:normal;column-rule-color:rgb(0,0,0);column-rule-style:none;column-rule-width:0px;column-span:none;column-width:auto;contain-intrinsic-block-size:none;contain-intrinsic-height:none;contain-intrinsic-inline-size:none;contain-intrinsic-size:none;contain-intrinsic-width:none;content:normal;corner-bottom-left-shape:round;corner-bottom-right-shape:round;corner-end-end-shape:round;corner-end-start-shape:round;corner-start-end-shape:round;corner-start-start-shape:round;corner-top-left-shape:round;corner-top-right-shape:round;cx:0px;cy:0px;d:none;direction:ltr;display:inline;dominant-baseline:auto;dynamic-range-limit:no-limit;empty-cells:show;field-sizing:fixed;fill-opacity:1;fill-rule:nonzero;fill:rgb(0,0,0);filter:none;flex-basis:auto;flex-direction:row;flex-grow:0;flex-shrink:1;flex-wrap:nowrap;float:none;flood-color:rgb(0,0,0);flood-opacity:1;font-family:"Noto Sans SC";font-kerning:auto;font-language-override:normal;font-optical-sizing:auto;font-palette:normal;font-size-adjust:none;font-size:16px;font-stretch:100%;font-style:normal;font-synthesis-small-caps:auto;font-synthesis-style:auto;font-synthesis-weight:auto;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-emoji:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-variant:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-start:auto;grid-row-end:auto;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;hyphenate-character:auto;hyphenate-limit-chars:auto;hyphens:manual;image-orientation:from-image;image-rendering:auto;initial-letter:normal;inline-size:auto;inset-block-end:auto;inset-block-start:auto;inset-inline-end:auto;inset-inline-start:auto;interest-delay-end:normal;interest-delay-start:normal;interpolate-size:numeric-only;isolation:auto;justify-content:normal;justify-items:normal;justify-self:auto;left:auto;letter-spacing:normal;lighting-color:rgb(255,255,255);line-break:auto;line-height:normal;list-style-image:none;list-style-position:outside;list-style-type:disc;margin-block-end:0px;margin-block-start:0px;margin-bottom:0;margin-inline-end:0;margin-inline-start:0;margin-left:0;margin-right:0;margin-top:0;marker-end:none;marker-mid:none;marker-start:none;mask-clip:border-box;mask-composite:add;mask-image:none;mask-mode:match-source;mask-origin:border-box;mask-position:0% 0%;mask-repeat:repeat;mask-size:auto;mask-type:luminance;math-depth:0;math-shift:normal;math-style:normal;max-block-size:none;max-height:none;max-inline-size:none;max-width:none;min-block-size:0px;min-height:0;min-inline-size:0px;min-width:0;mix-blend-mode:normal;object-fit:fill;object-position:50% 50%;object-view-box:none;offset-anchor:auto;offset-distance:0px;offset-path:none;offset-position:normal;offset-rotate:auto 0deg;opacity:1;order:0;orphans:2;outline-color:#000;outline-offset:0px;outline-style:none;outline-width:0;overflow-anchor:auto;overflow-block:visible;overflow-clip-margin:0px;overflow-inline:visible;overflow-wrap:normal;overflow-x:visible;overflow-y:visible;overscroll-behavior-block:auto;overscroll-behavior-inline:auto;padding-block-end:0px;padding-block-start:0px;padding-bottom:0;padding-inline-end:0px;padding-inline-start:0px;padding-left:0;padding-right:0;padding-top:0;paint-order:normal;perspective-origin:0px 0px;perspective:none;position-anchor:none;position-area:none;position-try-fallbacks:none;position-try-order:normal;position-visibility:anchors-visible;position:static;r:0px;resize:none;right:auto;rotate:none;row-gap:normal;ruby-align:space-around;ruby-position:over;rx:auto;ry:auto;scale:none;scroll-behavior:auto;scroll-initial-target:none;scroll-margin-block-end:0px;scroll-margin-block-start:0px;scroll-margin-inline-end:0px;scroll-margin-inline-start:0px;scroll-marker-group:none;scroll-padding-block-end:auto;scroll-padding-block-start:auto;scroll-padding-inline-end:auto;scroll-padding-inline-start:auto;scroll-target-group:none;scroll-timeline-axis:block;scroll-timeline-name:none;scrollbar-color:auto;scrollbar-gutter:auto;scrollbar-width:auto;shape-image-threshold:0;shape-margin:0px;shape-outside:none;shape-rendering:auto;stop-color:rgb(0,0,0);stop-opacity:1;stroke-dasharray:none;stroke-dashoffset:0px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1px;stroke:none;tab-size:8;table-layout:auto;text-align-last:auto;text-align:start;text-anchor:start;text-autospace:no-autospace;text-box-edge:auto;text-box-trim:none;text-decoration-color:rgb(0,0,0);text-decoration-line:none;text-decoration-skip-ink:auto;text-decoration-style:solid;text-decoration:none;text-emphasis-color:rgb(0,0,0);text-emphasis-position:over;text-emphasis-style:none;text-indent:0;text-overflow:clip;text-rendering:auto;text-shadow:none;text-size-adjust:auto;text-spacing-trim:normal;text-transform:none;text-underline-position:auto;text-wrap-mode:wrap;text-wrap-style:auto;top:auto;transform-origin:0px 0px;transform-style:flat;transform:none;translate:none;unicode-bidi:isolate;vector-effect:none;vertical-align:baseline;view-timeline-axis:block;view-timeline-inset:auto;view-timeline-name:none;visibility:visible;white-space-collapse:collapse;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:0px;writing-mode:horizontal-tb;x:0px;y:0px;z-index:auto;zoom:1}svg{overflow:visible}.c1{-webkit-font-smoothing:antialiased;-webkit-text-decorations-in-effect:underline;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);block-size:39px;border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:13px;height:39px;inline-size:225.672px;line-height:19.5px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:rgba(14,14,14,.88);perspective-origin:112.828px 19.5px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:1px;text-decoration:underline 1px dotted;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:2.4375px;text-wrap-style:pretty;transform-origin:112.836px 19.5px;white-space-collapse:preserve-breaks;width:225.672px}.c2{-webkit-font-smoothing:antialiased;-webkit-text-decorations-in-effect:underline;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);block-size:58.5px;border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:13px;height:58.5px;inline-size:225.672px;line-height:19.5px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:rgba(14,14,14,.88);perspective-origin:112.828px 29.25px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:1px;text-decoration:underline 1px dotted;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:2.4375px;text-wrap-style:pretty;transform-origin:112.836px 29.25px;white-space-collapse:preserve-breaks;width:225.672px}.c3{-webkit-font-smoothing:antialiased;-webkit-text-decorations-in-effect:underline;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);font-family:Inter,"Inter Fallback";font-size:13px;font-weight:600;line-height:19.5px;outline-color:rgba(14,14,14,.88);text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:2.4375px;text-wrap-style:pretty;white-space-collapse:preserve-breaks}.c4{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;background-color:#e0f8e5;block-size:28px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-bottom-left-radius:9999px;border-bottom-right-radius:9999px;border-end-end-radius:9999px;border-end-start-radius:9999px;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-start-end-radius:9999px;border-start-start-radius:9999px;border-top-color:#0e0e0e;border-top-left-radius:9999px;border-top-right-radius:9999px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:flex;font-family:"Geist Mono","Geist Mono Fallback";font-size:14px;font-weight:600;height:28px;inline-size:110.125px;justify-content:center;letter-spacing:.28px;line-height:20px;max-inline-size:100%;max-width:100%;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:multiply;outline-color:#0e0e0e;overflow-block:hidden;overflow-inline:hidden;overflow-x:hidden;overflow-y:hidden;padding-block-end:4px;padding-block-start:4px;padding-bottom:4px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:4px;perspective-origin:55.0625px 14px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-overflow:ellipsis;text-rendering:optimizelegibility;text-size-adjust:100%;text-transform:uppercase;text-underline-offset:auto;transform-origin:55.0625px 14px;width:110.125px}.c5{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;background-color:#e5dafb;block-size:28px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-bottom-left-radius:9999px;border-bottom-right-radius:9999px;border-end-end-radius:9999px;border-end-start-radius:9999px;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-start-end-radius:9999px;border-start-start-radius:9999px;border-top-color:#0e0e0e;border-top-left-radius:9999px;border-top-right-radius:9999px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:flex;font-family:"Geist Mono","Geist Mono Fallback";font-size:14px;font-weight:600;height:28px;inline-size:101.453px;justify-content:center;letter-spacing:.28px;line-height:20px;max-inline-size:100%;max-width:100%;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:multiply;outline-color:#0e0e0e;overflow-block:hidden;overflow-inline:hidden;overflow-x:hidden;overflow-y:hidden;padding-block-end:4px;padding-block-start:4px;padding-bottom:4px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:4px;perspective-origin:50.7188px 14px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-overflow:ellipsis;text-rendering:optimizelegibility;text-size-adjust:100%;text-transform:uppercase;text-underline-offset:auto;transform-origin:50.7266px 14px;width:101.453px}.c6{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;background-color:#e5dafb;block-size:28px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-bottom-left-radius:9999px;border-bottom-right-radius:9999px;border-end-end-radius:9999px;border-end-start-radius:9999px;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-start-end-radius:9999px;border-start-start-radius:9999px;border-top-color:#0e0e0e;border-top-left-radius:9999px;border-top-right-radius:9999px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:flex;font-family:"Geist Mono","Geist Mono Fallback";font-size:14px;font-weight:600;height:28px;inline-size:92.7656px;justify-content:center;letter-spacing:.28px;line-height:20px;max-inline-size:100%;max-width:100%;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;mix-blend-mode:multiply;outline-color:#0e0e0e;overflow-block:hidden;overflow-inline:hidden;overflow-x:hidden;overflow-y:hidden;padding-block-end:4px;padding-block-start:4px;padding-bottom:4px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:4px;perspective-origin:46.375px 14px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-overflow:ellipsis;text-rendering:optimizelegibility;text-size-adjust:100%;text-transform:uppercase;text-underline-offset:auto;transform-origin:46.3828px 14px;width:92.7656px}.c7{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;block-size:32px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-end-end-radius:6px;border-end-start-radius:6px;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:#0e0e0e;border-top-left-radius:6px;border-top-right-radius:6px;box-shadow:rgba(14,14,14,.24) 0 0 0 1px inset;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:4px;column-rule-color:rgb(14,14,14);display:flex;flex-basis:0%;flex-grow:1;font-family:Inter,"Inter Fallback";font-size:14px;font-weight:600;height:32px;inline-size:249.656px;justify-content:center;line-height:16px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;padding-block-end:8px;padding-block-start:8px;padding-bottom:8px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:8px;perspective-origin:124.828px 16px;row-gap:4px;text-align:center;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-mode:nowrap;transform-origin:124.828px 16px;width:249.656px}.c8{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;block-size:39px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;bottom:0;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:8px;column-rule-color:rgb(14,14,14);display:flex;font-family:Inter,"Inter Fallback";height:39px;inline-size:249.656px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;left:0;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 19.5px;position:relative;right:0;row-gap:8px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;top:0;transform-origin:124.828px 19.5px;width:249.656px}.c9{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;block-size:39px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;bottom:0;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:8px;column-rule-color:rgb(14,14,14);display:flex;font-family:Inter,"Inter Fallback";height:39px;inline-size:249.672px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;left:0;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 19.5px;position:relative;right:0;row-gap:8px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;top:0;transform-origin:124.836px 19.5px;width:249.672px}.c10{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;block-size:45px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;bottom:0;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:8px;column-rule-color:rgb(14,14,14);display:flex;font-family:Inter,"Inter Fallback";height:45px;inline-size:249.656px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;left:0;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 22.5px;position:relative;right:0;row-gap:8px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;top:0;transform-origin:124.828px 22.5px;width:249.656px}.c11{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;block-size:45px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;bottom:0;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:8px;column-rule-color:rgb(14,14,14);display:flex;font-family:Inter,"Inter Fallback";height:45px;inline-size:249.672px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;left:0;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 22.5px;position:relative;right:0;row-gap:8px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;top:0;transform-origin:124.836px 22.5px;width:249.672px}.c12{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:center;block-size:58.5px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;bottom:0;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:8px;column-rule-color:rgb(14,14,14);display:flex;font-family:Inter,"Inter Fallback";height:58.5px;inline-size:249.672px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;left:0;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 29.25px;position:relative;right:0;row-gap:8px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;top:0;transform-origin:124.836px 29.25px;width:249.672px}.c13{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:flex-start;background-color:#f5f7f8;block-size:518.891px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-bottom-left-radius:16px;border-end-start-radius:16px;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-start-start-radius:16px;border-top-color:#0e0e0e;border-top-left-radius:16px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:32px;column-rule-color:rgb(14,14,14);display:flex;flex-basis:0%;flex-direction:column;flex-grow:1;flex-shrink:0;font-family:Inter,"Inter Fallback";height:518.891px;inline-size:297.656px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;padding-block-end:24px;padding-block-start:24px;padding-bottom:24px;padding-inline-end:24px;padding-inline-start:24px;padding-left:24px;padding-right:24px;padding-top:24px;perspective-origin:148.828px 259.438px;row-gap:32px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:148.828px 259.445px;width:297.656px}.c14{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:flex-start;background-color:#fff;block-size:518.891px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-bottom-right-radius:16px;border-end-end-radius:16px;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgba(14,14,14,0.12);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(14,14,14,.12);border-left-style:solid;border-left-width:1px;border-right-color:#0e0e0e;border-start-end-radius:16px;border-top-color:#0e0e0e;border-top-right-radius:16px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:32px;column-rule-color:rgb(14,14,14);display:flex;flex-basis:0%;flex-direction:column;flex-grow:1;flex-shrink:0;font-family:Inter,"Inter Fallback";height:518.891px;inline-size:298.672px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;padding-block-end:24px;padding-block-start:24px;padding-bottom:24px;padding-inline-end:24px;padding-inline-start:24px;padding-left:24px;padding-right:24px;padding-top:24px;perspective-origin:149.328px 259.438px;row-gap:32px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:149.336px 259.445px;width:298.672px}.c15{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:flex-start;background-color:#fff;block-size:518.891px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgba(14,14,14,0.12);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(14,14,14,.12);border-left-style:solid;border-left-width:1px;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:32px;column-rule-color:rgb(14,14,14);display:flex;flex-basis:0%;flex-direction:column;flex-grow:1;flex-shrink:0;font-family:Inter,"Inter Fallback";height:518.891px;inline-size:298.672px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;padding-block-end:24px;padding-block-start:24px;padding-bottom:24px;padding-inline-end:24px;padding-inline-start:24px;padding-left:24px;padding-right:24px;padding-top:24px;perspective-origin:149.328px 259.438px;row-gap:32px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:149.336px 259.445px;width:298.672px}.c16{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:flex-start;block-size:210px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:16px;column-rule-color:rgb(14,14,14);display:flex;flex-direction:column;font-family:Inter,"Inter Fallback";height:210px;inline-size:249.656px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 105px;row-gap:16px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.828px 105px;width:249.656px}.c17{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:flex-start;block-size:229.5px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:16px;column-rule-color:rgb(14,14,14);display:flex;flex-direction:column;font-family:Inter,"Inter Fallback";height:229.5px;inline-size:249.672px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 114.75px;row-gap:16px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.836px 114.75px;width:249.672px}.c18{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);align-items:flex-start;block-size:284.5px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:16px;column-rule-color:rgb(14,14,14);display:flex;flex-direction:column;font-family:Inter,"Inter Fallback";height:284.5px;inline-size:249.672px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 142.25px;row-gap:16px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.836px 142.25px;width:249.672px}.c19{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);background-color:#fff;block-size:112px;border-block-end-color:rgba(14,14,14,0.16);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(14,14,14,0.16);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(14,14,14,.16);border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-bottom-style:solid;border-bottom-width:1px;border-end-end-radius:8px;border-end-start-radius:8px;border-inline-end-color:rgba(14,14,14,0.16);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(14,14,14,0.16);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(14,14,14,.16);border-left-style:solid;border-left-width:1px;border-right-color:rgba(14,14,14,.16);border-right-style:solid;border-right-width:1px;border-start-end-radius:8px;border-start-start-radius:8px;border-top-color:rgba(14,14,14,.16);border-top-left-radius:8px;border-top-right-radius:8px;border-top-style:solid;border-top-width:1px;bottom:66.5px;box-shadow:rgba(0,0,0,.1) 0 10px 15px -3px,rgba(0,0,0,.1) 0 4px 6px -4px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:block;font-family:Inter,"Inter Fallback";height:112px;inline-size:320px;inset-block-end:66.5px;inset-block-start:-120px;inset-inline-end:-195.156px;inset-inline-start:124.828px;left:124.828px;line-height:24px;max-inline-size:320px;max-width:320px;opacity:0;outline-color:#0e0e0e;padding-block-end:16px;padding-block-start:16px;padding-bottom:16px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:16px;perspective-origin:160px 56px;position:absolute;right:-195.156px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;top:-120px;transform-origin:160px 56px;transform:matrix(1,0,0,1,-160,0);white-space-collapse:preserve-breaks;width:320px;z-index:110}.c20{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);background-color:#fff;block-size:73px;border-block-end-color:rgba(14,14,14,0.16);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(14,14,14,0.16);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(14,14,14,.16);border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-bottom-style:solid;border-bottom-width:1px;border-end-end-radius:8px;border-end-start-radius:8px;border-inline-end-color:rgba(14,14,14,0.16);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(14,14,14,0.16);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(14,14,14,.16);border-left-style:solid;border-left-width:1px;border-right-color:rgba(14,14,14,.16);border-right-style:solid;border-right-width:1px;border-start-end-radius:8px;border-start-start-radius:8px;border-top-color:rgba(14,14,14,.16);border-top-left-radius:8px;border-top-right-radius:8px;border-top-style:solid;border-top-width:1px;bottom:47px;box-shadow:rgba(0,0,0,.1) 0 10px 15px -3px,rgba(0,0,0,.1) 0 4px 6px -4px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:block;font-family:Inter,"Inter Fallback";height:73px;inline-size:320px;inset-block-end:47px;inset-block-start:-81px;inset-inline-end:-195.156px;inset-inline-start:124.828px;left:124.828px;line-height:24px;max-inline-size:320px;max-width:320px;opacity:0;outline-color:#0e0e0e;padding-block-end:16px;padding-block-start:16px;padding-bottom:16px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:16px;perspective-origin:160px 36.5px;position:absolute;right:-195.156px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;top:-81px;transform-origin:160px 36.5px;transform:matrix(1,0,0,1,-160,0);white-space-collapse:preserve-breaks;width:320px;z-index:110}.c21{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);background-color:#fff;block-size:92.5px;border-block-end-color:rgba(14,14,14,0.16);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(14,14,14,0.16);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(14,14,14,.16);border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-bottom-style:solid;border-bottom-width:1px;border-end-end-radius:8px;border-end-start-radius:8px;border-inline-end-color:rgba(14,14,14,0.16);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(14,14,14,0.16);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(14,14,14,.16);border-left-style:solid;border-left-width:1px;border-right-color:rgba(14,14,14,.16);border-right-style:solid;border-right-width:1px;border-start-end-radius:8px;border-start-start-radius:8px;border-top-color:rgba(14,14,14,.16);border-top-left-radius:8px;border-top-right-radius:8px;border-top-style:solid;border-top-width:1px;bottom:47px;box-shadow:rgba(0,0,0,.1) 0 10px 15px -3px,rgba(0,0,0,.1) 0 4px 6px -4px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:block;font-family:Inter,"Inter Fallback";height:92.5px;inline-size:320px;inset-block-end:47px;inset-block-start:-100.5px;inset-inline-end:-195.156px;inset-inline-start:124.828px;left:124.828px;line-height:24px;max-inline-size:320px;max-width:320px;opacity:0;outline-color:#0e0e0e;padding-block-end:16px;padding-block-start:16px;padding-bottom:16px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:16px;perspective-origin:160px 46.25px;position:absolute;right:-195.156px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;top:-100.5px;transform-origin:160px 46.25px;transform:matrix(1,0,0,1,-160,0);white-space-collapse:preserve-breaks;width:320px;z-index:110}.c22{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);block-size:32px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:8px;column-rule-color:rgb(14,14,14);display:flex;font-family:Inter,"Inter Fallback";height:32px;inline-size:249.656px;line-height:24px;margin-block-start:24px;margin-top:24px;outline-color:#0e0e0e;perspective-origin:124.828px 16px;row-gap:8px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.828px 16px;width:249.656px}.c23{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);block-size:32px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-gap:8px;column-rule-color:rgb(14,14,14);display:flex;font-family:Inter,"Inter Fallback";height:32px;inline-size:249.672px;line-height:24px;margin-block-start:24px;margin-top:24px;outline-color:#0e0e0e;perspective-origin:124.828px 16px;row-gap:8px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.836px 16px;width:249.672px}.c24{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);block-size:520.891px;border-block-end-color:rgba(14,14,14,0.12);border-block-end-style:solid;border-block-end-width:1px;border-block-start-color:rgba(14,14,14,0.12);border-block-start-style:solid;border-block-start-width:1px;border-bottom-color:rgba(14,14,14,.12);border-bottom-left-radius:16px;border-bottom-right-radius:16px;border-bottom-style:solid;border-bottom-width:1px;border-end-end-radius:16px;border-end-start-radius:16px;border-inline-end-color:rgba(14,14,14,0.12);border-inline-end-style:solid;border-inline-end-width:1px;border-inline-start-color:rgba(14,14,14,0.12);border-inline-start-style:solid;border-inline-start-width:1px;border-left-color:rgba(14,14,14,.12);border-left-style:solid;border-left-width:1px;border-right-color:rgba(14,14,14,.12);border-right-style:solid;border-right-width:1px;border-start-end-radius:16px;border-start-start-radius:16px;border-top-color:rgba(14,14,14,.12);border-top-left-radius:16px;border-top-right-radius:16px;border-top-style:solid;border-top-width:1px;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:flex;font-family:Inter,"Inter Fallback";height:520.891px;inline-size:897px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:448.5px 260.438px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:448.5px 260.445px;width:897px}.c25{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);block-size:94.3906px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:block;flex-wrap:wrap;font-family:Inter,"Inter Fallback";height:94.3906px;inline-size:249.656px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 47.1875px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.828px 47.1953px;width:249.656px}.c26{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);block-size:94.3906px;border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:block;flex-wrap:wrap;font-family:Inter,"Inter Fallback";height:94.3906px;inline-size:249.672px;line-height:24px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#0e0e0e;perspective-origin:124.828px 47.1875px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.836px 47.1953px;width:249.672px}.c27{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:block;font-family:Inter,"Inter Fallback";font-size:32px;font-weight:700;inline-size:249.656px;letter-spacing:-.96px;line-height:38.4px;outline-color:#0e0e0e;perspective-origin:124.828px 19.1875px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.828px 19.1953px;width:249.656px}.c28{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);display:block;font-family:Inter,"Inter Fallback";font-size:32px;font-weight:700;inline-size:249.672px;letter-spacing:-.96px;line-height:38.4px;outline-color:#0e0e0e;perspective-origin:124.828px 19.1875px;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:124.836px 19.1953px;width:249.672px}.c29{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(14,14,14);-webkit-text-stroke-color:rgb(14,14,14);border-block-end-color:rgb(14,14,14);border-block-start-color:rgb(14,14,14);border-bottom-color:#0e0e0e;border-inline-end-color:rgb(14,14,14);border-inline-start-color:rgb(14,14,14);border-left-color:#0e0e0e;border-right-color:#0e0e0e;border-top-color:#0e0e0e;box-sizing:border-box;caret-color:rgb(14,14,14);color:#0e0e0e;column-rule-color:rgb(14,14,14);font-family:Inter,"Inter Fallback";font-weight:600;letter-spacing:-.16px;line-height:19.2px;margin-block-end:4px;margin-bottom:4px;outline-color:#0e0e0e;text-decoration-color:rgb(14,14,14);text-decoration-thickness:auto;text-emphasis-color:rgb(14,14,14);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-mode:nowrap}.c30{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(255,255,255);-webkit-text-stroke-color:rgb(255,255,255);align-items:center;background-color:#0e0e0e;block-size:32px;border-block-end-color:rgb(255,255,255);border-block-start-color:rgb(255,255,255);border-bottom-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-end-end-radius:6px;border-end-start-radius:6px;border-inline-end-color:rgb(255,255,255);border-inline-start-color:rgb(255,255,255);border-left-color:#fff;border-right-color:#fff;border-start-end-radius:6px;border-start-start-radius:6px;border-top-color:#fff;border-top-left-radius:6px;border-top-right-radius:6px;box-sizing:border-box;caret-color:rgb(255,255,255);color:#fff;column-gap:4px;column-rule-color:rgb(255,255,255);display:flex;flex-basis:0%;flex-grow:1;font-family:Inter,"Inter Fallback";font-size:14px;font-weight:600;height:32px;inline-size:249.672px;justify-content:center;line-height:16px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#fff;padding-block-end:8px;padding-block-start:8px;padding-bottom:8px;padding-inline-end:16px;padding-inline-start:16px;padding-left:16px;padding-right:16px;padding-top:8px;perspective-origin:124.828px 16px;row-gap:4px;text-align:center;text-decoration-color:rgb(255,255,255);text-decoration-thickness:auto;text-emphasis-color:rgb(255,255,255);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-mode:nowrap;transform-origin:124.836px 16px;width:249.672px}.c31{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgb(85,183,105);-webkit-text-stroke-color:rgb(85,183,105);align-self:flex-start;block-size:16px;border-block-end-color:rgb(85,183,105);border-block-start-color:rgb(85,183,105);border-bottom-color:#55b769;border-inline-end-color:rgb(85,183,105);border-inline-start-color:rgb(85,183,105);border-left-color:#55b769;border-right-color:#55b769;border-top-color:#55b769;box-sizing:border-box;caret-color:rgb(85,183,105);color:#55b769;column-rule-color:rgb(85,183,105);display:block;flex-shrink:0;font-family:Inter,"Inter Fallback";height:16px;inline-size:16px;line-height:24px;margin-block-start:2px;margin-top:2px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:#55b769;overflow-block:hidden;overflow-clip-margin:content-box;overflow-inline:hidden;overflow-x:hidden;overflow-y:hidden;perspective-origin:8px 8px;text-decoration-color:rgb(85,183,105);text-decoration-thickness:auto;text-emphasis-color:rgb(85,183,105);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;transform-origin:8px 8px;width:16px}.c32{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);block-size:19.5px;border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);bottom:0;box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:inline-block;font-family:Inter,"Inter Fallback";font-size:13px;font-weight:600;height:19.5px;inline-size:83.3281px;inset-block-end:0px;inset-block-start:0px;inset-inline-end:0px;inset-inline-start:0px;left:0;line-height:19.5px;max-inline-size:100%;max-width:100%;outline-color:rgba(14,14,14,.88);overflow-block:hidden;overflow-inline:hidden;overflow-x:hidden;overflow-y:hidden;perspective-origin:41.6562px 9.75px;position:relative;right:0;text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-overflow:ellipsis;text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-mode:nowrap;text-wrap-style:pretty;top:0;transform-origin:41.6641px 9.75px;vertical-align:top;width:83.3281px}.c33{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);block-size:1px;border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);bottom:1px;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);content:"";display:block;font-family:Inter,"Inter Fallback";font-size:13px;font-weight:600;height:1px;inline-size:83.3281px;inset-block-end:1px;inset-block-start:17.5px;inset-inline-end:0px;inset-inline-start:0px;left:0;line-height:19.5px;outline-color:rgba(14,14,14,.88);perspective-origin:41.6562px 0.5px;position:absolute;right:0;text-decoration-color:rgba(14,14,14,0.88);text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-wrap-mode:nowrap;text-wrap-style:pretty;top:17.5px;transform-origin:41.6641px 0.5px;transform:matrix(0,0,0,1,0,0);width:83.3281px}.c34{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);block-size:39px;border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:13px;height:39px;inline-size:225.656px;line-height:19.5px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:rgba(14,14,14,.88);perspective-origin:112.828px 19.5px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-style:pretty;transform-origin:112.828px 19.5px;white-space-collapse:preserve-breaks;width:225.656px}.c35{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);block-size:39px;border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:13px;height:39px;inline-size:225.672px;line-height:19.5px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:rgba(14,14,14,.88);perspective-origin:112.828px 19.5px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-style:pretty;transform-origin:112.836px 19.5px;white-space-collapse:preserve-breaks;width:225.672px}.c36{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);block-size:45px;border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:15px;height:45px;inline-size:249.656px;line-height:22.5px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:rgba(14,14,14,.88);perspective-origin:124.828px 22.5px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-style:pretty;transform-origin:124.828px 22.5px;white-space-collapse:preserve-breaks;width:249.656px}.c37{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);block-size:45px;border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:15px;height:45px;inline-size:249.672px;line-height:22.5px;min-block-size:auto;min-height:auto;min-inline-size:auto;min-width:auto;outline-color:rgba(14,14,14,.88);perspective-origin:124.828px 22.5px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-style:pretty;transform-origin:124.836px 22.5px;white-space-collapse:preserve-breaks;width:249.672px}.c38{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:13px;inline-size:286px;line-height:19.5px;outline-color:rgba(14,14,14,.88);perspective-origin:143px 19.5px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-style:pretty;transform-origin:143px 19.5px;white-space-collapse:preserve-breaks;width:286px}.c39{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:13px;inline-size:286px;line-height:19.5px;outline-color:rgba(14,14,14,.88);perspective-origin:143px 29.25px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-style:pretty;transform-origin:143px 29.25px;white-space-collapse:preserve-breaks;width:286px}.c40{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);display:block;font-family:Inter,"Inter Fallback";font-size:13px;inline-size:286px;line-height:19.5px;outline-color:rgba(14,14,14,.88);perspective-origin:143px 39px;text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-style:pretty;transform-origin:143px 39px;white-space-collapse:preserve-breaks;width:286px}.c41{-webkit-font-smoothing:antialiased;-webkit-text-fill-color:rgba(14,14,14,0.88);-webkit-text-stroke-color:rgba(14,14,14,0.88);border-block-end-color:rgba(14,14,14,0.88);border-block-start-color:rgba(14,14,14,0.88);border-bottom-color:rgba(14,14,14,.88);border-inline-end-color:rgba(14,14,14,0.88);border-inline-start-color:rgba(14,14,14,0.88);border-left-color:rgba(14,14,14,.88);border-right-color:rgba(14,14,14,.88);border-top-color:rgba(14,14,14,.88);box-sizing:border-box;caret-color:rgba(14,14,14,0.88);color:rgba(14,14,14,.88);column-rule-color:rgba(14,14,14,0.88);font-family:Inter,"Inter Fallback";font-size:15px;font-weight:600;line-height:22.5px;outline-color:rgba(14,14,14,.88);text-decoration-color:rgba(14,14,14,0.88);text-decoration-thickness:auto;text-emphasis-color:rgba(14,14,14,0.88);text-rendering:optimizelegibility;text-size-adjust:100%;text-underline-offset:auto;text-wrap-style:pretty;white-space-collapse:preserve-breaks}&lt;/style&gt;&lt;/foreignObject&gt;&lt;/svg&gt;
&lt;/template&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="准备工作"&gt;准备工作
&lt;/h2&gt;&lt;h3 id="安装wsl2"&gt;安装WSL2
&lt;/h3&gt;&lt;p&gt;打开控制面板 - 程序 - 程序和功能或Win+R输入appwiz.cpl，点击启用或关闭Windows功能，勾选以下三项：
&lt;img src="https://blog.ctree.site/p/lvgl-pro-01/20260121185022.png"
width="415"
height="237"
srcset="https://blog.ctree.site/p/lvgl-pro-01/20260121185022_hu_b74286a53b96f69b.png 480w, https://blog.ctree.site/p/lvgl-pro-01/20260121185022_hu_a3da65016982163f.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="175"
data-flex-basis="420px"
&gt;&lt;/p&gt;
&lt;p&gt;如果其中没有Hyper-V，可先尝试进行后续步骤再尝试以下方案：打开终端管理员，粘贴以下代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-2"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-2-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-2-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-2-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-2-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-2-5"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$pkgs = Get-ChildItem &amp;#34;$env:SystemRoot\servicing\Packages\*Hyper-V*.mum&amp;#34; | Select-Object -ExpandProperty Name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;foreach ($pkg in $pkgs) {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dism /online /norestart /add-package:&amp;#34;$env:SystemRoot\servicing\Packages\$pkg&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /All&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="安装lvgl-pro"&gt;安装LVGL Pro
&lt;/h3&gt;&lt;p&gt;前往&lt;a class="link" href="https://github.com/lvgl/lvgl_editor/releases" target="_blank" rel="noopener"
&gt;Releases&lt;/a&gt;页面下载并安装编辑器，随后新建一个项目。编辑器将自动完成Podman镜像拉取和后续工作。如果在这里遇到WSL2不能启动的问题，请打开cmd输入&lt;code&gt;wsl&lt;/code&gt;查看报错并自行搜索解决方法。&lt;/p&gt;
&lt;h3 id="配置podman镜像源"&gt;配置Podman镜像源
&lt;/h3&gt;&lt;p&gt;在开始菜单中找到&lt;code&gt;podman-machine-default&lt;/code&gt;或打开终端输入&lt;code&gt;wsl -d podman-machine-default&lt;/code&gt;。在WSL中输入&lt;code&gt;sudo vi /etc/containers/registries.conf.d/999-podman-machine.conf&lt;/code&gt;，按i进入编辑模式并将配置修改为&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-3"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-3-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-3-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-3-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-3-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-3-5"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;unqualified-search-registries = [&amp;#34;docker.io&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[[registry]]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;prefix = &amp;#34;docker.io&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;location = &amp;#34;docker.1ms.run&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;按esc退出编辑模式，输入:wq保存并退出编辑器。&lt;/p&gt;
&lt;h3 id="集成至现有项目"&gt;集成至现有项目
&lt;/h3&gt;&lt;p&gt;如果你顺利完成了以上操作，不出意外的话可以开始编辑UI、查看预览了。如果你遇到了其他问题，可以跳转至&lt;a class="link" href="#%e8%b8%a9%e5%9d%91" &gt;踩坑&lt;/a&gt;小节或在评论区询问~&lt;/p&gt;
&lt;p&gt;当你完成了UI的设计，点击右上角的
&lt;svg style="display: inline" role="img" aria-label="编译" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;g clip-path="url(#clip0_3513_101)"&gt;
&lt;path d="M5.73668 7.55084L8.84527 10.0681L5.06934 14.731C4.72178 15.1602 4.09208 15.2264 3.66288 14.8788L2.10859 13.6202C1.67938 13.2726 1.6132 12.6429 1.96076 12.2137L5.73668 7.55084Z" fill="currentColor"/&gt;
&lt;path d="M6.55185 1.77715C6.89941 1.34794 7.52911 1.28176 7.95831 1.62932L12.6513 5.42963C13.1235 5.81198 13.3962 6.38824 13.3926 6.9958L13.3727 10.357C13.3677 11.1955 12.395 11.6559 11.7434 11.1282L4.81171 5.51505C4.38251 5.16749 4.31632 4.53779 4.66389 4.10858L6.55185 1.77715Z" fill="currentColor"/&gt;
&lt;/g&gt;
&lt;defs&gt;
&lt;clipPath id="clip0_3513_101"&gt;
&lt;rect width="16" height="16" fill="white"/&gt;
&lt;/clipPath&gt;
&lt;/defs&gt;
&lt;/svg&gt;
按钮即可生成.c/.h文件。接下来，我们只需要在嵌入式工程的CMakeLists.txt中加入相关配置引入子目录即可。以下是我的目录结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-4"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-4-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-4-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-4-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-4-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-4-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-4-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-4-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-4-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-4-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-4-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-4-11"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─Core
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └─Usr
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └─Lvgl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └─Project
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├─CMakeLists.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├─Project.c
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └─Project.h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├─Middlewares
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └─lvgl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└─CMakeLists.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;/CMakeLists.txt：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-5"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-5-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-5-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-5-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-5-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-5-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-5-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-5-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-5-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-5-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-5-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-5-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-5-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-5-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-5-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-5-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-5-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-5-17"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-CMake" data-lang="CMake"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="c"&gt;# 添加UI项目为子项目
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&lt;/span&gt;&lt;span class="nb"&gt;add_subdirectory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_CURRENT_LIST_DIR&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/Core/Usr/Lvgl/Project&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="c"&gt;# lib-ui为子项目的CMakeLists.txt中设置的默认项目名
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 为子项目提供lvgl环境
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&lt;/span&gt;&lt;span class="nb"&gt;target_include_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;lib-ui&lt;/span&gt; &lt;span class="s"&gt;PRIVATE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;Middlewares/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&lt;/span&gt;&lt;span class="c"&gt;# 让当前项目依赖子项目
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&lt;/span&gt;&lt;span class="nb"&gt;target_link_libraries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMAKE_PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;lib-ui&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后在你的嵌入式项目中进行以下调用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-6"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-6-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-6-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-6-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-6-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-6-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-6-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-6-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-6-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-6-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-6-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-6-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-6-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-6-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-6-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-6-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-6-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-6-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-6-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-6-19"&gt;19
&lt;/span&gt;&lt;span class="lnt" id="code-6-20"&gt;20
&lt;/span&gt;&lt;span class="lnt" id="code-6-21"&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;Lvgl/Project/Project.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;StartLvglTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;argument&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_tick_set_cb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;osKernelGetTickCount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_port_disp_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_port_indev_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 以上为驱动初始化
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Project_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 初始化UI项目
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="kt"&gt;lv_obj_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;main_screen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;main_create&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 创建屏幕
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nf"&gt;lv_screen_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main_screen&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 加载屏幕
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 如果不使用screens，也可以直接添加components到默认屏幕
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="c1"&gt;// appbar_create(lv_scr_act(), &amp;#34;Text&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(;;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lv_timer_handler&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;osDelay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="踩坑"&gt;踩坑
&lt;/h2&gt;&lt;h3 id="wsl2提示无法配置网络networkingmode-nat"&gt;WSL2提示无法配置网络(networkingMode Nat)
&lt;/h3&gt;&lt;p&gt;参考&lt;a class="link" href="https://learn.microsoft.com/zh-cn/answers/questions/3874721/wsl2#answer-8216176" target="_blank" rel="noopener"
&gt;WSL2 无法连接互联网 - Microsoft Q&amp;amp;A&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="升级版本"&gt;升级版本
&lt;/h3&gt;&lt;p&gt;从1.0.1升级到1.0.2后出现编译错误的情况，需要进入%appdata%\lvgl-editor删除resources文件夹。&lt;/p&gt;</description></item><item><title>浏览器和URI fragment的虐恋</title><link>https://blog.ctree.site/p/fragile-uri-fragments/</link><pubDate>Mon, 08 Dec 2025 20:06:47 +0800</pubDate><guid>https://blog.ctree.site/p/fragile-uri-fragments/</guid><description>&lt;p&gt;最近在写博客的时候，经常需要引用到外部的链接。为了方便读者定位，我不断寻找着增加跳转精度的方法…&lt;/p&gt;
&lt;p&gt;&lt;code&gt;碎碎念：如果你在本博客文章发现了点击后无法定位的链接，那证明实在是没办法做到了！&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="啥是uri-fragment"&gt;啥是URI fragment？
&lt;/h2&gt;</description></item><item><title>Shadow DOM冷知识</title><link>https://blog.ctree.site/p/shadow-dom-script-and-polyfills/</link><pubDate>Sun, 07 Dec 2025 02:58:33 +0800</pubDate><guid>https://blog.ctree.site/p/shadow-dom-script-and-polyfills/</guid><description>&lt;img src="https://blog.ctree.site/p/shadow-dom-script-and-polyfills/20251209194752.png" alt="Featured image of post Shadow DOM冷知识" /&gt;&lt;h2 id="前言"&gt;前言
&lt;/h2&gt;&lt;h3 id="需求"&gt;需求
&lt;/h3&gt;&lt;p&gt;在编写本站的&lt;a class="link" href="https://blog.ctree.site/friends" &gt;友链&lt;/a&gt;页面，实现可插入html的展示区时，遇到了一个问题：如果在里面写CSS，是可以覆盖全局样式的！&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-0-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-0-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-0-4"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-CSS" data-lang="CSS"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#8ec6ff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://blog.ctree.site/p/shadow-dom-script-and-polyfills/20251207034659.png"
width="493"
height="476"
srcset="https://blog.ctree.site/p/shadow-dom-script-and-polyfills/20251207034659_hu_285231efc21de078.png 480w, https://blog.ctree.site/p/shadow-dom-script-and-polyfills/20251207034659_hu_d271e15c17fe62d2.png 1024w"
loading="lazy"
alt="???"
class="gallery-image"
data-flex-grow="103"
data-flex-basis="248px"
&gt;&lt;/p&gt;
&lt;p&gt;这就很尴尬了。一刀切限制用户使用类型选择器不仅增加了开发成本还要人工审核，毕竟风格统一的页面匹配类型进行修改样式的操作还是挺常用的。那么有没有什么好方法能做到CSS只能在某个作用域下生效呢？当然是使用&lt;code&gt;Shadow DOM&lt;/code&gt;啦。&lt;/p&gt;
&lt;h3 id="使用传统的shadow-dom"&gt;使用传统的Shadow DOM
&lt;/h3&gt;&lt;p&gt;如果你在搜索引擎查找“Shadow DOM”，那么大概会搜到如下的使用方法：&lt;br&gt;
（&lt;a class="link" href="https://developer.mozilla.org/zh-CN/docs/Web/API/Web_components/Using_shadow_DOM#%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%BD%B1%E5%AD%90_dom" target="_blank" rel="noopener"
&gt;使用影子 DOM - Web API | MDN&lt;/a&gt;）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-1"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-1-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-1-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-1-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-1-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-1-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-1-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-1-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-1-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-1-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-1-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-1-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-1-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-1-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-1-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-1-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-1-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-1-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-1-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-1-19"&gt;19
&lt;/span&gt;&lt;span class="lnt" id="code-1-20"&gt;20
&lt;/span&gt;&lt;span class="lnt" id="code-1-21"&gt;21
&lt;/span&gt;&lt;span class="lnt" id="code-1-22"&gt;22
&lt;/span&gt;&lt;span class="lnt" id="code-1-23"&gt;23
&lt;/span&gt;&lt;span class="lnt" id="code-1-24"&gt;24
&lt;/span&gt;&lt;span class="lnt" id="code-1-25"&gt;25
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-template&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 这里是样式 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;attachShadowDOM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 1. 找到所有的template
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;templates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;template.shadow-template&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;templates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 2. 创建Shadow DOM并挂载
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentElement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attachShadow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 3. 设置模式 (open表示外部可以通过shadowRoot属性访问Shadow DOM，closed表示不可以)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;open&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 4. 将template内容插入shadow root
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;运行一下，确实可以用。那就写点东西吧…&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-2"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-2-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-2-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-2-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-2-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-2-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-2-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-2-7"&gt;7
&lt;/span&gt;&lt;span class="lnt" id="code-2-8"&gt;8
&lt;/span&gt;&lt;span class="lnt" id="code-2-9"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-template&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 这里是样式 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;success!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;运行。呃，为什么没弹窗？按F12查看元素，发现确实是成功创建了Shadow DOM。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/shadow-dom-script-and-polyfills/20251207205441.png"
width="327"
height="81"
srcset="https://blog.ctree.site/p/shadow-dom-script-and-polyfills/20251207205441_hu_e95035ca0d99e96d.png 480w, https://blog.ctree.site/p/shadow-dom-script-and-polyfills/20251207205441_hu_ba81febe602fb43d.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="403"
data-flex-basis="968px"
&gt;&lt;/p&gt;
&lt;p&gt;把Shadow DOM挂到body下也没用。好吧，看来是不能在Shadow DOM里面插入代码。那咋办呢？&lt;/p&gt;
&lt;h3 id="使用声明式shadow-dom"&gt;使用声明式Shadow DOM
&lt;/h3&gt;&lt;p&gt;打开上面MDN的链接，把语言切换到英语，你会发现Creating a shadow DOM中多了一段Declaratively with HTML：
&lt;blockquote&gt;
&lt;p&gt;Creating a shadow DOM via JavaScript API might be a good option for client-side rendered applications. For other applications, a server-side rendered UI might have better performance and, therefore, a better user experience. In such cases, you can use the &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; element to declaratively define the shadow DOM. The key to this behavior is the enumerated &lt;code&gt;shadowrootmode&lt;/code&gt; attribute, which can be set to either &lt;code&gt;open&lt;/code&gt; or &lt;code&gt;closed&lt;/code&gt;, the same values as the &lt;code&gt;mode&lt;/code&gt; option of &lt;code&gt;attachShadow()&lt;/code&gt; method.&lt;/p&gt;&lt;span class="cite"&gt;&lt;span&gt;― &lt;/span&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM#declaratively_with_html"&gt;&lt;cite&gt;Using shadow DOM - Web APIs | MDN&lt;/cite&gt;&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
好吧。。中文页面万年不更新。&lt;br&gt;
根据文中所说的，我们把他改成声明式的试试看：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-3"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-3-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-3-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-3-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-3-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-3-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-3-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-3-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-3-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-3-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-3-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-3-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-3-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-3-13"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-template&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;shadowrootmode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;open&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 这里是样式 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;success!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 注意：attachShadowDOM方法已被移除 --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;打开网页…弹窗居然生效了？！没错，仅仅是改成声明式Shadow DOM就已经做到了执行script。至此，简介中的问题已经找到答案了。&lt;/p&gt;
&lt;h2 id="兼容性"&gt;兼容性
&lt;/h2&gt;&lt;p&gt;但是，写前端有一个脑子里一定要有的问题：这个功能能否在大部分浏览器工作？&lt;/p&gt;
&lt;p&gt;根据&lt;a class="link" href="https://caniuse.com/declarative-shadow-dom" target="_blank" rel="noopener"
&gt;Declarative Shadow DOM | Can I use&amp;hellip;&lt;/a&gt;，声明式Shadow DOM的兼容性如下：&lt;/p&gt;
&lt;script type="module" src="https://caniuse.ctree.site/embed.js"&gt;&lt;/script&gt;
&lt;p class="ciu-embed" data-feature="declarative-shadow-dom" data-past="5" data-future="5" data-auto="true"&gt;&lt;/p&gt;
&lt;p&gt;可以看到覆盖率还是挺高的。如果你的网站比较现代，完全不用考虑polyfill！&lt;/p&gt;
&lt;h3 id="兼容chrome-90-110"&gt;兼容Chrome 90-110
&lt;/h3&gt;&lt;p&gt;先来挑个软柿子捏吧。Can I use的Partial Support描述是Uses an older non-standard attribute called &lt;code&gt;shadowroot&lt;/code&gt; instead of the standardized &lt;code&gt;shadowrootmode&lt;/code&gt; attribute. 那我们直接给模板加上旧参数：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-4"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-4-1"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-template&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;shadowrootmode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;open&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;shadowroot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;open&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;打开Chrome 90测试一下，成功了。&lt;/p&gt;
&lt;h3 id="兼容chrome-53-89"&gt;兼容Chrome 53-89
&lt;/h3&gt;&lt;p&gt;再往下的版本就得回滚到Shadow DOM v1了。&lt;/p&gt;
&lt;p class="ciu-embed" data-feature="shadowdomv1" data-past="5" data-future="5" data-auto="true"&gt;&lt;/p&gt;
可以看到，最低可以支持到Chrome 53。先把之前的代码还原：
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-5"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-5-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-5-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-5-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-5-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-5-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-5-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-5-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-5-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-5-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-5-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-5-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-5-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-5-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-5-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-5-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-5-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-5-17"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;attachShadowDOM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 1. 找到所有的template
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;templates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;template.shadow-template&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;templates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 2. 创建Shadow DOM并挂载
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentElement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attachShadow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 3. 设置模式 (open表示外部可以通过shadowRoot属性访问Shadow DOM，closed表示不可以)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;open&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 4. 将template内容插入shadow root
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;因为是polyfill，我们需要加入判断。只有在浏览器不支持shadowRootMode或shadowRoot属性的时候才运行代码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-6"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-6-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-6-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-6-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-6-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-6-5"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-JavaScript" data-lang="JavaScript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supportsDeclarativeShadowDOM&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;HTMLTemplateElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;shadowRootMode&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;HTMLTemplateElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;shadowRoot&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;supportsDeclarativeShadowDOM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Polyfilling Shadow DOM for friends cards&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;现在，在Chrome 89及以下应该也能正常加载到DOM了。但是还有一个遗留问题我们没有解决：&amp;lt;script&amp;gt;块还是被忽略的。在解决这个问题之前，我们先看看脚本在成功加载的声明式Shadow DOM中是什么表现：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-7"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-7-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-7-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-7-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-7-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-7-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-7-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-7-7"&gt;7
&lt;/span&gt;&lt;span class="lnt" id="code-7-8"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Shadow DOM Content&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt; &lt;span class="na"&gt;shadowrootmode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;open&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;red&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;打开浏览器，可以看到：&lt;div style="color: red; user-select: none;"&gt;Shadow DOM Content&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;这说明Shadow DOM里面拿到的document和外部是一样的，&lt;span class="hint" data-hint="当然我们应该也封装不了XD"&gt;无需做任何封装&lt;/span&gt;。那就好办了，直接把里面的所有script都挂载到真实DOM：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-8"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-8-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-8-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-8-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-8-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-8-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-8-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-8-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-8-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-8-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-8-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-8-11"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-JavaScript" data-lang="JavaScript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scripts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;script&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;scripts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// To execute scripts inside non-declarative shadow DOM, we need to move them to light DOM
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nx"&gt;scripts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;script&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里为什么不直接&lt;code&gt;shadowScript.cloneNode(true)&lt;/code&gt;后挂载呢？&lt;del&gt;因为我试了不行&lt;/del&gt;。尝试寻找答案无果，就先这样吧。&lt;/p&gt;
&lt;p&gt;差点忘了，我们还需要支持外部script的加载和module、defer和async等参数。那就再加上几行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-9"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-9-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-9-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-9-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-9-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-9-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-9-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-9-7"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-JavaScript" data-lang="JavaScript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;integrity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;integrity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;integrity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;crossOrigin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;crossOrigin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;crossOrigin&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;async&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;async&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;测试一下，没有任何问题了！&lt;/p&gt;
&lt;h2 id="完整代码"&gt;完整代码
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-10"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-10-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-10-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-10-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-10-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-10-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-10-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-10-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-10-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-10-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-10-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-10-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-10-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-10-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-10-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-10-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-10-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-10-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-10-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-10-19"&gt;19
&lt;/span&gt;&lt;span class="lnt" id="code-10-20"&gt;20
&lt;/span&gt;&lt;span class="lnt" id="code-10-21"&gt;21
&lt;/span&gt;&lt;span class="lnt" id="code-10-22"&gt;22
&lt;/span&gt;&lt;span class="lnt" id="code-10-23"&gt;23
&lt;/span&gt;&lt;span class="lnt" id="code-10-24"&gt;24
&lt;/span&gt;&lt;span class="lnt" id="code-10-25"&gt;25
&lt;/span&gt;&lt;span class="lnt" id="code-10-26"&gt;26
&lt;/span&gt;&lt;span class="lnt" id="code-10-27"&gt;27
&lt;/span&gt;&lt;span class="lnt" id="code-10-28"&gt;28
&lt;/span&gt;&lt;span class="lnt" id="code-10-29"&gt;29
&lt;/span&gt;&lt;span class="lnt" id="code-10-30"&gt;30
&lt;/span&gt;&lt;span class="lnt" id="code-10-31"&gt;31
&lt;/span&gt;&lt;span class="lnt" id="code-10-32"&gt;32
&lt;/span&gt;&lt;span class="lnt" id="code-10-33"&gt;33
&lt;/span&gt;&lt;span class="lnt" id="code-10-34"&gt;34
&lt;/span&gt;&lt;span class="lnt" id="code-10-35"&gt;35
&lt;/span&gt;&lt;span class="lnt" id="code-10-36"&gt;36
&lt;/span&gt;&lt;span class="lnt" id="code-10-37"&gt;37
&lt;/span&gt;&lt;span class="lnt" id="code-10-38"&gt;38
&lt;/span&gt;&lt;span class="lnt" id="code-10-39"&gt;39
&lt;/span&gt;&lt;span class="lnt" id="code-10-40"&gt;40
&lt;/span&gt;&lt;span class="lnt" id="code-10-41"&gt;41
&lt;/span&gt;&lt;span class="lnt" id="code-10-42"&gt;42
&lt;/span&gt;&lt;span class="lnt" id="code-10-43"&gt;43
&lt;/span&gt;&lt;span class="lnt" id="code-10-44"&gt;44
&lt;/span&gt;&lt;span class="lnt" id="code-10-45"&gt;45
&lt;/span&gt;&lt;span class="lnt" id="code-10-46"&gt;46
&lt;/span&gt;&lt;span class="lnt" id="code-10-47"&gt;47
&lt;/span&gt;&lt;span class="lnt" id="code-10-48"&gt;48
&lt;/span&gt;&lt;span class="lnt" id="code-10-49"&gt;49
&lt;/span&gt;&lt;span class="lnt" id="code-10-50"&gt;50
&lt;/span&gt;&lt;span class="lnt" id="code-10-51"&gt;51
&lt;/span&gt;&lt;span class="lnt" id="code-10-52"&gt;52
&lt;/span&gt;&lt;span class="lnt" id="code-10-53"&gt;53
&lt;/span&gt;&lt;span class="lnt" id="code-10-54"&gt;54
&lt;/span&gt;&lt;span class="lnt" id="code-10-55"&gt;55
&lt;/span&gt;&lt;span class="lnt" id="code-10-56"&gt;56
&lt;/span&gt;&lt;span class="lnt" id="code-10-57"&gt;57
&lt;/span&gt;&lt;span class="lnt" id="code-10-58"&gt;58
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-template&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;shadowrootmode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;open&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;shadowroot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;open&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 这里是样式 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;success!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;attachShadowDOM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supportsDeclarativeShadowDOM&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;HTMLTemplateElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;shadowRootMode&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;HTMLTemplateElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;shadowRoot&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;supportsDeclarativeShadowDOM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Polyfilling Shadow DOM&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 1. 找到所有的template
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;templates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;template.shadow-template&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;templates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 2. 创建Shadow DOM并挂载
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentElement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attachShadow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 3. 设置模式 (open表示外部可以通过shadowRoot属性访问Shadow DOM，closed表示不可以)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;open&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 4. 将template内容插入shadow root
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 5. 为了了执行Shadow DOM内的脚本，我们需要将它们移动到真实 DOM
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scripts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;script&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;scripts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;scripts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;script&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 支持外部脚本
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;integrity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;integrity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;integrity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;crossOrigin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;crossOrigin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shadowScript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;crossOrigin&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 支持module, defer和async
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onloadElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;onloadElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onloadElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onloadElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;async&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;async&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="剩下的工作"&gt;剩下的工作？
&lt;/h2&gt;&lt;p&gt;实际上，到这一步还是不能实现需求。回想一下，我们需要在Shadow DOM内写JS，目的就是为了控制里面的元素对吧？然而我们
&lt;a class="codeline" href=#code-7-1 data-block=7 data-line=[1,2,3,4,5,6,7,8]&gt;刚刚测试的时候&lt;/a&gt;只是控制了外面的元素。我们可以试着把&amp;lt;div id=&amp;ldquo;test&amp;rdquo;&amp;gt;放到Shadow DOM内，试一下还能不能实现：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-11"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-11-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-11-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-11-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-11-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-11-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-11-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-11-7"&gt;7
&lt;/span&gt;&lt;span class="lnt" id="code-11-8"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt; &lt;span class="na"&gt;shadowrootmode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;open&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;shadowroot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;open&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Shadow DOM Content&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;red&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;测试一下：&lt;/p&gt;
&lt;div style="user-select: none;"&gt;Shadow DOM Content&lt;/div&gt;
&lt;p&gt;哈哈，果然爆炸了。&lt;/p&gt;
&lt;p&gt;打开F12，发现报错为&lt;code&gt;Uncaught TypeError: Cannot read properties of null (reading 'style')&lt;/code&gt;。&lt;br&gt;
可能你会说，改成&lt;code&gt;document.querySelector('.shadow-host').shadowRoot.getElementById('test')&lt;/code&gt;不就好了？确实，你说得对，但是这样做十分麻烦！想象一下，当你编写一个组件，却需要不断查看它的父布局实现细节…这真的耦合过头了！我们还是希望能够提供一个API，使得组件能在内部直接访问到shadowRoot。但截至2025/12/11日笔者写下这段话时，还没有任何能做到在&lt;code&gt;声明式Shadow DOM&lt;/code&gt;中直接获取shadowRoot的浏览器API。我们需要想办法了。&lt;/p&gt;
&lt;p&gt;那么，这个问题就留到下一篇博客解决吧。&lt;/p&gt;</description></item><item><title>20251205</title><link>https://blog.ctree.site/p/2025-12-05/</link><pubDate>Fri, 05 Dec 2025 03:45:15 +0800</pubDate><guid>https://blog.ctree.site/p/2025-12-05/</guid><description>&lt;p&gt;现在是凌晨的三点四十五分。我躺在上铺的床上，久久不能入睡。&lt;/p&gt;
&lt;p&gt;恍惚间，我好像通过这个上下床回到了很久之前。在我比较小的时候，家里也是这种上下铺的双人床，那时候我和现在一样有一个&lt;span class="hint" data-hint="虽然那时的是一个橙色的热带鱼，现在的是鲨鱼"&gt;宜家抱枕&lt;/span&gt;。这么多和现在一样的事情，可其实一切都不同了。小的时候我总是很开心，那时家里也比较有钱，日子过得无忧无虑。我还记得我有两个iPad 2，每天都热衷于使用FaceTime和爸爸视频通话。那时候真好啊！感觉对世上的一切都充满了兴趣。我会躺在双层床上，用被子把自己蒙住，然后躲起来玩手机。最重要的是，当时的我心里没有一点压力。现在我倒是可以自由地玩手机了，不过也找不到以前的快乐了。&lt;/p&gt;
&lt;p&gt;打字的时候床铺震动了一下，不知为何我回想起了亲人离世时回老家的动车。我躺在上铺，一边难过，一边对未来充满了迷茫。或许是根本不敢相信这种事情真的发生了吧…虽然已经做了准备但是还是…。直到现在都无法接受。无法相信。虽然没有号啕大哭的悲伤，但是心会痛。很难受。&lt;/p&gt;
&lt;p&gt;为什么我见你最后一面的时候没有多陪陪你呢？奶奶。痛苦结束了。希望您在那里可以和爷爷一起幸福。不要担心我。&lt;/p&gt;
&lt;p&gt;似乎我一直都没有做好身为人类的职责，总是在逃避。逃避亲情，逃避友情。我是一个胆小的人。胆小到每天都担心着又有人会离开我。我好怕。&lt;/p&gt;
&lt;p&gt;给过我承诺的人和没有给的人，变成了一个个默默离开、分道扬镳的人。虽说人生本就是无限条道路，能交叉就已经很幸运了。但是离别果然还是好痛，好寂寞。这种感情也没法很好的表达出来…只能在像这样的每个夜晚默默回忆、默默哭泣。&lt;/p&gt;
&lt;p&gt;我不是一个诚实的人。甚至对自己也如此。&lt;/p&gt;
&lt;p&gt;一直以来都是这样吗？我也不知道答案了。&lt;/p&gt;
&lt;p&gt;或许上面一句也是谎言吗，也许吧？&lt;/p&gt;
&lt;p&gt;晚安。&lt;/p&gt;</description></item><item><title>编写中断服务程序时是否需要保存外部函数的形参？</title><link>https://blog.ctree.site/p/8051-isr-things/</link><pubDate>Wed, 03 Dec 2025 10:24:18 +0800</pubDate><guid>https://blog.ctree.site/p/8051-isr-things/</guid><description>&lt;img src="https://blog.ctree.site/p/8051-isr-things/20251203212150.png" alt="Featured image of post 编写中断服务程序时是否需要保存外部函数的形参？" /&gt;&lt;h2 id="前言"&gt;前言
&lt;/h2&gt;&lt;p&gt;在学习8051中断时，我发现有这么一种写法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-0-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-0-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-0-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-0-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-0-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-0-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-0-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-0-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-0-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-0-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-0-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-0-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-0-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-0-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-0-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-0-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-0-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-0-19"&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;_n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_n&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;isr_INT0&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;interrupt&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;EA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 保护现场
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="n"&gt;EA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;EA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 恢复现场
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="n"&gt;EA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;直觉告诉我，这种写法可能不必要…8051的参数传递类似x86里的__fastcall，参数是尽可能优先通过寄存器传递的。（&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/Cx51-User-s-Guide/Language-Extensions/Function-Declarations/Parameters-and-Registers" target="_blank" rel="noopener"
&gt;文档&lt;/a&gt;）就算在delay函数中发生了中断，寄存器的值也应该会跟着断点一起保存…吧？口说无凭，我们得想个办法验证一下。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;本次复现环境为μVision5.38.0.0 with Microchip AT89C51&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="尝试"&gt;尝试
&lt;/h2&gt;&lt;p&gt;我们仿照上面的代码，但是不对n进行保护现场：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-1"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-1-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-1-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-1-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-1-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-1-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-1-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-1-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-1-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-1-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-1-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-1-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-1-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-1-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-1-14"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;REGX51.H&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;isr_INT0&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;interrupt&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;用Keil编译之前，我们先进行一些设置，让他输出带汇编的Listing文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单击Project - Options for Target &amp;lsquo;Target 1&amp;rsquo;或&lt;img src="https://blog.ctree.site/p/8051-isr-things/20251203122734.png"
width="16"
height="16"
srcset="https://blog.ctree.site/p/8051-isr-things/20251203122734_hu_9552c6a65596542e.png 480w, https://blog.ctree.site/p/8051-isr-things/20251203122734_hu_8ec45a0ce00b608.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
&gt;图标&lt;/li&gt;
&lt;li&gt;进入Listing选项卡，勾选C Compiler Listing并勾选Conditional、Symbols和Assembly Code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/8051-isr-things/20251203122917.png"
width="626"
height="470"
srcset="https://blog.ctree.site/p/8051-isr-things/20251203122917_hu_ad9eb299d37cc239.png 480w, https://blog.ctree.site/p/8051-isr-things/20251203122917_hu_6b59dcf254364e1e.png 1024w"
loading="lazy"
alt="完成后的设置应该差不多这样"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="319px"
&gt;&lt;/p&gt;
&lt;p&gt;修改好之后再编译，&lt;span class="hint" data-hint="位于项目的Listings文件夹下"&gt;我们就会得到一些lst文件&lt;/span&gt;。用任意文本编辑器打开main.lst，观察一下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-2"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-2-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-2-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-2-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-2-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-2-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-2-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-2-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-2-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-2-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-2-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-2-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-2-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-2-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-2-14"&gt;14
&lt;/span&gt;&lt;span class="lnt" id="code-2-15"&gt;15
&lt;/span&gt;&lt;span class="lnt" id="code-2-16"&gt;16
&lt;/span&gt;&lt;span class="lnt" id="code-2-17"&gt;17
&lt;/span&gt;&lt;span class="lnt" id="code-2-18"&gt;18
&lt;/span&gt;&lt;span class="lnt" id="code-2-19"&gt;19
&lt;/span&gt;&lt;span class="lnt" id="code-2-20"&gt;20
&lt;/span&gt;&lt;span class="lnt" id="code-2-21"&gt;21
&lt;/span&gt;&lt;span class="lnt" id="code-2-22"&gt;22
&lt;/span&gt;&lt;span class="lnt" id="code-2-23"&gt;23
&lt;/span&gt;&lt;span class="lnt" id="code-2-24"&gt;24
&lt;/span&gt;&lt;span class="lnt" id="code-2-25"&gt;25
&lt;/span&gt;&lt;span class="lnt" id="code-2-26"&gt;26
&lt;/span&gt;&lt;span class="lnt" id="code-2-27"&gt;27
&lt;/span&gt;&lt;span class="lnt" id="code-2-28"&gt;28
&lt;/span&gt;&lt;span class="lnt" id="code-2-29"&gt;29
&lt;/span&gt;&lt;span class="lnt" id="code-2-30"&gt;30
&lt;/span&gt;&lt;span class="lnt" id="code-2-31"&gt;31
&lt;/span&gt;&lt;span class="lnt" id="code-2-32"&gt;32
&lt;/span&gt;&lt;span class="lnt" id="code-2-33"&gt;33
&lt;/span&gt;&lt;span class="lnt" id="code-2-34"&gt;34
&lt;/span&gt;&lt;span class="lnt" id="code-2-35"&gt;35
&lt;/span&gt;&lt;span class="lnt" id="code-2-36"&gt;36
&lt;/span&gt;&lt;span class="lnt" id="code-2-37"&gt;37
&lt;/span&gt;&lt;span class="lnt" id="code-2-38"&gt;38
&lt;/span&gt;&lt;span class="lnt" id="code-2-39"&gt;39
&lt;/span&gt;&lt;span class="lnt" id="code-2-40"&gt;40
&lt;/span&gt;&lt;span class="lnt" id="code-2-41"&gt;41
&lt;/span&gt;&lt;span class="lnt" id="code-2-42"&gt;42
&lt;/span&gt;&lt;span class="lnt" id="code-2-43"&gt;43
&lt;/span&gt;&lt;span class="lnt" id="code-2-44"&gt;44
&lt;/span&gt;&lt;span class="lnt" id="code-2-45"&gt;45
&lt;/span&gt;&lt;span class="lnt" id="code-2-46"&gt;46
&lt;/span&gt;&lt;span class="lnt" id="code-2-47"&gt;47
&lt;/span&gt;&lt;span class="lnt" id="code-2-48"&gt;48
&lt;/span&gt;&lt;span class="lnt" id="code-2-49"&gt;49
&lt;/span&gt;&lt;span class="lnt" id="code-2-50"&gt;50
&lt;/span&gt;&lt;span class="lnt" id="code-2-51"&gt;51
&lt;/span&gt;&lt;span class="lnt" id="code-2-52"&gt;52
&lt;/span&gt;&lt;span class="lnt" id="code-2-53"&gt;53
&lt;/span&gt;&lt;span class="lnt" id="code-2-54"&gt;54
&lt;/span&gt;&lt;span class="lnt" id="code-2-55"&gt;55
&lt;/span&gt;&lt;span class="lnt" id="code-2-56"&gt;56
&lt;/span&gt;&lt;span class="lnt" id="code-2-57"&gt;57
&lt;/span&gt;&lt;span class="lnt" id="code-2-58"&gt;58
&lt;/span&gt;&lt;span class="lnt" id="code-2-59"&gt;59
&lt;/span&gt;&lt;span class="lnt" id="code-2-60"&gt;60
&lt;/span&gt;&lt;span class="lnt" id="code-2-61"&gt;61
&lt;/span&gt;&lt;span class="lnt" id="code-2-62"&gt;62
&lt;/span&gt;&lt;span class="lnt" id="code-2-63"&gt;63
&lt;/span&gt;&lt;span class="lnt" id="code-2-64"&gt;64
&lt;/span&gt;&lt;span class="lnt" id="code-2-65"&gt;65
&lt;/span&gt;&lt;span class="lnt" id="code-2-66"&gt;66
&lt;/span&gt;&lt;span class="lnt" id="code-2-67"&gt;67
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line level source
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1 #include &amp;lt;REGX51.H&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 3 void delay(unsigned int n) {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 4 1 while (n--);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 5 1 }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 7 void isr_INT0() interrupt 0 {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 8 1 delay(5000);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 9 1 }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 10
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 11 void main() {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 12 1 delay(15000);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 13 1 while(1);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 14 1 }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ASSEMBLY LISTING OF GENERATED OBJECT CODE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; FUNCTION _delay (BEGIN)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;---- Variable &amp;#39;n&amp;#39; assigned to Register &amp;#39;R6/R7&amp;#39; ----
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000 ?C0001:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000 EF MOV A,R7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0001 1F DEC R7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0002 AC06 MOV R4,AR6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0004 7001 JNZ ?C0008
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0006 1E DEC R6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0007 ?C0008:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0007 4C ORL A,R4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0008 70F6 JNZ ?C0001
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000A 22 RET
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; FUNCTION _delay (END)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; FUNCTION isr_INT0 (BEGIN)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000 C0E0 PUSH ACC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0002 C0D0 PUSH PSW
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0004 75D000 MOV PSW,#00H
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0007 C004 PUSH AR4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0009 C006 PUSH AR6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000B C007 PUSH AR7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000D 7F88 MOV R7,#088H
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000F 7E13 MOV R6,#013H
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0011 120000 R LCALL _delay
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 9
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0014 D007 POP AR7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0016 D006 POP AR6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0018 D004 POP AR4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;001A D0D0 POP PSW
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;001C D0E0 POP ACC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;001E 32 RETI
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; FUNCTION isr_INT0 (END)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; FUNCTION main (BEGIN)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 11
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 12
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000 7F98 MOV R7,#098H
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0002 7E3A MOV R6,#03AH
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0004 120000 R LCALL _delay
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0007 ?C0005:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; SOURCE LINE # 13
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0007 80FE SJMP ?C0005
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ; FUNCTION main (END)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;看起来有点乱，稍微解释一下吧！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从
&lt;a class="codeline" href=#code-2-20 data-block=2 data-line=20&gt;20行&lt;/a&gt;开始，就是转换后方便阅读的汇编代码。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;;&lt;/code&gt;开头的句子是注释，相当于C语言中的&lt;code&gt;//&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;从左开始数的第一列是指令地址，你有没有发现从上往下看这一列是递增的呢？&lt;/li&gt;
&lt;li&gt;第二列是指令(Instruction)，这是可以查表的，想了解可以看看&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Opcodes" target="_blank" rel="noopener"
&gt;官方文档&lt;/a&gt;或者&lt;span class="hint" data-hint="因为官方文档对手机太不友好了…所以摘抄了一份"&gt;本文末尾&lt;/span&gt;&lt;a class="link" href="#%e9%99%84%e5%bd%958051%e6%89%80%e6%9c%89%e6%8c%87%e4%bb%a4%e7%a0%81" &gt;附录&lt;/a&gt;。操作码里包括了操作码(OpCode)和操作数(Operands)。&lt;/li&gt;
&lt;li&gt;第三列是助记符，顾名思义就是帮助你记住操作码对应功能的东西。&lt;/li&gt;
&lt;li&gt;最后一列就是操作数了。他们以逗号分隔开。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那么…&lt;/p&gt;
&lt;h2 id="阅读汇编"&gt;阅读汇编
&lt;/h2&gt;&lt;h3 id="delay函数"&gt;delay函数
&lt;/h3&gt;&lt;p&gt;我们可以清楚地看到，
&lt;a class="codeline" href=#code-2-23 data-block=2 data-line=23&gt;C0001&lt;/a&gt;是delay函数的入口点，那我们就一行行分析一下。首先，
&lt;a class="codeline" href=#code-2-22 data-block=2 data-line=22&gt;这里&lt;/a&gt;提到n被保存到了R6和R7里面。那么R6是啥，R7又是啥呢？&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/8051-isr-things/20251203212150.png"
width="391"
height="214"
srcset="https://blog.ctree.site/p/8051-isr-things/20251203212150_hu_d890748fd09a233b.png 480w, https://blog.ctree.site/p/8051-isr-things/20251203212150_hu_aed7aa84c4e958f2.png 1024w"
loading="lazy"
alt="8051寄存器"
class="gallery-image"
data-flex-grow="182"
data-flex-basis="438px"
&gt;&lt;/p&gt;
&lt;p&gt;没错，他们都是寄存器，数据范围是8位。我们的函数参数是unsigned int，是16位的，刚好需要两个寄存器。接下来往下看，
&lt;a class="codeline" href=#code-2-25 data-block=2 data-line=25&gt;MOV A, R7&lt;/a&gt;是什么意思呢？查阅&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV" target="_blank" rel="noopener"
&gt;官方文档&lt;/a&gt;可以看到，这其实就是赋值操作，相当于&lt;code&gt;A = R7&lt;/code&gt;。那么A又是啥呢？&lt;/p&gt;
&lt;p&gt;哈哈，还是寄存器。不过A是特殊的，叫做累加器(Accumulator)&lt;span class="hint" data-hint="如果你玩过SHENZHEN I/O的话应该见过"&gt;。&lt;/span&gt;累加器的用处就是进行一些运算。和我们要找的东西没关系，我们快速过一遍吧。
&lt;a class="codeline" href=#code-2-26 data-block=2 data-line=26&gt;DEC R7&lt;/a&gt;把R7减去1，
&lt;a class="codeline" href=#code-2-27 data-block=2 data-line=27&gt;MOV R4, AR6&lt;/a&gt;把&lt;span class="hint" data-hint="一开始在这里疑惑了很久，因为翻遍文档都没找到叫AR6的寄存器。后面发现这东西就是R6，大概是Assigned Register 6的缩写吧。"&gt;AR6（R6）&lt;/span&gt;赋值给R4。
&lt;a class="codeline" href=#code-2-28 data-block=2 data-line=28&gt;JNZ&lt;/a&gt;是Jump if Not Zero，累加器不为0的时候跳转。在这里意思就是&lt;span class="hint" data-hint="为什么是R7？在上面两行有一个MOV A, R7; DEC R7，所以这里A就是R7自减的值。"&gt;如果R7不为0&lt;/span&gt;，就跳转到
&lt;a class="codeline" href=#code-2-30 data-block=2 data-line=30&gt;C0008&lt;/a&gt;。
&lt;a class="codeline" href=#code-2-31 data-block=2 data-line=31&gt;ORL A,R4&lt;/a&gt;的意思是&lt;code&gt;A |= R4&lt;/code&gt;，既按位逻辑或。这里的R4是上面的R6，而R6是我们一开始传进来的实参。反正带着源码看，虽然不能完全理解但也大概知道是做了些什么事情了。我们还是回到主题上吧。&lt;/p&gt;
&lt;p&gt;经过刚刚的分析，我们可以发现delay函数至少使用了这些寄存器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;R4&lt;/li&gt;
&lt;li&gt;R6&lt;/li&gt;
&lt;li&gt;R7&lt;/li&gt;
&lt;li&gt;A(累加器)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="中断函数"&gt;中断函数
&lt;/h3&gt;&lt;p&gt;该看下一个函数了。紧挨着delay的就是我们写的中断函数，因为这是中断发生后最先到达的地方，所以大概率编译器会在这里使用魔法吧。快速扫一眼，马上就发现和刚刚的函数不一样：第一行就有一个
&lt;a class="codeline" href=#code-2-38 data-block=2 data-line=38&gt;PUSH&lt;/a&gt;操作。还是老样子，我们打开&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/PUSH" target="_blank" rel="noopener"
&gt;官方文档&lt;/a&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;PUSH&lt;/strong&gt; instruction increments the stack pointer and stores the value of the specified byte operand at the internal RAM address indirectly referenced by the stack pointer. No flags are affected by this instruction.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;意思就是，PUSH指令会将寄存器中的值压入栈中。这好像有点接近我们要找的东西了，继续往下看，程序依次将
&lt;a class="codeline" href=#code-2-38 data-block=2 data-line=[38,39,41,42,43]&gt;ACC、PSW、AR4、AR6、AR7&lt;/a&gt;入栈。&lt;/p&gt;
&lt;p&gt;等等，好像看到什么熟悉的东西了？ACC、AR4、AR6、AR7，这不就是delay函数用到的寄存器吗！再往下看，
&lt;a class="codeline" href=#code-2-48 data-block=2 data-line=[48,50,51,52,53,54]&gt;LCALL完delay马上又把这些寄存器POP了回去&lt;/a&gt;。这个不就是我们开始手写的
&lt;a class="codeline" href=#code-0-7 data-block=0 data-line=[7,8,10,14,17,19]&gt;保护现场&lt;/a&gt;吗！事已至此，我们已经找到了标题这个问题的答案了。编译器会自动帮我们进行一部分保护现场的工作，所以&lt;strong&gt;编写中断服务程序时无需保存外部函数的形参&lt;/strong&gt;。&lt;del&gt;好耶可以少写一堆代码了！&lt;/del&gt;&lt;/p&gt;
&lt;h2 id="官方文档"&gt;官方文档
&lt;/h2&gt;&lt;p&gt;是的…做了这么多才发现另一个官方文档中有写。&lt;blockquote&gt;
&lt;p&gt;&lt;ul&gt;
&lt;li&gt;When required, the contents of &lt;strong&gt;ACC&lt;/strong&gt;, &lt;strong&gt;B&lt;/strong&gt;, &lt;strong&gt;DPH&lt;/strong&gt;, &lt;strong&gt;DPL&lt;/strong&gt;, and &lt;strong&gt;PSW&lt;/strong&gt; are saved on the stack at function invocation time.&lt;/li&gt;
&lt;li&gt;All working registers used in the interrupt function are stored on the stack if a register bank is not specified with the &lt;strong&gt;using&lt;/strong&gt; attribute.&lt;/li&gt;
&lt;li&gt;The working registers and special registers that were saved on the stack are restored before exiting the function.&lt;/li&gt;
&lt;li&gt;The function is terminated by the 8051 &lt;strong&gt;RETI&lt;/strong&gt; instruction.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;span class="cite"&gt;&lt;span&gt;― &lt;/span&gt;&lt;a href="https://developer.arm.com/documentation/101655/0961/Cx51-User-s-Guide/Language-Extensions/Function-Declarations/Interrupt-Functions#:~:text=The%20interrupt%20attribute%20affects%20the%20object%20code%20of%20the%20function%20as%20follows"&gt;&lt;cite&gt;User&amp;#39;s Guides for Keil C51 Development Tools&lt;/cite&gt;&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
这里的第二点就是上面得到的结论：C51编译器会自动将&lt;strong&gt;中断函数&lt;/strong&gt;中调用的函数所使用的所有寄存器保存至栈上。知道了这点之后也有一些别的启发，比如不能在中断函数中调用太多函数导致爆栈等等。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;碎碎念：其实也不能说做的都是无用功，能直接从最底层的汇编理解编译器做了些什么，然后自己找出答案的过程还是很有趣的！&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="补充在sdcc中的行为"&gt;补充：在SDCC中的行为
&lt;/h2&gt;&lt;p&gt;以上的分析全部基于Keil C51 Compiler，在SDCC中稍有不同。在SDCC Compiler User Guide中有明确的指引：
&lt;blockquote&gt;
&lt;p&gt;&lt;p&gt;SDCC allows interrupt service routines to be coded in C, with some extended keywords.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-0-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-0-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-0-4"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;timer_isr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;__interrupt&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;__using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The optional number following the __interrupt keyword is the interrupt number this routine will service. When present, the compiler will insert a call to this routine in the interrupt vector table for the interrupt number specified. If you have multiple source files in your project, interrupt service routines can be present in any of them, but a prototype of the isr MUST be present or included in the file that contains the function main. The optional (8051 specific) keyword __using can be used to tell the compiler to use the specified register bank when generating code for this function.&lt;/p&gt;
&lt;/p&gt;&lt;span class="cite"&gt;&lt;span&gt;― &lt;/span&gt;&lt;a href="https://sdcc.sourceforge.net/doc/sdccman.pdf#nameddest=subsection.3.8.1"&gt;&lt;cite&gt;SDCC Compiler User Guide (4.5.15): 3.8.1 Interrupt Service Routine - General Information&lt;/cite&gt;&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;An interrupt function &lt;strong&gt;using a non-zero bank&lt;/strong&gt; will assume that it can trash that register bank, and will &lt;strong&gt;not save&lt;/strong&gt; it. Since high-priority interrupts can interrupt low-priority ones on the 8051 and friends, this means that if a high-priority ISR using a particular bank occurs while processing a low-priority ISR using the same bank, terrible and bad things can happen. To prevent this, no single register bank should be used by both a high priority and a low priority ISR. This is probably most easily done by having all high priority ISRs use one bank and all low priority ISRs use another. If you have an ISR which can change priority at runtime, you’re on your own: I suggest using the default bank zero and taking the small performance hit. It is most efficient if your ISR calls no other functions. If your ISR must call other functions, it is most efficient if those functions use the same bank as the ISR (see note 1 below); the next best is if the called functions use bank zero. It is very inefficient to call a function using a different, non-zero bank from an ISR.&lt;/p&gt;&lt;span class="cite"&gt;&lt;span&gt;― &lt;/span&gt;&lt;a href="https://sdcc.sourceforge.net/doc/sdccman.pdf#nameddest=section.3.10"&gt;&lt;cite&gt;SDCC Compiler User Guide (4.5.15): 3.10 Functions using private register banks&lt;/cite&gt;&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;阅读以上信息我们可得知：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以显式使用__using (regbank)来切换中断函数要使用的寄存器组&lt;/li&gt;
&lt;li&gt;当regbank非0时，你需要手动维护寄存器&lt;/li&gt;
&lt;li&gt;当regbank为默认值(0)时，编译器会自动保存寄存器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以，当不指定__using时，你同样无需为外部函数的形参保护现场。如果你指定了其他寄存器组，编译器会为了优化效率假定你已经处理好了一切工作，这时才需要手动保存。&lt;/p&gt;
&lt;h2 id="附录8051所有指令码"&gt;附录：8051所有指令码
&lt;/h2&gt;&lt;details&gt;
&lt;summary&gt;展开内容&lt;/summary&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指令码&lt;/th&gt;
&lt;th&gt;占用字节&lt;/th&gt;
&lt;th&gt;助记符&lt;/th&gt;
&lt;th&gt;操作数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;00&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/NOP?lang=en" target="_blank" rel="noopener"
&gt;NOP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;01&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/AJMP?lang=en" target="_blank" rel="noopener"
&gt;AJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;02&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/LJMP?lang=en" target="_blank" rel="noopener"
&gt;LJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/RR?lang=en" target="_blank" rel="noopener"
&gt;RR&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;04&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;05&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;06&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;07&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;08&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;09&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0A&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0C&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0D&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0E&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0F&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/JBC?lang=en" target="_blank" rel="noopener"
&gt;JBC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;bit, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ACALL?lang=en" target="_blank" rel="noopener"
&gt;ACALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/LCALL?lang=en" target="_blank" rel="noopener"
&gt;LCALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/RRC?lang=en" target="_blank" rel="noopener"
&gt;RRC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1A&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1C&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1D&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1E&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1F&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DEC?lang=en" target="_blank" rel="noopener"
&gt;DEC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/JB?lang=en" target="_blank" rel="noopener"
&gt;JB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;bit, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/AJMP?lang=en" target="_blank" rel="noopener"
&gt;AJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/RET?lang=en" target="_blank" rel="noopener"
&gt;RET&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/RL?lang=en" target="_blank" rel="noopener"
&gt;RL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2A&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2C&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2D&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2E&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2F&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADD?lang=en" target="_blank" rel="noopener"
&gt;ADD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/JNB?lang=en" target="_blank" rel="noopener"
&gt;JNB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;bit, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ACALL?lang=en" target="_blank" rel="noopener"
&gt;ACALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/RETI?lang=en" target="_blank" rel="noopener"
&gt;RETI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/RLC?lang=en" target="_blank" rel="noopener"
&gt;RLC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3A&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3C&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3D&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3E&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3F&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ADDC?lang=en" target="_blank" rel="noopener"
&gt;ADDC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/JC?lang=en" target="_blank" rel="noopener"
&gt;JC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/AJMP?lang=en" target="_blank" rel="noopener"
&gt;AJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4A&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4C&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4D&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4E&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4F&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/JNC?lang=en" target="_blank" rel="noopener"
&gt;JNC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ACALL?lang=en" target="_blank" rel="noopener"
&gt;ACALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5A&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5C&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5D&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5E&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5F&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/JZ?lang=en" target="_blank" rel="noopener"
&gt;JZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/AJMP?lang=en" target="_blank" rel="noopener"
&gt;AJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;68&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6A&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6C&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6D&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6E&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6F&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XRL?lang=en" target="_blank" rel="noopener"
&gt;XRL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/JNZ?lang=en" target="_blank" rel="noopener"
&gt;JNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ACALL?lang=en" target="_blank" rel="noopener"
&gt;ACALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;72&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C, bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/JMP?lang=en" target="_blank" rel="noopener"
&gt;JMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@A+DPTR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;74&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R0, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;77&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R1, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;78&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R0, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;79&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R1, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7A&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R2, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7B&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R3, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7C&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R4, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7D&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R5, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7E&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R6, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7F&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R7, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SJMP?lang=en" target="_blank" rel="noopener"
&gt;SJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/AJMP?lang=en" target="_blank" rel="noopener"
&gt;AJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;82&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C, bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOVC?lang=en" target="_blank" rel="noopener"
&gt;MOVC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @A+PC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DIV?lang=en" target="_blank" rel="noopener"
&gt;DIV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;AB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8A&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8B&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8C&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8D&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8E&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8F&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;DPTR, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ACALL?lang=en" target="_blank" rel="noopener"
&gt;ACALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;bit, C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOVC?lang=en" target="_blank" rel="noopener"
&gt;MOVC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @A+DPTR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, #immed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9A&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9C&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9D&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9E&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9F&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SUBB?lang=en" target="_blank" rel="noopener"
&gt;SUBB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ORL?lang=en" target="_blank" rel="noopener"
&gt;ORL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C, /bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/AJMP?lang=en" target="_blank" rel="noopener"
&gt;AJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C, bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/INC?lang=en" target="_blank" rel="noopener"
&gt;INC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;DPTR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MUL?lang=en" target="_blank" rel="noopener"
&gt;MUL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;AB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A5&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;reserved&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A6&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R0, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A7&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R1, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A8&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R0, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A9&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R1, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AA&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R2, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AB&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R3, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AC&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R4, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AD&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R5, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AE&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R6, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AF&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R7, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ANL?lang=en" target="_blank" rel="noopener"
&gt;ANL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C, /bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ACALL?lang=en" target="_blank" rel="noopener"
&gt;ACALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CPL?lang=en" target="_blank" rel="noopener"
&gt;CPL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CPL?lang=en" target="_blank" rel="noopener"
&gt;CPL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B6&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R0, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B7&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R1, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B8&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R0, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B9&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R1, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BA&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R2, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BB&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R3, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BC&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R4, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BD&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R5, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BE&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R6, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BF&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CJNE?lang=en" target="_blank" rel="noopener"
&gt;CJNE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R7, #immed, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/PUSH?lang=en" target="_blank" rel="noopener"
&gt;PUSH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/AJMP?lang=en" target="_blank" rel="noopener"
&gt;AJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CLR?lang=en" target="_blank" rel="noopener"
&gt;CLR&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CLR?lang=en" target="_blank" rel="noopener"
&gt;CLR&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SWAP?lang=en" target="_blank" rel="noopener"
&gt;SWAP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C5&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C6&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C7&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C8&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C9&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CA&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CB&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CD&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CF&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCH?lang=en" target="_blank" rel="noopener"
&gt;XCH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/POP?lang=en" target="_blank" rel="noopener"
&gt;POP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ACALL?lang=en" target="_blank" rel="noopener"
&gt;ACALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SETB?lang=en" target="_blank" rel="noopener"
&gt;SETB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/SETB?lang=en" target="_blank" rel="noopener"
&gt;SETB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DA?lang=en" target="_blank" rel="noopener"
&gt;DA&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D6&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCHD?lang=en" target="_blank" rel="noopener"
&gt;XCHD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D7&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/XCHD?lang=en" target="_blank" rel="noopener"
&gt;XCHD&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D8&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R0, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D9&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R1, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DA&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R2, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DB&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R3, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DC&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R4, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DD&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R5, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DE&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R6, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DF&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/DJNZ?lang=en" target="_blank" rel="noopener"
&gt;DJNZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R7, offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOVX?lang=en" target="_blank" rel="noopener"
&gt;MOVX&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @DPTR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/AJMP?lang=en" target="_blank" rel="noopener"
&gt;AJMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOVX?lang=en" target="_blank" rel="noopener"
&gt;MOVX&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOVX?lang=en" target="_blank" rel="noopener"
&gt;MOVX&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CLR?lang=en" target="_blank" rel="noopener"
&gt;CLR&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E5&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E6&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E7&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, @R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E8&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E9&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EA&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EB&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ED&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EF&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A, R7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOVX?lang=en" target="_blank" rel="noopener"
&gt;MOVX&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@DPTR, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/ACALL?lang=en" target="_blank" rel="noopener"
&gt;ACALL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;addr11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOVX?lang=en" target="_blank" rel="noopener"
&gt;MOVX&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R0, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOVX?lang=en" target="_blank" rel="noopener"
&gt;MOVX&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R1, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/CPL?lang=en" target="_blank" rel="noopener"
&gt;CPL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F5&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;direct, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F6&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R0, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F7&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;@R1, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F8&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R0, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F9&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R1, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FA&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R2, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FB&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R3, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R4, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FD&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R5, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R6, A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FF&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a class="link" href="https://developer.arm.com/documentation/101655/0961/8051-Instruction-Set-Manual/Instructions/MOV?lang=en" target="_blank" rel="noopener"
&gt;MOV&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;R7, A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/details&gt;</description></item><item><title>外出日记1</title><link>https://blog.ctree.site/p/dekakeru-diary-01/</link><pubDate>Tue, 02 Dec 2025 23:23:33 +0800</pubDate><guid>https://blog.ctree.site/p/dekakeru-diary-01/</guid><description>&lt;img src="https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120195125.jpg" alt="Featured image of post 外出日记1" /&gt;&lt;p&gt;前些日子实在是很无聊，于是有了“哪怕一秒也好，我想从这个世界逃离”的想法。结果…&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/dekakeru-diary-01/IMG_20251202_232946.jpg"
width="1264"
height="1768"
srcset="https://blog.ctree.site/p/dekakeru-diary-01/IMG_20251202_232946_hu_734e721aa2411541.jpg 480w, https://blog.ctree.site/p/dekakeru-diary-01/IMG_20251202_232946_hu_4006228c3eb68940.jpg 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="71"
data-flex-basis="171px"
&gt;&lt;/p&gt;
&lt;p&gt;莫名其妙就走了十多公里…不过虽然很累，但是能去到基本上没有人的地方还是特别开心的。仔细想想，上一次像这样放松独处、完全把时间留给自己是多久以前了呢？似乎是高中那会吧。总之久违地感受到了平静。&lt;/p&gt;
&lt;p&gt;出发时还是下午，到达山顶的时候已经天黑了，&lt;span class="hint" data-hint="虽然出发的时候太阳都快下山了…"&gt;明明本来想着拍一点落日的&lt;/span&gt;。不过感觉也挺好看的，就还是拍了一些照片😌&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/dekakeru-diary-01/IMG_20251120_194727.jpg"
width="4096"
height="3072"
srcset="https://blog.ctree.site/p/dekakeru-diary-01/IMG_20251120_194727_hu_9e8cbac5c20f95a0.jpg 480w, https://blog.ctree.site/p/dekakeru-diary-01/IMG_20251120_194727_hu_d59ad8a7b4de5945.jpg 1024w"
loading="lazy"
alt="调低曝光度，让眼花缭乱的LED安静一会"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="320px"
&gt;
&lt;img src="https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120195041.jpg"
width="3072"
height="4096"
srcset="https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120195041_hu_6f6b94c332d1b374.jpg 480w, https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120195041_hu_5aeb065d360410ae.jpg 1024w"
loading="lazy"
alt="像羽毛一样的云朵"
class="gallery-image"
data-flex-grow="75"
data-flex-basis="180px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120202049.jpg"
width="3072"
height="4096"
srcset="https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120202049_hu_2a619d86079d617b.jpg 480w, https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120202049_hu_801d61803c3aabd3.jpg 1024w"
loading="lazy"
alt="很好看但是不给进的玻璃栈道…"
class="gallery-image"
data-flex-grow="75"
data-flex-basis="180px"
&gt; &lt;img src="https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120195125.jpg"
width="4096"
height="3072"
srcset="https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120195125_hu_1ad9e4dee6897e02.jpg 480w, https://blog.ctree.site/p/dekakeru-diary-01/IMG20251120195125_hu_a223135559c35052.jpg 1024w"
loading="lazy"
alt="试着拍了长曝光…效果还不错？"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="320px"
&gt;&lt;/p&gt;
&lt;p&gt;虽然这些照片没有精美的构图、看起来不怎么样，但是那一刻为了记录此刻的心情，我还是按下了快门键。这也许就是我出门的意义吧？&lt;/p&gt;</description></item><item><title>使用移动设备编写并预览博客文章</title><link>https://blog.ctree.site/p/writing-posts-on-mobile/</link><pubDate>Tue, 02 Dec 2025 04:32:21 +0800</pubDate><guid>https://blog.ctree.site/p/writing-posts-on-mobile/</guid><description>&lt;img src="https://blog.ctree.site/p/writing-posts-on-mobile/IMG_20251204_011232.jpg" alt="Featured image of post 使用移动设备编写并预览博客文章" /&gt;&lt;p&gt;经常会有电脑不在身边但想写点什么打发时间的场景，但是因为富文本内容和扩展语法没法看到自己写了些什么、看上去怎么样…&lt;/p&gt;
&lt;p&gt;在某天发现Obsidian是跨平台的之后，我突然悟了！为什么不能在手机上部署一个一模一样的环境呢？说干就干！&lt;/p&gt;
&lt;h2 id="准备工作"&gt;准备工作
&lt;/h2&gt;&lt;h3 id="安装termux"&gt;安装Termux
&lt;/h3&gt;&lt;p&gt;Hugo作为一个headless cli是需要Linux环境运行的，Termux正好提供这样一个环境。如果你还没有安装的话可以尝试&lt;a class="link" href="https://zerotermux.dev/" target="_blank" rel="noopener"
&gt;ZeroTermux&lt;/a&gt;，可以省去一些配置上的麻烦。&lt;/p&gt;
&lt;h3 id="安装obsidian"&gt;安装Obsidian
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://obsidian.md/download" target="_blank" rel="noopener"
&gt;官网&lt;/a&gt;/&lt;a class="link" href="https://github.com/obsidianmd/obsidian-releases/releases/" target="_blank" rel="noopener"
&gt;下载&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这里主要是需要一个能方便编辑markdown的编辑器，如果你有其他喜欢的&lt;span class="hint" data-hint="也欢迎你推荐给我！"&gt;大概也是可以用的&lt;/span&gt;。&lt;/p&gt;
&lt;h2 id="配置obsidian"&gt;配置Obsidian
&lt;/h2&gt;&lt;p&gt;打开Obsidian，新建一个仓库，仓库位置选择&lt;strong&gt;Device storage&lt;/strong&gt;，&lt;span class="hint" data-hint="别的文件夹也是可以的，只要你确保在Termux中能正常访问"&gt;在Document下新建一个文件夹&lt;/span&gt;，随后点击&lt;strong&gt;使用此文件夹&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="为termux提供储存权限"&gt;为Termux提供储存权限
&lt;/h2&gt;&lt;p&gt;打开Termux，安装完bootstrap后输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;termux-setup-storage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;不出意外的话会有一个提示框，点击允许即可。尝试输入&lt;code&gt;cd /sdcard/Documents&lt;/code&gt;，如果没有Permission denied的提示就完成啦。&lt;/p&gt;
&lt;h2 id="将文档目录链接到home下"&gt;将文档目录链接到home下
&lt;/h2&gt;&lt;p&gt;这一步是为了方便自己的，毕竟谁也不想每次打开都cd一次吧（笑）我们可以把博客目录链接到home，这样每次打开Termux都可以直接启动部署。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-1"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-1-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-1-2"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ln -s /sdcard/Documents/yourblog&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后&lt;code&gt;ls&lt;/code&gt;一下，看看有没有新的文件夹出现吧。&lt;/p&gt;
&lt;h2 id="安装hugo"&gt;安装Hugo
&lt;/h2&gt;&lt;p&gt;因为Termux的软件源里本来就有hugo，所以这一步十分简单：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-2"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-2-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-2-2"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pkg update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pkg install hugo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;需要注意的是，如果你使用了官方版本的Termux可能会出现在某些网络环境下载不下来的情况，可以自行搜索&lt;code&gt;Termux更换镜像源&lt;/code&gt;
后继续操作。&lt;/p&gt;
&lt;h2 id="安装git并克隆项目"&gt;安装Git并克隆项目
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-3"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-3-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-3-2"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pkg install git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone heres.your/repo.git ~/yourblog&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;del&gt;如果你忘记clone到刚刚链接的目录，就mv过去吧&lt;/del&gt;&lt;/p&gt;
&lt;h2 id="启动hugo服务"&gt;启动Hugo服务
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-4"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-4-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-4-2"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/yourblog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo server -D --noBuildLock&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里解释一下最后一个参数，hugo为了防止server和build同时进行或类似的竞态情况默认是有lock机制的。翻看源码发现使用的库是&lt;a class="link" href="https://pkg.go.dev/cmd/go/internal/lockedfile" target="_blank" rel="noopener"
&gt;lockedfile&lt;/a&gt;，底层为&lt;code&gt;syscall.Flock&lt;/code&gt;。这在大部分情况下都工作得很好，然而/sdcard下使用的是FUSE文件系统，不支持flock操作。&lt;/p&gt;
&lt;h2 id="让termux能够后台运行"&gt;让Termux能够后台运行
&lt;/h2&gt;&lt;p&gt;现在，你已经可以回到Obsidian中编辑博客，随后在浏览器中预览了！但是如果你把Termux放到后台再打开&lt;a class="link" href="http://localhost:1313/" target="_blank" rel="noopener"
&gt;localhost:1313&lt;/a&gt;，大概率会因为后台被冻结而失败。可以尝试以下方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;进入设置，找到耗电管理，把Termux的电池计划改为无限制/完全允许后台行为&lt;/li&gt;
&lt;li&gt;进入后台划卡页面，下拉Termux锁定&lt;/li&gt;
&lt;li&gt;进入权限管理，给Termux自启动权限&lt;/li&gt;
&lt;li&gt;在Termux中输入&lt;code&gt;termux-wake-lock&lt;/code&gt;，然后给予后台留存的特殊权限&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你不知道以上具体的操作，可以参考&lt;a class="link" href="https://docs.sealdice.com/deploy/android_keepalive.html#hyperos-%e5%b0%8f%e7%b1%b3-%e7%ba%a2%e7%b1%b3" target="_blank" rel="noopener"
&gt;这里&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>20251202</title><link>https://blog.ctree.site/p/2025-12-02/</link><pubDate>Tue, 02 Dec 2025 03:42:53 +0800</pubDate><guid>https://blog.ctree.site/p/2025-12-02/</guid><description>&lt;p&gt;如果把后退比作前进的话，那我一直都在奔跑着吧。一无是处到这种程度，也是一种才能吧。让人心生嫉妒又是谁的错呢。假装笑着的时候又在想着什么呢。&lt;/p&gt;
&lt;p&gt;不断重复着不知从何处听来的陈词，为预制的情绪罐头流下眼泪。这样的人生是否有存在的价值呢。从来都记不住教训，自大的悲剧循环上演。这样的自己到底是可怜还是可笑呢。&lt;/p&gt;
&lt;p&gt;被自我厌弃的幽默感、偶尔存在的正义。被刺痛了还能继续虚伪地说着那些找补的话语吗？还真是唯独在这方面有着天赋。日复一日的自说自话，是否也期待着被人所读懂？…并没有？真可怜啊！粘在脸上取不下来的面具，看来你和他共存的很好嘛。也许一直是一体的吧，却也偶尔歇斯底里地憎恨着它。&lt;/p&gt;
&lt;p&gt;你到底咋了？自怜的小丑牌先生。那样的神色倒像是你的刻意伪装。忍不住露出獠牙了吧？听我这么说果然还是愤怒了吧？不自知的伪善者。明明没少做伤害他人的事，却又执意表演完美受害者。可惜并没有人为这出独角戏买账。痛苦和求死欲是朋友。一直到死去都否认自己吧。装作不在意，却忍不住在没有人的地方一直回想；总觉得自己待遇不公，又没法鼓起勇气保护自己。胆小鬼是没有人权的。将真心话包裹在1000层的玩笑中，为了抹去罪恶假装忏悔着。这种想法似乎也只在夜晚出现呢。不这么做的话就没法安定不是吗？不这么做的话就得不到爱不是吗？那还真是辛苦了！&lt;/p&gt;
&lt;p&gt;假装听着他人的劝告，像宠物一样附和。你怕的是无法被理解的观点吗？还是只想装装样子、试图用讨好拉近关系呢？贫瘠的精神混合附带着谄媚的话语，是你的拿手菜吗？对待讨厌的家伙也要装模作样吗？明明已经理解不了自己的行为了吧？明明已经变成自己讨厌的样子了吧？为了保住尊严，还是否定了自己的内心吗？这样下去离彻底失去人性也不远了吧？&lt;/p&gt;
&lt;p&gt;总说着自己很累了，可又从来没有放过自己。明明最恨你的人是自己吧？请不要幻想能够被救赎啊。很清楚吧，期待过的事情最终会变成什么样子。擅自期待着、编织着那样的谎言安慰自己。至少你活下来了。……算了。胆小鬼是没有勇气去死的。&lt;/p&gt;
&lt;p&gt;就连你也觉得因为这种小事烦恼是一种幸福吗？请不要再来找我了，自大的先生。反正失败是必然的。那样想着，又流下了不被理解的泪水。分析过后给他贴一个病态的标签吧。&lt;/p&gt;
&lt;p&gt;还在生我的气吗？天真的孩子。大家一直以来都是这么认为的。我只是把他毫无保留地告诉了你，你却认为我有病。数年后想起，你是否会发觉我思想的超前性呢。是否会觉得自己太过幼稚呢。不。我才不会变成你那样的生物。这样啊。那就再见了。&lt;/p&gt;
&lt;p&gt;反正也没有人会像我一样爱你。&lt;/p&gt;</description></item><item><title>Learning Chord Symbol</title><link>https://blog.ctree.site/p/learning-chord-symbol/</link><pubDate>Mon, 24 Nov 2025 00:26:47 +0800</pubDate><guid>https://blog.ctree.site/p/learning-chord-symbol/</guid><description>&lt;p&gt;&lt;code&gt;观前提醒：本文仅涉及简单的和弦，不涉及复合和弦(Polychords)相关内容。&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;你是否有过这样的疑惑：吉他谱手型图旁边的字母是什么意思？别人扒谱视频里的罗马数字又是啥？怎么最后还有一坨标记？&lt;/p&gt;
&lt;p&gt;本文的写作目标是让你以最小的思考成本搞懂以上问题！&lt;/p&gt;
&lt;h2 id="从最简单的开始"&gt;从最简单的开始…
&lt;/h2&gt;&lt;p&gt;首先，我们需要知道和弦是什么！简单地来说，和弦就是&lt;span class="hint" data-hint="五和弦（强力和弦）是例外，它只由根音和五音构成，用于特殊的音响效果。"&gt;一组三个及以上的音&lt;/span&gt;同时或&lt;span class="hint" data-hint="其实分解和弦只是一种演奏技法，和弦的概念本身只关心这些音和根音之间的音程关系。"&gt;依次播放&lt;/span&gt;。前者叫柱式和弦(Block Chord)，后者叫分解和弦(Broken Chord)。&lt;br&gt;
没看懂？来个例子吧。
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h2 id="思考"&gt;思考
&lt;/h2&gt;&lt;p&gt;小调为什么是降三级、降六级、降七级？&lt;/p&gt;</description></item><item><title>调内和弦</title><link>https://blog.ctree.site/p/learning-diatonic/</link><pubDate>Sat, 22 Nov 2025 17:33:41 +0800</pubDate><guid>https://blog.ctree.site/p/learning-diatonic/</guid><description>&lt;p&gt;调内和弦(Diatonic)，顾名思义就是和弦中的每个构成音都在调内。本文以三和弦为例，整理了一些调式的调内和弦和他们的功能。如您发现内容有误，还请告知修改，非常感谢！&lt;/p&gt;
&lt;h2 id="自然大调"&gt;自然大调
&lt;/h2&gt;&lt;p&gt;对于自然大调，在五线谱上先构建一级大三和弦然后按依次向上平移即可得到所有调内和弦，如下所示（点击1=C可以移调）：&lt;/p&gt;
&lt;h3 id="和弦试听"&gt;和弦试听
&lt;/h3&gt;
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;整理音程关系后我们可以发现其中I，IV，V级为大三和弦，II，III，VI级为小三和弦，VII级为减三和弦。接下来我们需要思考一个问题：他们分别代表了什么功能？&lt;/p&gt;
&lt;p&gt;首先，I，IV，V级是我们再熟悉不过的TSD和弦，分别代表了主功能、下属功能和属功能。那么剩下的四个和弦呢？&lt;/p&gt;
&lt;p&gt;啊…我识谱能力太差了。我们可以试着把他们进行转位，把所有音移到同一个八度内，看看能不能看出什么或听出什么：&lt;/p&gt;
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果你的音感/注意力较好，应该已经听/看出来一些相似了！&lt;/p&gt;
&lt;p&gt;发现了吗？II级和弦和IV级和弦有两个音是一样的！相似情况还有III级和I级、III级和V级、VI级和I级、VII级和II级。那我们是不是可以认为这些和弦具有相同的功能呢？答案是肯定的！&lt;/p&gt;
&lt;p&gt;2m和4M一样都是下属功能，6m和1M一样都是主功能。3m比较特殊，他同时和1M、5M相似，所以既可以作为主功能也可以作为属功能。&lt;/p&gt;
&lt;p&gt;等等，是不是少了什么？VII级和弦去哪里了？……哦，我知道了。7dim和2m相似，所以7dim也是下属功能吗？&lt;/p&gt;
&lt;p&gt;先说结论：7dim为属功能。虽然7dim和2m相似，但是他并不和真正的、最原始的下属功能和弦4M相似。可以看到事实上他们两个只有一个音相同，显然不能作等效处理。&lt;/p&gt;
&lt;p&gt;那怎么办呢？聪明的你一定想到了：他是一个减三和弦，那么他一定会有一个三全音！那么哪里还有三全音呢？学习TSD的时候提到，属功能一般会使用&lt;strong&gt;属七和弦&lt;/strong&gt;来增加回到一级的解决感，那么带着“7dim为属功能”的答案，我们把五级的属七和弦（也叫大小七和弦）和七级的减三和弦摆在一起看看，顺便写一下七级的减七和弦：&lt;/p&gt;
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;哦，懂了！这下，所有调内和弦的功能都找到了！我把他做成了一个表格：&lt;/p&gt;
&lt;h3 id="整理表格"&gt;整理表格
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;级数&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;和弦性质&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1M(I)&lt;/td&gt;
&lt;td&gt;大三和弦&lt;/td&gt;
&lt;td&gt;主&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2m(IIm)&lt;/td&gt;
&lt;td&gt;小三和弦&lt;/td&gt;
&lt;td&gt;下属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3m(IIIm)&lt;/td&gt;
&lt;td&gt;小三和弦&lt;/td&gt;
&lt;td&gt;主/属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4M(IV)&lt;/td&gt;
&lt;td&gt;大三和弦&lt;/td&gt;
&lt;td&gt;下属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5M(V)&lt;/td&gt;
&lt;td&gt;大三和弦&lt;/td&gt;
&lt;td&gt;属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6m(VIm)&lt;/td&gt;
&lt;td&gt;小三和弦&lt;/td&gt;
&lt;td&gt;主&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;7dim(VII°)&lt;/td&gt;
&lt;td&gt;减三和弦&lt;/td&gt;
&lt;td&gt;属&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;碎碎念：以前觉得这些东西好难背，各种功能看到就头大。知道了是怎么推出来的之后发现其实好像也不是特别难了！&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="自然小调"&gt;自然小调
&lt;/h2&gt;&lt;p&gt;接下来我们看看自然小调。有了大调的经验，直接把所有和弦写出来看看再说！&lt;/p&gt;
&lt;h3 id="和弦试听-1"&gt;和弦试听
&lt;/h3&gt;
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;自然小调的TSD和自然大调的一样，也分别是I、IV、V级。我们照样按老方法给他们配对：&lt;/p&gt;
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="整理表格-1"&gt;整理表格
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;级数&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;和弦性质&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1m(Im)&lt;/td&gt;
&lt;td&gt;小三和弦&lt;/td&gt;
&lt;td&gt;主&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2dim(II°)&lt;/td&gt;
&lt;td&gt;减三和弦&lt;/td&gt;
&lt;td&gt;下属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b3&lt;/td&gt;
&lt;td&gt;b3M(bIII)&lt;/td&gt;
&lt;td&gt;大三和弦&lt;/td&gt;
&lt;td&gt;主&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4m(IVm)&lt;/td&gt;
&lt;td&gt;小三和弦&lt;/td&gt;
&lt;td&gt;下属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5m(Vm)&lt;/td&gt;
&lt;td&gt;小三和弦&lt;/td&gt;
&lt;td&gt;属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b6&lt;/td&gt;
&lt;td&gt;b6M(bVI)&lt;/td&gt;
&lt;td&gt;大三和弦&lt;/td&gt;
&lt;td&gt;主/下属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b7&lt;/td&gt;
&lt;td&gt;b7M(bVII)&lt;/td&gt;
&lt;td&gt;大三和弦&lt;/td&gt;
&lt;td&gt;属&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;值得一提的是，自然小调中的V级属功能是一个小和弦。他的调内七和弦5m7没有三全音，类似自然大调属功能导向主音的听感有但不多，所以一般不怎么用来导向终止。来感受一下！&lt;/p&gt;
&lt;p&gt;小调↓
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;大调↓
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;你觉得哪个的解决感更强呢？可能因为分解和弦的缘故听不太出来，你可以试着用鼠标分别点击上方第三个和第一个和弦标记，感受一下V级到I级听感的差别。&lt;/p&gt;
&lt;p&gt;那么，如果我就是想要大调那样的强解决感怎么办？其实很简单！我们把V级的小七和弦改成同根音的属七和弦就行了。也就是把和弦的三音（调式的VII级音）升半音，让他和根音的关系变成大三度、和七音的关系变成增四度（三全音）：&lt;/p&gt;
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;听听看，是不是感觉回一级前紧张了很多！&lt;br&gt;
等等，我们标题不是调内和弦吗？把调式的七级音升高半音那还是调内吗？嗯，你说对了！&lt;/p&gt;
&lt;h2 id="和声小调"&gt;和声小调
&lt;/h2&gt;&lt;p&gt;没错，把自然小调的VII级音升高半音就变成了和声小调。&lt;/p&gt;
&lt;h3 id="和弦试听-2"&gt;和弦试听
&lt;/h3&gt;
&lt;div class="abcjs-item"&gt;
&lt;div style="width: 100%; max-width: 600px;"&gt;
&lt;div id="paper"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="audio"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="整理表格-2"&gt;整理表格
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;级数&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;和弦性质&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1m(Im)&lt;/td&gt;
&lt;td&gt;小三和弦&lt;/td&gt;
&lt;td&gt;主&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2dim(II°)&lt;/td&gt;
&lt;td&gt;减三和弦&lt;/td&gt;
&lt;td&gt;下属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b3&lt;/td&gt;
&lt;td&gt;b3aug(bIII+)&lt;/td&gt;
&lt;td&gt;增三和弦&lt;/td&gt;
&lt;td&gt;属?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4m(IVm)&lt;/td&gt;
&lt;td&gt;小三和弦&lt;/td&gt;
&lt;td&gt;下属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5M(V)&lt;/td&gt;
&lt;td&gt;大三和弦&lt;/td&gt;
&lt;td&gt;属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b6&lt;/td&gt;
&lt;td&gt;b6M(bVI)&lt;/td&gt;
&lt;td&gt;大三和弦&lt;/td&gt;
&lt;td&gt;主/下属&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;7dim(VII°)&lt;/td&gt;
&lt;td&gt;减三和弦&lt;/td&gt;
&lt;td&gt;属&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这里有一个很特殊的和弦：增三和弦，它非常难使用！以至于虽然它是和声小调的调内和弦，但是多数需要属功能的情况都会使用自然小调中的大三和弦代替。不过它在流行/爵士音乐中有一些特殊用法，比如作为经过和弦之类的。我也不是很清楚这方面所以就不赘述了XD以后学到了可能会另外开一篇？&lt;/p&gt;</description></item><item><title>初次见面</title><link>https://blog.ctree.site/p/my-first-post/</link><pubDate>Fri, 21 Nov 2025 20:12:31 +0800</pubDate><guid>https://blog.ctree.site/p/my-first-post/</guid><description>&lt;h2 id="ようこそー"&gt;ようこそー！👋
&lt;/h2&gt;&lt;p&gt;嗨！这里是&lt;span class="hint" data-hint="星取り／星鳥"&gt;Hoshitori&lt;/span&gt;，也可以叫我沙茶！我目前是一名大二的学生。&lt;/p&gt;
&lt;p&gt;开此blog的契机是&lt;span class="hint" data-hint="然而目前博客部署在EdgeOne上…只能说push完等一会就能全自动更新太爽了！"&gt;买了个腾讯云服务器然后闲置了&lt;/span&gt;，正好试着写一些篇幅较长的个人思考，也锻炼一下语言组织能力和消磨时间。欢迎你和我交朋友呀！！&lt;/p&gt;
&lt;h2 id="本博客可能包含的内容"&gt;本博客可能包含的内容：
&lt;/h2&gt;&lt;h3 id="编程"&gt;编程
&lt;/h3&gt;&lt;details&gt;
&lt;summary&gt;展开内容&lt;/summary&gt;
&lt;p&gt;&lt;del&gt;&lt;em&gt;虽然本人几乎只对软件感兴趣，不过目前专业为嵌入式相关！&lt;/em&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;经常使用的语言有Python/Kotlin/Java，勉强能写一点的有JavaScript/TypeScript/C#/Golang/C（按熟练度降序排名），正在龟速学习Rust…&lt;/p&gt;
&lt;p&gt;以及我对逆向/ctf相关感兴趣，虽然很菜学不明白就是了（躺）&lt;/p&gt;
&lt;p&gt;一般来说我只有想做某个项目才会编程，所以这部分内容不一定会很多（甚至可能根本不会发）！&lt;/p&gt;
&lt;/details&gt;
&lt;h3 id="乐理"&gt;乐理
&lt;/h3&gt;&lt;details&gt;
&lt;summary&gt;展开内容&lt;/summary&gt;
&lt;p&gt;因为对创作音乐有强烈的欲望，目前已经学习乐理基础知识，正在从零学习四部和声相关知识中！我并没有什么音乐天赋，所以可能会把一些&lt;del&gt;学习过程中突然开智想到的&lt;/del&gt;常识性的知识加上正确率未知的个人感悟写成文章，主要是记录用。不过也非常欢迎勘误和交流！&lt;/p&gt;
&lt;p&gt;&lt;em&gt;希望有一天能把自己想说的话用音乐传递给大家！&lt;/em&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;h3 id="音乐推荐"&gt;音乐推荐
&lt;/h3&gt;&lt;details&gt;
&lt;summary&gt;展开内容&lt;/summary&gt;
&lt;p&gt;我喜欢VOCALOID和日本流行音乐，也听一些旋律性强的电子音乐！如果有让我产生共鸣或我单纯觉得好听的歌，我会po到博客上！&lt;/p&gt;
&lt;p&gt;以下为个人偏好，想到啥写啥不分先后 &amp;raquo;&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;术力口成分&lt;/summary&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-0"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-0-1"&gt; 1
&lt;/span&gt;&lt;span class="lnt" id="code-0-2"&gt; 2
&lt;/span&gt;&lt;span class="lnt" id="code-0-3"&gt; 3
&lt;/span&gt;&lt;span class="lnt" id="code-0-4"&gt; 4
&lt;/span&gt;&lt;span class="lnt" id="code-0-5"&gt; 5
&lt;/span&gt;&lt;span class="lnt" id="code-0-6"&gt; 6
&lt;/span&gt;&lt;span class="lnt" id="code-0-7"&gt; 7
&lt;/span&gt;&lt;span class="lnt" id="code-0-8"&gt; 8
&lt;/span&gt;&lt;span class="lnt" id="code-0-9"&gt; 9
&lt;/span&gt;&lt;span class="lnt" id="code-0-10"&gt;10
&lt;/span&gt;&lt;span class="lnt" id="code-0-11"&gt;11
&lt;/span&gt;&lt;span class="lnt" id="code-0-12"&gt;12
&lt;/span&gt;&lt;span class="lnt" id="code-0-13"&gt;13
&lt;/span&gt;&lt;span class="lnt" id="code-0-14"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n-buna
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ナユタン星人
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;いよわ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;キノシタ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;すりぃ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;西沢さんP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Orangestar
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ナナホシ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MIMI
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kemu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;柊マグネタイト
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OSTER project
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;駄菓子O型
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ピノキオピー&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;J-POP成分&lt;/summary&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-1"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-1-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-1-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-1-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-1-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-1-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-1-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-1-7"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ヨルシカ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ZUTOMAYO
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mili
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mrs. GREEN APPLE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;P丸様。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ARuFa
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CHiCO&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;音游曲师成分&lt;/summary&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma" id="chroma-2"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="code-2-1"&gt;1
&lt;/span&gt;&lt;span class="lnt" id="code-2-2"&gt;2
&lt;/span&gt;&lt;span class="lnt" id="code-2-3"&gt;3
&lt;/span&gt;&lt;span class="lnt" id="code-2-4"&gt;4
&lt;/span&gt;&lt;span class="lnt" id="code-2-5"&gt;5
&lt;/span&gt;&lt;span class="lnt" id="code-2-6"&gt;6
&lt;/span&gt;&lt;span class="lnt" id="code-2-7"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Sta
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;litmus*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cranky
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ああああ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;梅干茶漬け
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;翡乃イスカ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mameyudoufu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;/details&gt;
&lt;h3 id="深夜emo产物"&gt;深夜emo产物
&lt;/h3&gt;&lt;p&gt;可能会有自我厌弃等负能产出，不会在首页显示，希望没有影响到你的心情(^_&amp;lt;)&lt;/p&gt;
&lt;h2 id="fin"&gt;fin
&lt;/h2&gt;&lt;p&gt;感谢你的访问，更感谢你看到这里！&lt;/p&gt;</description></item></channel></rss>