<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>编程与工具 on ICCI</title><link>https://icci.ink/study/code/</link><description>Recent content in 编程与工具 on ICCI</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 18 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://icci.ink/study/code/index.xml" rel="self" type="application/rss+xml"/><item><title>Git 协作工作流最佳实践</title><link>https://icci.ink/study/code/git-workflow/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/git-workflow/</guid><description>&lt;h2 id="分支策略"&gt;分支策略&lt;a class="anchor" href="#%e5%88%86%e6%94%af%e7%ad%96%e7%95%a5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们团队采用 &lt;strong&gt;Trunk-Based Development&lt;/strong&gt; 的变体：&lt;/p&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;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;main&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;生产环境&lt;/td&gt;
 &lt;td&gt;永久&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;develop&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;开发集成分支&lt;/td&gt;
 &lt;td&gt;永久&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;feature/*&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;功能开发&lt;/td&gt;
 &lt;td&gt;1-3 天&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hotfix/*&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;紧急修复&lt;/td&gt;
 &lt;td&gt;几小时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;release/*&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;发布准备&lt;/td&gt;
 &lt;td&gt;1 周&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="commit-规范"&gt;Commit 规范&lt;a class="anchor" href="#commit-%e8%a7%84%e8%8c%83"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;采用 &lt;strong&gt;Conventional Commits&lt;/strong&gt;：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;type&amp;gt;(&amp;lt;scope&amp;gt;): &amp;lt;subject&amp;gt;

&amp;lt;body&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;常用 type：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat&lt;/code&gt; — 新功能&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix&lt;/code&gt; — 修复 Bug&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs&lt;/code&gt; — 文档变更&lt;/li&gt;
&lt;li&gt;&lt;code&gt;refactor&lt;/code&gt; — 重构&lt;/li&gt;
&lt;li&gt;&lt;code&gt;test&lt;/code&gt; — 测试用例&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chore&lt;/code&gt; — 构建/工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="示例"&gt;示例&lt;a class="anchor" href="#%e7%a4%ba%e4%be%8b"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;feat(auth): 添加 JWT 登录验证

使用 jsonwebtoken 库实现无状态认证，
Token 有效期 24 小时，支持 refresh 机制。&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="pull-request-流程"&gt;Pull Request 流程&lt;a class="anchor" href="#pull-request-%e6%b5%81%e7%a8%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;fork&lt;/strong&gt; — 从 develop 创建 feature 分支&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;commit&lt;/strong&gt; — 小步提交，保持 commit 原子性&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rebase&lt;/strong&gt; — &lt;code&gt;git rebase develop&lt;/code&gt; 保持历史整洁&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;push&lt;/strong&gt; — 推送并创建 PR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;review&lt;/strong&gt; — 至少一人 Code Review&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;squash merge&lt;/strong&gt; — 合并到 develop&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="code-review-清单"&gt;Code Review 清单&lt;a class="anchor" href="#code-review-%e6%b8%85%e5%8d%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 代码逻辑是否正确？&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 是否有边界情况未处理？&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 命名是否清晰？&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 是否有必要的测试？&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 是否引入性能问题？&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="小结"&gt;小结&lt;a class="anchor" href="#%e5%b0%8f%e7%bb%93"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;好的 Git 习惯能让团队协作效率翻倍。核心是 &lt;strong&gt;小步提交&lt;/strong&gt; + &lt;strong&gt;清晰的 commit message&lt;/strong&gt; + &lt;strong&gt;及时的 Code Review&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>Verilog 实例demo</title><link>https://icci.ink/study/code/digital-verilog-demo/</link><pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/digital-verilog-demo/</guid><description>&lt;p&gt;用一个简单的例子来介绍verilog的用法&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TOC
{:toc}&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="verilog概述"&gt;verilog概述&lt;a class="anchor" href="#verilog%e6%a6%82%e8%bf%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Verilog能够在多种抽象级别对数字逻辑系统进行描述，Verilog的设计初衷是成为一种基本语法与C语言相近的硬件描述语言。当前广泛使用的硬件描述语言包括VHDL以及Verilog HDL（VHSIC Hardware Description Language）；同时verilog还衍生出了一些变种语言如System Verilog、Verilog-AMS等等，丰富了Verilog语言的应用场景。&lt;/p&gt;
&lt;div class="img-center"&gt;&lt;img src="https://icci.ink/images/blog/2025-5-12-verilog介绍.png"/&gt;
&lt;p&gt;不同语言在芯片设计上的主流场景&lt;/p&gt;
&lt;/div&gt; 
&lt;p&gt;verilog语言和VHDL语言功能基本相同，在目前的项目上可以支持混用，但是VHDL的语法上更加严格一些，verilog语言更倾向于C语言，如果是入门学习，作者个人认为学习verilog语言就足够了，学完了Verilog语言基本就能看懂VHDL程序的意思。&lt;/p&gt;
&lt;h2 id="实例"&gt;实例&lt;a class="anchor" href="#%e5%ae%9e%e4%be%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;话不多说，先看看verilog程序整什么样：
Verilog程序一般分为程序和测试程序（一般习惯叫Testbench），测试程序会依据程序的功能尽可能的覆盖多的场景。&lt;/p&gt;
&lt;h3 id="verilog程序实例"&gt;verilog程序实例&lt;a class="anchor" href="#verilog%e7%a8%8b%e5%ba%8f%e5%ae%9e%e4%be%8b"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Verilog" data-lang="Verilog"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// and2x模块：实现两个输入信号的与逻辑
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;module&lt;/span&gt; and2x(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;input&lt;/span&gt; a, &lt;span style="color:#75715e"&gt;// 输入信号a
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;input&lt;/span&gt; b, &lt;span style="color:#75715e"&gt;// 输入信号b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;output&lt;/span&gt; r &lt;span style="color:#75715e"&gt;// 输出信号r，等于a和b的与逻辑结果
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 由于a和b已经定义为input，这里不需要再次定义wire
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// wire a, b, r; 这行代码是多余的，应该删除
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// assign语句将a和b的与逻辑结果赋值给输出r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;assign&lt;/span&gt; r &lt;span style="color:#f92672"&gt;=&lt;/span&gt; a &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; b;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;endmodule&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="verilog-testbench程序实例"&gt;verilog testbench程序实例&lt;a class="anchor" href="#verilog-testbench%e7%a8%8b%e5%ba%8f%e5%ae%9e%e4%be%8b"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;再看看verilog程序的测试程序长什么样子&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Verilog" data-lang="Verilog"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;`timescale&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;ns &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;ps
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;module&lt;/span&gt; tb_and2x;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 定义信号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;reg&lt;/span&gt; a;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;reg&lt;/span&gt; b;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;wire&lt;/span&gt; r;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 实例化 and2x 模块
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; and2x uut (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .a(a),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .b(b),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .r(r)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; );
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 测试过程
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;initial&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 初始化输入
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; a &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; b &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; #&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// 等待 10ns
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 测试第一个条件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; a &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; b &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; #&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// 等待 10ns
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 测试第二个条件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; a &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; b &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; #&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// 等待 10ns
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 测试第三个条件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; a &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; b &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; #&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// 等待 10ns
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 测试结束
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $finish;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 监控输出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//end 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;initial&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $dumpfile(&lt;span style="color:#e6db74"&gt;&amp;#34;out.vcd&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// This will dump all signal, which may not be useful
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;//$dumpvars;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// dumping only this module
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;//$dumpvars(1, testbench);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// dumping only these variable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// the first number (level) is actually useless
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $dumpvars(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, testbench);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;endmodule&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="verilog有什么用"&gt;verilog有什么用&lt;a class="anchor" href="#verilog%e6%9c%89%e4%bb%80%e4%b9%88%e7%94%a8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="img-center"&gt;&lt;img src="https://icci.ink/images/blog/2025-5数字芯片设计流程.png
"/&gt;
&lt;p&gt;数字芯片设计流程&lt;/p&gt;</description></item><item><title>Verilog 语法篇</title><link>https://icci.ink/study/code/digital-verilog%E8%AF%AD%E6%B3%95%E7%AF%87/</link><pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/digital-verilog%E8%AF%AD%E6%B3%95%E7%AF%87/</guid><description>&lt;p&gt;verilog语法的基本认识&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TOC
{:toc}&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="前言"&gt;前言&lt;a class="anchor" href="#%e5%89%8d%e8%a8%80"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;verilog的语法入门篇&lt;/p&gt;
&lt;h2 id="数据类型"&gt;数据类型&lt;a class="anchor" href="#%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;reg（寄存器）：&lt;/strong&gt;&lt;br&gt;
用于存储逻辑电路中的状态变量，可以通过赋值操作进行更新。其用法类似于其他编程语言中的变量，但不同的是，在 Verilog 中，reg类型的变量可以不仅可以存储数字和布尔值，还可以存储多位二进制数（也可以存储 ASCII 字符）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;integer（整数）：&lt;/strong&gt;&lt;br&gt;
用于存储整数类型的变量，可以进行加减乘除等基本算术运算。其范围为 -2^31 到 2^31 - 1。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;real（实数）：&lt;/strong&gt;&lt;br&gt;
用于存储浮点数类型的变量，可以进行基本的算术运算和一些特殊的数学函数运算。其精度和范围可能因实现而异。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;time（时间）：&lt;/strong&gt;&lt;br&gt;
用于存储时间类型的变量，可以表示电路中的时间间隔，通常以纳秒为单位。在仿真过程中，时间变量可以用于控制模拟过程的进行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;event（事件）：&lt;/strong&gt;&lt;br&gt;
用于在电路中表示事件，可以通过事件触发器（Event Trigger）来控制模块的行为。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;parameter（参数）：&lt;/strong&gt;&lt;br&gt;
用于在模块内部定义常量，其值在模块实例化时被确定。在模块中，参数可以用于配置模块的行为。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除了上述的变量类型之外，Verilog 中还有其他一些变量类型，如bit、byte、logic等，它们的具体用法和特点可能略有不同。在实际设计中，可以根据需要选择和使用适当的变量类型来实现设计。&lt;/p&gt;
&lt;h2 id="数值表示"&gt;数值表示&lt;a class="anchor" href="#%e6%95%b0%e5%80%bc%e8%a1%a8%e7%a4%ba"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;verilog是面向数字电路的编程语言，数值的表示更侧重于二进制的方式，和C语言会有一些区别。&lt;/p&gt;
&lt;h3 id="数据种类"&gt;数据种类&lt;a class="anchor" href="#%e6%95%b0%e6%8d%ae%e7%a7%8d%e7%b1%bb"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Verilog HDL 有下列四种基本的值来表示硬件电路中的电平逻辑：&lt;/p&gt;
&lt;p&gt;0：逻辑 0 或 &amp;ldquo;假&amp;rdquo;&lt;br&gt;
1：逻辑 1 或 &amp;ldquo;真&amp;rdquo;&lt;br&gt;
x 或 X：未知&lt;br&gt;
z 或 Z：高阻&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x 意味着信号数值的不确定，即在实际电路里，信号可能为 1，也可能为 0。&lt;/li&gt;
&lt;li&gt;z 意味着信号处于高阻状态，常见于信号（input, reg）没有驱动时的逻辑结果。例如一个 pad 的 input 呈现高阻状态时，其逻辑值和上下拉的状态有关系。上拉则逻辑值为 1，下拉则为 0 。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;数字声明时，合法的基数格式有 4 中，包括：十进制(&amp;rsquo;d 或 &amp;lsquo;D)，十六进制(&amp;lsquo;h 或 &amp;lsquo;H)，二进制（&amp;lsquo;b 或 &amp;lsquo;B），八进制（&amp;lsquo;o 或 &amp;lsquo;O）。数值可指明位宽，也可不指明位宽。&lt;/p&gt;</description></item><item><title>C 语言介绍</title><link>https://icci.ink/study/code/2025-03-9-code-c/</link><pubDate>Sun, 09 Mar 2025 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/2025-03-9-code-c/</guid><description>&lt;p&gt;Hello World！&lt;/p&gt;
&lt;h2 id="前言"&gt;前言&lt;a class="anchor" href="#%e5%89%8d%e8%a8%80"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;C语言是一门十分流行的编程语言，由美国贝尔实验室的 Dennis Ritchie 在 20 世纪 70 年代开发。C语言也是我学编程梦开始的地方，我写的第一句程序就是hello world！在看过各种代码后发现编程语言其实都差不多，重要的是编程的思想。但这篇文章还是会尽可能详细地介绍C语言的基本语法。&lt;/p&gt;
&lt;h2 id="例程"&gt;例程&lt;a class="anchor" href="#%e4%be%8b%e7%a8%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;先上例程（注意，在编程的时候尽量使用英文的键盘输入）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;/* 我的第一个 C 程序 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Hello, World! &lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/* &amp;hellip; */ 用于注释说明。&lt;/li&gt;
&lt;li&gt;printf() 用于格式化输出到屏幕。printf() 函数在 &amp;ldquo;stdio.h&amp;rdquo; 头文件中声明。&lt;/li&gt;
&lt;li&gt;stdio.h 是一个头文件 (标准输入输出头文件) , #include 是一个预处理命令，用来引入头文件。 当编译器遇到 printf() 函数时，如果没有找到 stdio.h 头文件，会发生编译错误。&lt;/li&gt;
&lt;li&gt;return 0; 语句用于表示退出程序。
(摘自菜鸟编程)&lt;br&gt;
从上面的例程，可以看出C语言的基本框架，C语言程序架构上基本上就是这个样子，除了语法上的万般变化&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="c-语言的特点"&gt;C 语言的特点&lt;a class="anchor" href="#c-%e8%af%ad%e8%a8%80%e7%9a%84%e7%89%b9%e7%82%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;C语言具有以下几个显著的特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高效性：C语言是一门高效的编程语言，可以生成高效的机器码，使得C语言编写的程序运行速度快。&lt;/li&gt;
&lt;li&gt;可移植性：C语言的代码可以跨平台移植，因为 C语言的语法规则和库函数是标准化的，所以在不同的计算机系统上，只需要对底层的系统函数进行一些调整就可以了。&lt;/li&gt;
&lt;li&gt;简单性：C语言的语法简单，易于学习，代码量相对较小，因此很多初学者都会选择学习 C语言。&lt;/li&gt;
&lt;li&gt;灵活性：C语言提供了多种编程风格和编程范式，例如面向过程、面向对象、泛型编程等，因此可以应用于不同的编程场景。&lt;/li&gt;
&lt;li&gt;可扩展性：C语言提供了丰富的库函数和预处理指令，使得程序员可以方便地扩展和定制自己的程序。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考资料"&gt;参考资料&lt;a class="anchor" href="#%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.runoob.com/cprogramming/c-tutorial.html"&gt;菜鸟教程&lt;/a&gt;&lt;/p&gt;</description></item><item><title>linux 笔记</title><link>https://icci.ink/study/code/basic-linux/</link><pubDate>Sat, 22 Feb 2025 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/basic-linux/</guid><description>&lt;p&gt;linux 简单上手&lt;/p&gt;
&lt;p&gt;Linux 英文解释为 Linux is not Unix,Linux在计算机界的地位就不必多说了，这篇文章是一篇简单入门篇，看Linux的需求是什么，选择性的学习相关的Linux知识，安装Linux的知识先不折腾了，手头上暂时没有相关的机器，也没有精力去折腾，这里直接展示怎么驾驭Linux，下面直接上正文！&lt;/p&gt;
&lt;h2 id="linux-指令"&gt;Linux 指令&lt;a class="anchor" href="#linux-%e6%8c%87%e4%bb%a4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先是linux终端，什么是Linux的终端，我刚接触Linux的时候也是云里雾里的，不知所云，Linux终端就是一个窗口（支持输入命令的窗口），如图
&lt;img src="https://icci.ink/images/blog/linux.png" alt="Linux 终端窗口" /&gt;&lt;/p&gt;
&lt;p&gt;你可以在Linux的这个终端界面输入各种指令，然后他会返回指令的运行结果。
&lt;img src="https://icci.ink/images/blog/linuxcommand.png" alt="Linux 终端窗口命令" /&gt;&lt;/p&gt;
&lt;p&gt;看了上面的图片，应该会对Linux的操作方式有个大概的了解，还是不清楚也没关系，下面开始介绍一些具体操作，有条件的朋友可以拿起键盘跟着敲试试看。&lt;/p&gt;
&lt;h2 id="文件指令"&gt;文件指令&lt;a class="anchor" href="#%e6%96%87%e4%bb%b6%e6%8c%87%e4%bb%a4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从文件管理到文件的路径开始操作&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查看当前目录位置&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;在这个位置新建一个名字为test的文件夹&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;mkdir test&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;3. 进入test文件夹
~~~Shell
cd test&lt;/code&gt;&lt;/pre&gt;&lt;ol start="4"&gt;
&lt;li&gt;在test文件夹里新建text.txt文件&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;touch text.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="5"&gt;
&lt;li&gt;打开text.txt文件&lt;/li&gt;
&lt;li&gt;在text.txt文件输入12345&lt;/li&gt;
&lt;li&gt;保存text.txt文件&lt;/li&gt;
&lt;li&gt;关闭text.txt文件&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#ae81ff"&gt;12345&lt;/span&gt; &amp;gt;&amp;gt;text.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面三个操作这一个命令就可以完成
9. 打开文件夹，检查test文件夹以及text.txt文件内容
&lt;img src="https://icci.ink/images/blog/linux%e6%bc%94%e7%a4%ba.png" alt="Linux 演示" /&gt;&lt;/p&gt;
&lt;p&gt;关于Linux的命令很多，这个不需要去刻意的背诵记忆，常用的指令就那么几个，用多了自然就会了，冷门的指令有个印象，知道有这种命令操作就行了，等要用的时候再网上查一下就可以了。文末附录了两个速查的链接可以点击进去看看
&lt;em&gt;tips：&lt;/em&gt; 在终端界面，按下&lt;em&gt;tab键&lt;/em&gt;可以查看所有可用的命令，在命令输入一半的时候，按下Tab键可以&lt;em&gt;自动补齐命令&lt;/em&gt;，在命令太长或者记忆混乱的时候可以按下此键找点灵感。&lt;/p&gt;
&lt;h2 id="linux-命令速查"&gt;linux 命令速查&lt;a class="anchor" href="#linux-%e5%91%bd%e4%bb%a4%e9%80%9f%e6%9f%a5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;文件管理&lt;/li&gt;
&lt;li&gt;文档编辑&lt;/li&gt;
&lt;li&gt;磁盘管理&lt;/li&gt;
&lt;li&gt;磁盘维护&lt;/li&gt;
&lt;li&gt;网络通讯&lt;/li&gt;
&lt;li&gt;系统管理&lt;/li&gt;
&lt;li&gt;系统备份&lt;/li&gt;
&lt;li&gt;备份压缩&lt;/li&gt;
&lt;li&gt;设备管理&lt;/li&gt;
&lt;li&gt;其他命令&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考链接"&gt;参考链接&lt;a class="anchor" href="#%e5%8f%82%e8%80%83%e9%93%be%e6%8e%a5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://linux.cn/"&gt;linux中国&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linux.org/"&gt;linux官方&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linuxcool.com/"&gt;linux命令速查&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.runoob.com/linux/linux-command-manual.html"&gt;linux命令速查-菜鸟编程&lt;/a&gt;&lt;/p&gt;</description></item><item><title>makefike 笔记</title><link>https://icci.ink/study/code/basic-makefile/</link><pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/basic-makefile/</guid><description>&lt;p&gt;makefike 学习笔记&lt;/p&gt;
&lt;p&gt;makefike可以把一大串Linux 指令封装成独立的命令执行，在需要处理复杂任务时，可以把命令编辑到makefile文件里，然后简单的命令就可以执行复杂的操作了，化繁为简，大大提高code效率。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://raw.githubusercontent.com/Kingdomzhen/blog-photo/main/photo/makefile.png" alt="makefile 文件" /&gt;&lt;/p&gt;
&lt;h2 id="makefile-使用方法"&gt;makefile 使用方法&lt;a class="anchor" href="#makefile-%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;makefile在linux中直接以makefile形式存在，在使用时，直接在终端输入命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make &amp;lt;command&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如：下面是一段markdowm文件的源代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;test:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; @echo &lt;span style="color:#e6db74"&gt;&amp;#34;hello test&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;要执行这个makefile的需要在终端下的操作如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;user&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ make test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输入这段命令后，终端会打印出&lt;code&gt;hello test&lt;/code&gt;字样，此时的终端将会变成&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;user&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ make test
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hello test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这就是makefile文件的使用方法，接下来介绍一下makefile文件格式&lt;/p&gt;
&lt;h2 id="makefile-文件格式"&gt;makefile 文件格式&lt;a class="anchor" href="#makefile-%e6%96%87%e4%bb%b6%e6%a0%bc%e5%bc%8f"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Makefile基本格式如下:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Shell" data-lang="Shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;target ... : prerequisites ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; command
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中,&lt;/p&gt;
&lt;p&gt;target - 目标文件, 可以是 Object File, 也可以是可执行文件&lt;br&gt;
prerequisites - 生成 target 所需要的文件或者目标&lt;br&gt;
command - make需要执行的命令 (任意的shell命令), Makefile中的命令必须以 [tab] 开头&lt;/p&gt;
&lt;p&gt;显示规则 :: 说明如何生成一个或多个目标文件(包括 生成的文件, 文件的依赖文件, 生成的命令)&lt;br&gt;
隐晦规则 :: make的自动推导功能所执行的规则&lt;br&gt;
变量定义 :: Makefile中定义的变量&lt;br&gt;
文件指示 :: Makefile中引用其他Makefile; 指定Makefile中有效部分; 定义一个多行命令&lt;br&gt;
注释 :: Makefile只有行注释 &amp;ldquo;#&amp;rdquo;, 如果要使用或者输出&amp;quot;#&amp;ldquo;字符, 需要进行转义, &amp;ldquo;#&amp;rdquo;&lt;/p&gt;</description></item><item><title>vi 编辑器</title><link>https://icci.ink/study/code/basic-vicode/</link><pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/basic-vicode/</guid><description>&lt;p&gt;vi编辑器学习笔记&lt;/p&gt;
&lt;h2 id="vi-快捷键"&gt;Vi 快捷键&lt;a class="anchor" href="#vi-%e5%bf%ab%e6%8d%b7%e9%94%ae"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&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;&lt;code&gt;:w&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;将编辑的数据写入硬盘档案中，:w!表强制写入（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:w&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;将编辑的数据写入硬盘档案中，:w!表强制写入（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:q&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;离开 vi ，:q!强制离开（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:wq&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;储存后离开，:wq! 为强制储存后离开（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ZZ&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;保存当前文件，然后退出（如果修改过）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ZQ&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不保存，强制退出。效果等同于 :q!。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:w [filename]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;将编辑的数据储存成另一个档案（类似另存新档）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:r [filename]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在编辑的数据中，读入另一个档案的数据到游标所在行后面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:n1,n2 w [filename]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;将 n1 到 n2 的内容储存成 filename 这个档案。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:set nu&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示行号，设定之后，会在每一行的前缀显示该行的行号&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:set nonu&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;与 set nu 相反，为取消行号 ！&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;编辑相关快捷键&lt;/td&gt;
 &lt;td&gt;说明&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;进入编辑模式，相同功能的还有a、o，大小写都可，功能差异在插入的位置上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;r，R&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;进入取代模式，相当与Insert，r只取代字符一次，R一直取代直到Esc&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;搜索替换相关快捷键&lt;/td&gt;
 &lt;td&gt;说明&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/word&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;向光标之下寻找一个名为 word 的字符串。例如，搜索 vbird 则输入 /vbird。（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;?word&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;向光标之上寻找一个名为 word 的字符串。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;n&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;重复前一个搜索动作。如果是向下搜索，则继续向下搜索；如果是向上搜索，则继续向上搜索。（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;N&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;与 &lt;code&gt;n&lt;/code&gt; 相反，执行反向的搜索动作。如果之前是向下搜索，则向上搜索；如果之前是向上搜索，则向下搜索。（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:n1,n2s/word1/word2/g&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在第 n1 行到第 n2 行之间寻找 word1 并将其替换为 word2。（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:1,$s/word1/word2/g&lt;/code&gt; 或 &lt;code&gt;:%s/word1/word2/g&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;从第一行到最后一行寻找 word1 并将其替换为 word2。（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:1,$s/word1/word2/gc&lt;/code&gt; 或 &lt;code&gt;:%s/word1/word2/gc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;从第一行到最后一行寻找 word1 并将其替换为 word2，并在替换前显示提示，让用户确认是否需要替换。（常用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;粘贴、删除相关快捷键&lt;/td&gt;
 &lt;td&gt;说明&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nx&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;n 为数字，连续向后删除 n 个字符&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;剪切游标所在的那一整行(常用)，用 p/P 可以粘贴&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ndd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;n 为数字。剪切光标所在的向下 n 行(常用)，用 p/P 可以粘贴&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;d1G&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;删除游标所在到第一行的所有数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dG&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;删除游标所在到最后一行的所有数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;d$&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;删除游标所在处到该行的最后一个字符&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;d0&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;删除游标所在处到该行的最前面一个字符&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;yy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;复制游标所在的那一行(常用)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nyy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;n 为数字。复制光标所在的向下 n 行(常用)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;y1G&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;复制游标所在行到第一行的所有数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;yG&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;复制游标所在行到最后一行的所有数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;y0&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;复制游标所在的那个字符到该行行首的所有数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;y$&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;复制游标所在的那个字符到该行行尾的所有数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;p, P&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;p 将已复制的数据在光标下一行贴上，P 则贴在游标上一行(常用)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;J&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;将光标所在行与下一行的数据结合成同一行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;重复删除多个数据，例如向下删除 10 行，[ 10cj ]&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;u&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;复原前一个动作。(常用)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[Ctrl]+r&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;重做上一个动作。(常用)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;(按下小数点)重复前一个动作。(常用)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="为什么是vi编辑器"&gt;为什么是vi编辑器&lt;a class="anchor" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e6%98%afvi%e7%bc%96%e8%be%91%e5%99%a8"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Vi 是 1976 年由 Bill Joy 开发的一款文本编辑器，最初是为 Unix 系统设计的。Vi 以其简洁、高效的操作方式而闻名，成为 Unix 和类 Unix 系统上的标准编辑器。Vim（Vi Improved）是 Vi 编辑器的改进版本，使用方法和Vi 编辑器相识相通。这里只Vi 编辑器
