<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>01-HAL on 编程那些事儿</title><link>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/</link><description>Recent content in 01-HAL on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2026 23:57:44 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/index.xml" rel="self" type="application/rss+xml"/><item><title>01-检查清单</title><link>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/01-checklist/</link><pubDate>Sat, 01 Aug 2026 10:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/01-checklist/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/embedded-book/"&gt;The Embedded Rust Book&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="hal-design-patterns-checklist"&gt;HAL 设计模式检查清单&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/checklist.html"&gt;https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/checklist.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;命名&lt;/strong&gt; &lt;em&gt;(crate 符合 Rust 命名约定)&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; crate 命名恰当（&lt;a href="02-naming/#c-crate-name"&gt;C-CRATE-NAME&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;互操作性&lt;/strong&gt; &lt;em&gt;(crate 能与其它库功能良好协作)&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 包装类型提供析构方法（&lt;a href="03-interoperability/#c-free"&gt;C-FREE&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; HAL 再导出其寄存器访问 crate（&lt;a href="03-interoperability/#c-reexport-pac"&gt;C-REEXPORT-PAC&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 类型实现 &lt;code&gt;embedded-hal&lt;/code&gt; trait（&lt;a href="03-interoperability/#c-hal-traits"&gt;C-HAL-TRAITS&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可预测性&lt;/strong&gt; &lt;em&gt;(crate 能写出易读且行为与外观一致的代码)&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 使用构造函数而非扩展 trait（&lt;a href="04-predictability/#c-ctor"&gt;C-CTOR&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPIO 接口&lt;/strong&gt; &lt;em&gt;(GPIO 接口遵循统一模式)&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 引脚类型默认为零大小类型（&lt;a href="05-gpio/#c-zst-pin"&gt;C-ZST-PIN&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 引脚类型提供擦除引脚与端口的方法（&lt;a href="05-gpio/#c-erased-pin"&gt;C-ERASED-PIN&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 引脚状态应编码为类型参数（&lt;a href="05-gpio/#c-pin-state"&gt;C-PIN-STATE&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>02-命名</title><link>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/02-naming/</link><pubDate>Sat, 01 Aug 2026 10:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/02-naming/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/embedded-book/"&gt;The Embedded Rust Book&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="naming"&gt;命名&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/naming.html"&gt;https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/naming.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id="c-crate-name"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="the-crate-is-named-appropriately-c-crate-name"&gt;crate 命名恰当（C-CRATE-NAME）&lt;/h2&gt;
&lt;p&gt;HAL crate 应以其所支持的芯片或芯片系列命名。名称应以 &lt;code&gt;-hal&lt;/code&gt; 结尾，以便与寄存器访问 crate 区分。名称中不应包含下划线（请改用连字符）。&lt;/p&gt;</description></item><item><title>03-互操作性</title><link>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/03-interoperability/</link><pubDate>Sat, 01 Aug 2026 10:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/03-interoperability/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/embedded-book/"&gt;The Embedded Rust Book&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="interoperability"&gt;互操作性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/interoperability.html"&gt;https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/interoperability.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id="c-free"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="wrapper-types-provide-a-destructor-method-c-free"&gt;包装类型提供析构方法（C-FREE）&lt;/h2&gt;
&lt;p&gt;HAL 提供的任何非 &lt;code&gt;Copy&lt;/code&gt; 包装类型都应提供 &lt;code&gt;free&lt;/code&gt; 方法：消费该包装类型，并返回创建它时所用的原始外设（以及可能的其它对象）。&lt;/p&gt;
&lt;p&gt;该方法应在必要时关闭并复位外设。使用 &lt;code&gt;free&lt;/code&gt; 返回的原始外设再次调用 &lt;code&gt;new&lt;/code&gt; 时，不应因外设处于意外状态而失败。&lt;/p&gt;</description></item><item><title>04-可预测性</title><link>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/04-predictability/</link><pubDate>Sat, 01 Aug 2026 10:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/04-predictability/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/embedded-book/"&gt;The Embedded Rust Book&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="predictability"&gt;可预测性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/predictability.html"&gt;https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/predictability.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id="c-ctor"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="constructors-are-used-instead-of-extension-traits-c-ctor"&gt;使用构造函数而非扩展 trait（C-CTOR）&lt;/h2&gt;
&lt;p&gt;凡是 HAL 为其增加功能的外设，都应包装在新类型中，即便该功能不需要额外字段。&lt;/p&gt;
&lt;p&gt;应避免为原始外设实现扩展 trait。&lt;/p&gt;</description></item><item><title>05-GPIO</title><link>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/05-gpio/</link><pubDate>Sat, 01 Aug 2026 10:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/embedded/design-patterns/hal/05-gpio/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/embedded-book/"&gt;The Embedded Rust Book&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="recommendations-for-gpio-interfaces"&gt;GPIO 接口建议&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/gpio.html"&gt;https://doc.rust-lang.org/stable/embedded-book/design-patterns/hal/gpio.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id="c-zst-pin"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="pin-types-are-zero-sized-by-default-c-zst-pin"&gt;引脚类型默认为零大小类型（C-ZST-PIN）&lt;/h2&gt;
&lt;p&gt;HAL 暴露的 GPIO 接口应为每个接口或端口上的每个引脚提供专用的零大小类型（ZST），从而在所有引脚分配在静态可知时实现零成本 GPIO 抽象。&lt;/p&gt;</description></item></channel></rss>