<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Key 的博客</title><description>嵌入式 / 机器人 / 硬件折腾笔记</description><link>https://blog-21k.pages.dev/</link><language>zh_CN</language><item><title>你好，世界：博客的第一篇文章</title><link>https://blog-21k.pages.dev/posts/hello-world/</link><guid isPermaLink="true">https://blog-21k.pages.dev/posts/hello-world/</guid><pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;博客搭好了，用这篇文章来验证一切正常，顺便当一篇 Markdown 速查。&lt;/p&gt;
&lt;h2&gt;常用写法&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;加粗&lt;/strong&gt;、&lt;em&gt;斜体&lt;/em&gt;、&lt;code&gt;行内代码&lt;/code&gt;，还有 &lt;a href=&quot;https://gohugo.io/&quot;&gt;链接&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;引用长这样：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;学技术最好的方式就是把学的东西写出来。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;列表&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;写文章 = 在 &lt;code&gt;src/content/posts/&lt;/code&gt; 新建一个 &lt;code&gt;.md&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;本地预览：&lt;code&gt;pnpm dev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;发布：&lt;code&gt;git push&lt;/code&gt;，Cloudflare 一分钟后自动上线&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;代码块&lt;/h3&gt;
&lt;p&gt;写技术笔记最常用的就是代码块，带高亮和复制按钮：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 老朋友：STM32 点灯 */
while (1) {
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    HAL_Delay(500);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;新建文章&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm new-post xxx&lt;/code&gt; 或复制现有 md&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;本地预览&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm dev&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;正式发布&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;插图片怎么放&lt;/h2&gt;
&lt;p&gt;把图片丢进 &lt;code&gt;public/images/&lt;/code&gt; 目录，然后这样引用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![描述文字](/images/xxx.png)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;写完记得把开头 &lt;code&gt;draft: true&lt;/code&gt; 改成 &lt;code&gt;false&lt;/code&gt;（或删掉），否则正式构建时不会发布这篇。&lt;/p&gt;
</content:encoded></item><item><title>Markdown 与 Obsidian 语法速查</title><link>https://blog-21k.pages.dev/posts/markdown-%E4%B8%8E-obsidian-%E8%AF%AD%E6%B3%95%E9%80%9F%E6%9F%A5/</link><guid isPermaLink="true">https://blog-21k.pages.dev/posts/markdown-%E4%B8%8E-obsidian-%E8%AF%AD%E6%B3%95%E9%80%9F%E6%9F%A5/</guid><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Markdown 与 Obsidian 语法速查&lt;/h1&gt;
&lt;p&gt;Markdown 是一种轻量级标记语言。它通过少量符号表达标题、列表、链接、代码和表格等结构，让笔记既容易阅读，也能以纯文本形式长期保存。&lt;/p&gt;
&lt;p&gt;{{&amp;lt; admonition tip &quot;技巧&quot; &amp;gt;}}
本文同时介绍标准 Markdown 和 Obsidian 扩展语法。标有“Obsidian”的功能，在其他 Markdown 编辑器中不一定有效。
{{&amp;lt; /admonition &amp;gt;}}&lt;/p&gt;
&lt;h2&gt;一、标题&lt;/h2&gt;
&lt;p&gt;在文字前输入 &lt;code&gt;#&lt;/code&gt; 和一个空格。&lt;code&gt;#&lt;/code&gt; 越多，标题层级越低。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一篇笔记通常只使用一个一级标题，再通过二级、三级标题组织内容。&lt;/p&gt;
&lt;h2&gt;二、段落与换行&lt;/h2&gt;
&lt;p&gt;段落之间空一行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这是第一段。

这是第二段。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果只按一次回车，Markdown 通常仍会把文字视为同一段。需要强制换行时，可以在上一行末尾输入两个空格，或者使用 HTML 标签 &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;第一行末尾有两个空格  
这里会另起一行。

也可以这样换行：&amp;lt;br&amp;gt;
新的一行。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&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;th&gt;显示效果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;粗体&lt;/td&gt;
&lt;td&gt;&lt;code&gt;**粗体**&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;粗体&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;斜体&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*斜体*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;斜体&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;粗斜体&lt;/td&gt;
&lt;td&gt;&lt;code&gt;***粗斜体***&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;粗斜体&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;删除线&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~~删除线~~&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;s&gt;删除线&lt;/s&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;高亮（Obsidian）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;mark&amp;gt;高亮&amp;lt;/mark&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;lt;mark&amp;gt;高亮&amp;lt;/mark&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;行内代码&lt;/td&gt;
&lt;td&gt;&lt;code&gt;`printf()`&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;printf()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这些样式可以组合使用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这是一段 **重要内容**，其中 ==这一部分需要高亮==。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;p&gt;这是一段 &lt;strong&gt;重要内容&lt;/strong&gt;，其中 &amp;lt;mark&amp;gt;这一部分需要高亮&amp;lt;/mark&amp;gt;。&lt;/p&gt;
&lt;h2&gt;四、无序列表&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;-&lt;/code&gt;、&lt;code&gt;*&lt;/code&gt; 或 &lt;code&gt;+&lt;/code&gt; 加一个空格：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- 苹果
- 香蕉
- 橙子
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;苹果&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;pre&gt;&lt;code&gt;- 嵌入式开发
  - C 语言
  - 单片机
  - 实时操作系统
- 个人成长
  - 时间管理
  - 定期复盘
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;五、有序列表&lt;/h2&gt;
&lt;p&gt;使用数字、英文句点和空格：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. 明确目标
2. 拆分任务
3. 开始行动
4. 总结复盘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;实际输入时全部写成 &lt;code&gt;1.&lt;/code&gt; 也可以，Markdown 会自动编号：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. 第一步
1. 第二步
1. 第三步
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;六、任务清单&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;- [ ]&lt;/code&gt; 创建未完成任务，使用 &lt;code&gt;- [x]&lt;/code&gt; 表示已完成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- [x] 创建学习计划
- [ ] 阅读第一章
- [ ] 完成练习
- [ ] 总结知识点
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[x] 创建学习计划&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;p&gt;在 Obsidian 阅读视图中，可以直接单击复选框修改任务状态。&lt;/p&gt;
&lt;h2&gt;七、引用&lt;/h2&gt;
&lt;p&gt;在段落前输入 &lt;code&gt;&amp;gt;&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; 知识只有经过整理和使用，才能逐渐转化为能力。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;知识只有经过整理和使用，才能逐渐转化为能力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;引用可以嵌套：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; 第一层引用
&amp;gt;
&amp;gt;&amp;gt; 第二层引用
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;八、行内代码&lt;/h2&gt;
&lt;p&gt;用一对反引号包裹短代码、命令、变量名或文件名：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;使用 `git status` 查看仓库状态。
变量 `counter` 用于记录循环次数。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;git status&lt;/code&gt; 查看仓库状态。变量 &lt;code&gt;counter&lt;/code&gt; 用于记录循环次数。&lt;/p&gt;
&lt;h2&gt;九、代码块&lt;/h2&gt;
&lt;p&gt;使用三反引号包裹多行代码。开头的反引号后可以填写语言名称，以启用语法高亮。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```c
#include &amp;lt;stdio.h&amp;gt;

int main(void)
{
    printf(&quot;Hello, Markdown!\n&quot;);
    return 0;
}
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main(void)
{
    printf(&quot;Hello, Markdown!\n&quot;);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C++&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cpp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;&lt;code&gt;python&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;&lt;code&gt;javascript&lt;/code&gt; 或 &lt;code&gt;js&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON&lt;/td&gt;
&lt;td&gt;&lt;code&gt;json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bash&lt;/code&gt; 或 &lt;code&gt;shell&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PowerShell&lt;/td&gt;
&lt;td&gt;&lt;code&gt;powershell&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;&lt;code&gt;markdown&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;纯文本&lt;/td&gt;
&lt;td&gt;&lt;code&gt;text&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;十、表格&lt;/h2&gt;
&lt;p&gt;使用竖线 &lt;code&gt;|&lt;/code&gt; 分隔列，使用连字符 &lt;code&gt;-&lt;/code&gt; 分隔表头和内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;| 名称 | 用途 | 状态 |
| --- | --- | --- |
| GPIO | 数字输入输出 | 已掌握 |
| UART | 串口通信 | 学习中 |
| SPI | 高速同步通信 | 待学习 |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&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;GPIO&lt;/td&gt;
&lt;td&gt;数字输入输出&lt;/td&gt;
&lt;td&gt;已掌握&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UART&lt;/td&gt;
&lt;td&gt;串口通信&lt;/td&gt;
&lt;td&gt;学习中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SPI&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;/p&gt;
&lt;pre&gt;&lt;code&gt;| 左对齐 | 居中 | 右对齐 |
| :--- | :---: | ---: |
| 内容 | 内容 | 100 |
&lt;/code&gt;&lt;/pre&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;/td&gt;
&lt;td&gt;内容&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;{{&amp;lt; admonition note &quot;说明&quot; &amp;gt;}}
表格中的竖线如果不是列分隔符，需要写成 &lt;code&gt;\|&lt;/code&gt;。
{{&amp;lt; /admonition &amp;gt;}}&lt;/p&gt;
&lt;h2&gt;十一、分隔线&lt;/h2&gt;
&lt;p&gt;单独一行输入三个或更多的连字符、星号或下划线：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;分隔线适合区分主题，但不宜使用过多，标题通常是更清晰的结构工具。&lt;/p&gt;
&lt;h2&gt;十二、普通链接&lt;/h2&gt;
&lt;p&gt;链接文字放在方括号中，网址放在圆括号中：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Obsidian 官网](https://obsidian.md)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://obsidian.md&quot;&gt;Obsidian 官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;直接粘贴网址也可以形成链接：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;https://obsidian.md&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;十三、图片&lt;/h2&gt;
&lt;p&gt;Markdown 图片语法比普通链接多一个感叹号：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![图片说明](图片地址)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;网络图片示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![示例图片](https://example.com/image.png)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可以使用 Obsidian 的嵌入语法显示仓库附件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![[示例图片.png]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;指定图片宽度：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![[示例图片.png|400]]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;十四、Obsidian 双向链接&lt;/h2&gt;
&lt;p&gt;使用双方括号链接仓库内的其他笔记：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[个人成长：建立可持续的进步系统]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以为链接设置显示名称：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[个人成长：建立可持续的进步系统|个人成长系统]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;链接到某个标题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[嵌入式系统学习路线#二、推荐的实践方式]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;链接到当前笔记中的标题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[#九、代码块]]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;十五、块链接&lt;/h2&gt;
&lt;p&gt;Obsidian 可以链接到一段特定内容。在目标段落末尾添加块标识：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这是一段值得反复引用的重要内容。 ^important
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在其他位置引用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[笔记名称#^important]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;块标识应当简短且唯一，通常使用英文、数字和连字符。&lt;/p&gt;
&lt;h2&gt;十六、嵌入其他内容&lt;/h2&gt;
&lt;p&gt;在双向链接前添加 &lt;code&gt;!&lt;/code&gt;，可以把目标内容直接嵌入当前笔记：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![[另一篇笔记]]
![[另一篇笔记#某个标题]]
![[另一篇笔记#^important]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Obsidian 还可以嵌入图片、音频和 PDF：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![[图片.png]]
![[录音.mp3]]
![[文档.pdf]]
![[文档.pdf#page=3]]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;十七、提示框 Callout&lt;/h2&gt;
&lt;p&gt;Callout 是 Obsidian 提供的醒目提示框：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!note]
&amp;gt; 这是一条普通说明。

&amp;gt; [!tip] 自定义标题
&amp;gt; 这是一条实用建议。

&amp;gt; [!warning]
&amp;gt; 这里需要特别注意。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常用类型：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!note] 说明
&amp;gt; 补充信息。

&amp;gt; [!abstract] 摘要
&amp;gt; 内容摘要。

&amp;gt; [!info] 信息
&amp;gt; 背景信息。

&amp;gt; [!tip] 技巧
&amp;gt; 实用建议。

&amp;gt; [!success] 成功
&amp;gt; 已经完成。

&amp;gt; [!question] 问题
&amp;gt; 需要进一步思考。

&amp;gt; [!warning] 警告
&amp;gt; 可能存在风险。

&amp;gt; [!danger] 危险
&amp;gt; 必须立即处理。

&amp;gt; [!example] 示例
&amp;gt; 一个具体例子。

&amp;gt; [!quote] 引用
&amp;gt; 引用内容。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可折叠提示框使用 &lt;code&gt;+&lt;/code&gt; 或 &lt;code&gt;-&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!faq]- 默认折叠
&amp;gt; 单击标题后展开内容。

&amp;gt; [!note]+ 默认展开
&amp;gt; 这部分内容可以折叠。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;十八、脚注&lt;/h2&gt;
&lt;p&gt;脚注适合补充来源或不便放在正文中的说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Markdown 由 John Gruber 创建。[^1]

[^1]: Markdown 最初发布于 2004 年。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可以使用行内脚注：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这句话包含一条补充说明。^[这就是行内脚注。]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;十九、标签&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;#&lt;/code&gt; 创建标签：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#嵌入式
#个人成长
#学习/编程
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;标签中不能包含空格。层级标签使用 &lt;code&gt;/&lt;/code&gt; 分隔，例如 &lt;code&gt;#学习/编程&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;为了避免标签被识别成标题，正文标签通常放在行内，或者统一写在 YAML 属性中。&lt;/p&gt;
&lt;h2&gt;二十、YAML 属性&lt;/h2&gt;
&lt;p&gt;笔记开头的一对 &lt;code&gt;---&lt;/code&gt; 之间可以保存结构化属性：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: Markdown 语法速查
date: 2026-06-15
tags:
  - Markdown
  - Obsidian
aliases:
  - Markdown 用法
status: 学习中
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;笔记标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;创建或记录日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;分类标签&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;aliases&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;笔记别名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;当前状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;source&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;内容来源&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;YAML 必须位于文件最开头，冒号后要保留一个空格。&lt;/p&gt;
&lt;h2&gt;二十一、数学公式&lt;/h2&gt;
&lt;p&gt;Obsidian 使用 LaTeX 语法显示公式。&lt;/p&gt;
&lt;p&gt;行内公式使用一对 &lt;code&gt;$&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;勾股定理可以写成 $a^2+b^2=c^2$。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;独立公式使用两对 &lt;code&gt;$$&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$$
E = mc^2
$$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常见写法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\frac{a}{b}            % 分数
x^2                    % 上标
x_i                    % 下标
\sqrt{x}               % 根号
\sum_{i=1}^{n} x_i     % 求和
\alpha + \beta         % 希腊字母
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二十二、Mermaid 图表&lt;/h2&gt;
&lt;p&gt;Obsidian 可以通过 Mermaid 代码块绘制流程图：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
flowchart LR
    A[明确目标] --&amp;gt; B[拆分任务]
    B --&amp;gt; C[开始行动]
    C --&amp;gt; D[获取反馈]
    D --&amp;gt; E[复盘改进]
    E --&amp;gt; B
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;flowchart LR
    A[明确目标] --&amp;gt; B[拆分任务]
    B --&amp;gt; C[开始行动]
    C --&amp;gt; D[获取反馈]
    D --&amp;gt; E[复盘改进]
    E --&amp;gt; B
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二十三、注释&lt;/h2&gt;
&lt;p&gt;Obsidian 使用两对百分号隐藏注释。注释在编辑模式中可见，在阅读视图中不会显示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这段内容会正常显示。

%% 这是一条不会在阅读视图中显示的备注。 %%

%%
这里也可以写
多行注释。
%%
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二十四、转义特殊字符&lt;/h2&gt;
&lt;p&gt;如果希望显示 Markdown 符号本身，可以在符号前添加反斜杠 &lt;code&gt;\&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\*这段文字不会变成斜体\*
\# 这不会变成标题
\- 这不会变成列表
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常见需要转义的字符包括：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\  `  *  _  { }  [ ]  &amp;lt; &amp;gt;  ( )  #  +  -  .  !  |
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二十五、HTML&lt;/h2&gt;
&lt;p&gt;多数 Markdown 编辑器允许使用少量 HTML：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;u&amp;gt;下划线文字&amp;lt;/u&amp;gt;
H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O
x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;
&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;gt;P&amp;lt;/kbd&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示效果：&lt;/p&gt;
&lt;p&gt;&amp;lt;u&amp;gt;下划线文字&amp;lt;/u&amp;gt;&lt;br /&gt;
H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O&lt;br /&gt;
x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;gt;P&amp;lt;/kbd&amp;gt;&lt;/p&gt;
&lt;p&gt;HTML 的兼容性不如标准 Markdown，只有在 Markdown 本身无法表达时再使用。&lt;/p&gt;
&lt;h2&gt;二十六、一个完整笔记示例&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;---
title: UART 学习记录
date: 2026-06-15
tags:
  - 嵌入式
  - UART
status: 学习中
---

# UART 学习记录

## 今日目标

- [x] 理解基本通信原理
- [ ] 完成串口收发实验

## 核心概念

UART 是一种 **异步串行通信** 方式，常见参数包括：

| 参数 | 示例 |
| --- | --- |
| 波特率 | 115200 |
| 数据位 | 8 |
| 停止位 | 1 |
| 校验位 | 无 |

&amp;gt; [!warning]
&amp;gt; 通信双方的参数必须保持一致。

## 示例代码

```c
printf(&quot;Hello UART!\r\n&quot;);
```

## 总结

今天掌握了 ==UART 的基本帧结构==，下一步学习中断接收。

相关笔记：[[嵌入式系统学习路线]]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二十七、使用建议&lt;/h2&gt;
&lt;ol&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;优先使用通用 Markdown，需要时再使用 Obsidian 扩展。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;快速索引&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;粗体、斜体、删除线与高亮&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务清单&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码块&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;表格&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;双向链接&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提示框&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YAML 属性&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数学公式&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mermaid 图表&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>嵌入式系统学习路线</title><link>https://blog-21k.pages.dev/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/</link><guid isPermaLink="true">https://blog-21k.pages.dev/posts/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/</guid><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;嵌入式系统学习路线&lt;/h1&gt;
&lt;p&gt;嵌入式系统是为特定任务设计的计算机系统。它通常由处理器、存储器、外设接口和软件共同组成，广泛存在于家电、汽车、工业控制、医疗设备和物联网终端中。&lt;/p&gt;
&lt;p&gt;学习嵌入式不能只停留在“会调用库函数”。真正重要的是理解：&lt;strong&gt;一段代码如何通过寄存器控制硬件，又如何在有限资源和实时要求下可靠运行。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;一、需要建立的知识体系&lt;/h2&gt;
&lt;h3&gt;1. C 语言基础&lt;/h3&gt;
&lt;p&gt;C 语言是嵌入式开发最常见的语言，需要重点掌握：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;指针、数组、结构体和函数指针&lt;/li&gt;
&lt;li&gt;位运算与掩码&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const&lt;/code&gt;、&lt;code&gt;static&lt;/code&gt;、&lt;code&gt;volatile&lt;/code&gt; 等关键字&lt;/li&gt;
&lt;li&gt;栈、堆、全局区和静态存储区&lt;/li&gt;
&lt;li&gt;编译、链接和可执行文件的生成过程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中，&lt;code&gt;volatile&lt;/code&gt; 常用于硬件寄存器和中断共享变量。它告诉编译器：变量可能在程序控制范围之外发生变化，不能随意省略对它的访问。&lt;/p&gt;
&lt;h3&gt;2. 数字电路与硬件基础&lt;/h3&gt;
&lt;p&gt;软件最终需要运行在真实电路上，因此至少要能够：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;阅读原理图和芯片数据手册&lt;/li&gt;
&lt;li&gt;理解电压、电流、上拉、下拉和高低电平&lt;/li&gt;
&lt;li&gt;认识 GPIO、时钟、复位和中断&lt;/li&gt;
&lt;li&gt;使用万用表、示波器或逻辑分析仪定位问题&lt;/li&gt;
&lt;li&gt;了解 UART、I²C、SPI、CAN 等常见总线&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;遇到故障时，可以按照“电源 → 时钟 → 复位 → 引脚 → 通信 → 软件逻辑”的顺序检查。&lt;/p&gt;
&lt;h3&gt;3. 微控制器与外设&lt;/h3&gt;
&lt;p&gt;初学阶段可以选择 STM32、ESP32 等资料丰富的平台，依次练习：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;GPIO 点灯与按键输入&lt;/li&gt;
&lt;li&gt;UART 串口收发&lt;/li&gt;
&lt;li&gt;定时器与 PWM&lt;/li&gt;
&lt;li&gt;外部中断&lt;/li&gt;
&lt;li&gt;ADC 和 DMA&lt;/li&gt;
&lt;li&gt;I²C、SPI 传感器&lt;/li&gt;
&lt;li&gt;看门狗与低功耗&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;每完成一个外设实验，都应该回答三个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它依赖哪些时钟和引脚？&lt;/li&gt;
&lt;li&gt;核心寄存器或配置项是什么？&lt;/li&gt;
&lt;li&gt;出现异常时，怎样观察它的状态？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. 实时操作系统&lt;/h3&gt;
&lt;p&gt;当任务增多后，可以学习 FreeRTOS 等实时操作系统。重点不是记住 API，而是理解：&lt;/p&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;/ul&gt;
&lt;p&gt;裸机程序有助于理解硬件，RTOS 则帮助我们管理复杂性。两者并非互相替代，而是面向不同规模的问题。&lt;/p&gt;
&lt;h2&gt;二、推荐的实践方式&lt;/h2&gt;
&lt;h3&gt;项目驱动&lt;/h3&gt;
&lt;p&gt;比起零散地学习外设，完成一个小项目更容易形成完整认识。例如：&lt;/p&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;/ul&gt;
&lt;p&gt;一个完整项目至少应包含需求、模块划分、接口定义、调试记录和结果复盘。&lt;/p&gt;
&lt;h3&gt;阅读数据手册&lt;/h3&gt;
&lt;p&gt;阅读数据手册时，不必从第一页逐字读到最后。可以先寻找：&lt;/p&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;/ul&gt;
&lt;p&gt;先带着具体问题查阅，再逐渐建立对芯片的整体认识。&lt;/p&gt;
&lt;h3&gt;记录调试过程&lt;/h3&gt;
&lt;p&gt;调试记录建议采用以下格式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;现象：
预期：
已经确认：
可能原因：
验证方法：
最终原因：
修复方式：
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这能避免反复尝试同一方案，也能逐渐形成个人故障库。&lt;/p&gt;
&lt;h2&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;/ul&gt;
&lt;h2&gt;四、阶段性学习目标&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] 能独立阅读简单原理图&lt;/li&gt;
&lt;li&gt;[ ] 能用 C 语言实现常见数据结构和状态机&lt;/li&gt;
&lt;li&gt;[ ] 能脱离教程驱动常用 MCU 外设&lt;/li&gt;
&lt;li&gt;[ ] 能使用调试器观察寄存器、内存和调用栈&lt;/li&gt;
&lt;li&gt;[ ] 能定位一次硬件或通信故障&lt;/li&gt;
&lt;li&gt;[ ] 能编写一个包含多个任务的 RTOS 项目&lt;/li&gt;
&lt;li&gt;[ ] 能说明项目中的资源、实时性和可靠性设计&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;五、核心认识&lt;/h2&gt;
&lt;p&gt;嵌入式能力来自三个层面的结合：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;看得懂硬件，写得出软件，定位得了系统问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;学习过程不必追求一次掌握所有知识。更有效的方法是完成小项目、暴露真实问题、记录解决过程，再回到原理中补齐认知。这种积累方式也适用于 &lt;strong&gt;个人成长：建立可持续的进步系统&lt;/strong&gt;。&lt;/p&gt;
</content:encoded></item></channel></rss>