这个编辑器几乎不用下载，在各各电脑平台几乎都支持，由于其简洁稳定，功能强大，且支持插件等功能，熟练的Vi 编辑器操作工人可以在无鼠标的环境下正常操作。&lt;/p&gt;</description></item><item><title>git 学习笔记</title><link>https://icci.ink/study/code/basic-git/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/basic-git/</guid><description>&lt;p&gt;git 的一些零零碎碎&lt;/p&gt;
&lt;p&gt;网上关于git的教程数不胜数，但我问什么还要写呢？我这水平写出来的博客肯定比不上互联网的大神总结的。我写这个主要是写一些常见的git命令速查表，梳理我在学习git上面踩过的坑&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TOC
{:toc}&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="git-常用命令"&gt;git 常用命令&lt;a class="anchor" href="#git-%e5%b8%b8%e7%94%a8%e5%91%bd%e4%bb%a4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&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;git init&lt;/td&gt;
 &lt;td&gt;初始化仓库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git clone &lt;repo&gt;&lt;/td&gt;
 &lt;td&gt;克隆仓库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git pull&lt;/td&gt;
 &lt;td&gt;从远端拉取仓库-同步&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git push origin main &amp;ndash;tags&lt;/td&gt;
 &lt;td&gt;上传分支及标签&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git branch&lt;/td&gt;
 &lt;td&gt;查看所有分支&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git switch -c &lt;branch&gt;&lt;/td&gt;
 &lt;td&gt;切换到 branch 分支&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git merge &lt;branch&gt;&lt;/td&gt;
 &lt;td&gt;将 branch 合并到当前分支&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git tag&lt;/td&gt;
 &lt;td&gt;打 tag&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git status&lt;/td&gt;
 &lt;td&gt;查看未添加到 git 的文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git log&lt;/td&gt;
 &lt;td&gt;查看历史命令&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;git commit -m &lt;message&gt; &amp;ndash;commend&lt;/td&gt;
 &lt;td&gt;添加 commit 提示&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="git-能做什么"&gt;git 能做什么&lt;a class="anchor" href="#git-%e8%83%bd%e5%81%9a%e4%bb%80%e4%b9%88"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;从github，gieet这类代码托管平台下载上传代码&lt;/li&gt;
&lt;li&gt;查看项目的上传下载日志&lt;/li&gt;
&lt;li&gt;创立项目分支，协作开发互不干扰&lt;/li&gt;
&lt;li&gt;查看项目与上次上传相比更改了那些内容&lt;/li&gt;
&lt;li&gt;合并项目分支，创建项目分支&lt;/li&gt;
&lt;li&gt;tag打包项目，整个项目打包成压缩包&lt;/li&gt;
&lt;li&gt;撤回上一步的操作&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这是一些具象化的操作，笼统来讲git就是非常nice的项目管理工具&lt;/p&gt;</description></item><item><title>markdowm 语法速查</title><link>https://icci.ink/study/code/basic-markdown/</link><pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate><guid>https://icci.ink/study/code/basic-markdown/</guid><description>&lt;p&gt;markdown语言的语法参考，此篇笔记的所有语法在此博客中均已支持&lt;/p&gt;
&lt;h2 id="常用markdown语法"&gt;常用markdown语法&lt;a class="anchor" href="#%e5%b8%b8%e7%94%a8markdown%e8%af%ad%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&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 style="text-align: center"&gt;标题&lt;/td&gt;
 &lt;td&gt;# 标题名称&lt;/td&gt;
 &lt;td&gt;行首位置使用“井号+空格+标题文本”；井号数量表示标题层级，依次为H1~H6&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;块引用&lt;/td&gt;
 &lt;td&gt;&amp;gt;文字块&lt;/td&gt;
 &lt;td&gt;行首位置使用右箭号，中间可有可无空格&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;斜体&lt;/td&gt;
 &lt;td&gt;*文字块*&lt;/td&gt;
 &lt;td&gt;前后使用1个星号，为一组&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;粗体&lt;/td&gt;
 &lt;td&gt;**文字块**&lt;/td&gt;
 &lt;td&gt;前后使用2个星号，为一组&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;删除线&lt;/td&gt;
 &lt;td&gt;~~文字块~~&lt;/td&gt;
 &lt;td&gt;前后使用2个波浪线，为一组&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;下划线&lt;/td&gt;
 &lt;td&gt;&amp;ndash;–&lt;/td&gt;
 &lt;td&gt;使用3个减号后，按回车键&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;无序列表&lt;/td&gt;
 &lt;td&gt;- 条目&lt;/td&gt;
 &lt;td&gt;行首位置使用“减号+空格+条目”后，按回车键&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;有序列表&lt;/td&gt;
 &lt;td&gt;数字. 条目&lt;/td&gt;
 &lt;td&gt;行首位置使用“数字序号+句点+空格+条目”后，按回车键&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;任务列表&lt;/td&gt;
 &lt;td&gt;- [x]&lt;/td&gt;
 &lt;td&gt;[ ]内加x表示完成，不加表示方框&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;超链接&lt;/td&gt;
 &lt;td&gt;[alt](url)&lt;/td&gt;
 &lt;td&gt;alt（可选）为url的替换文本，url（必选）为超链接地址&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;图像&lt;/td&gt;
 &lt;td&gt;![alt](url)&lt;/td&gt;
 &lt;td&gt;类似超链接，只是多了一个感叹号&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;代码&lt;/td&gt;
 &lt;td&gt;`源代码`&lt;/td&gt;
 &lt;td&gt;前后使用1个反引号；底色长度等于源代码长度&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;代码块&lt;/td&gt;
 &lt;td&gt;~~~java 源代码~~~&lt;/td&gt;
 &lt;td&gt;前后使用3个波浪线，波浪线后跟回车键；后面接着选择语言&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;代码块&lt;/td&gt;
 &lt;td&gt;```java 源代码```&lt;/td&gt;
 &lt;td&gt;前后使用3个`，波浪线后跟回车键；后面接着选择语言&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TOC
{:toc}&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="补充"&gt;补充&lt;a class="anchor" href="#%e8%a1%a5%e5%85%85"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="换行"&gt;换行&lt;a class="anchor" href="#%e6%8d%a2%e8%a1%8c"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在行后面按两下空格表示换行。（此方法在实操的过程种无法查看到空格，有缺陷）
还有一种方法，在行尾添加“结尾空格”或 HTML 的 &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; 标签来实现换行，这种方法只需要正常换行即可&lt;/p&gt;
&lt;h3 id="转义字符语法"&gt;转义字符语法&lt;a class="anchor" href="#%e8%bd%ac%e4%b9%89%e5%ad%97%e7%ac%a6%e8%af%ad%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;要显示原本用于格式化 Markdown 文档的字符，请在字符前面添加反斜杠字符 \ 。&lt;/p&gt;</description></item></channel></rss>