Skip to content

Commit e81a8a4

Browse files
committed
fix: missing links, wording
1 parent 19154bc commit e81a8a4

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

_posts/2024-08-23-embedded-rust-peripheral-register-access-svdtools-chiptool-and-metapac-approach.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -413,13 +413,15 @@ enum/RX_IDLE_COND:
413413
value: 1
414414
```
415415

416-
其中对寄存器描述的优化是整个工作最麻烦耗时的地方, 例如对 enum 的优化, 对寄存器 array 的优化等. 优化修改的好处是显而易见的, 例如如下两种代码风格对比:
416+
其中对外设寄存器描述的优化是整个工作最麻烦耗时的地方,
417+
例如对字段值 enum 的优化, 对寄存器 array 的优化等.
418+
优化修改的好处是显而易见的, 例如如下两种代码风格对比:
417419

418420
```rust
419421
// set PWM1_CMP7 mode
420422
use hpm_metapac as pac;
421423
use pac::pwm::vals;
422-
pac::PWM1.cmpcfg(7).modify(|w| {
424+
pac::PWM1.cmpcfg7().modify(|w| {
423425
w.set_cmpmode(0); // output compare
424426
w.set_cmpshdwupt(1); // on modify
425427
});
@@ -522,7 +524,8 @@ HPMicro 提供了多个系列的高性能 RISV-V MCU, 包括丰富的外设资
522524
- `hpm_metapac::trgmmux::` 下的所有 TRGM 常量定义
523525

524526
对于 PAC 库来说, 不仅仅是提供给 HAL 驱动使用, 而是同时能给最终用户一个方便安全的寄存器访问接口. 对于某些设计良好的外设, 寄存器访问更直接有效.
525-
由此通过简单的方式就可以使用对应的外设(虽然丢失了部分类型安全, 不过加一个 enum 也很容易, 这里主要是等待上游 chiptool 实现该机制):
527+
所以上面的常量定义其实很有必要, 也为 HAL 的实现提供了额外信息:
528+
(这里为了方便作为 index 使用, 统一用了 `usize` 类型. 丢失了部分类型安全, 不过加一个 enum 也很容易, 这里主要是等待上游 chiptool 实现 cluster 支持.)
526529

527530
```rust
528531
use hpm_metapac as pac;
@@ -536,14 +539,14 @@ pac::IOC
536539

537540
### pac 库的其他内容
538541

539-
上述一节其实已经介绍了 PAC 库在标准的寄存器访问定义之外还有哪些内容, 这里再总结一遍:
542+
上述一节其实已经介绍了 PAC 库在标准的外设寄存器访问定义之外还有哪些内容, 这里再总结一遍:
540543

541544
- 中断静态结构体定义, enum 定义 - 用于在 `-rt` 库中使用, 链接到中断处理函数
542545
- `device.x` 定义中断处理函数的链接符号, 和中断表结构体结合使用
543546
- `Peripherals` owned struct, 用于通过 ownership 机制管理外设资源 - 仅 svd2rust
544-
- `CorePeripherals` owned struct, 用于管理核心外设资源 - 仅 svd2rust + Cortex-M
545-
- `memory.x` 定义内存布局 - 实际上由于应用各异, 可能不会被使用到, 通过 feature gate 启用
546-
- 各种 METADATA 信息 - 仅本文提到的 metapac
547+
- `CorePeripherals` owned struct, 用于管理核心外设资源, 一般是内核定时器中断处理器等 - 仅 svd2rust + Cortex-M
548+
- `memory.x` 定义内存布局 - 实际上由于平台的多样性, 不一定非要由 pac 来提供内存布局定义, 比如某些可自由配置 FLASH/RAM 的芯片, 更适合最终应用提供
549+
- 各种 METADATA 信息 - 仅适用于本文提到的 metapac
547550

548551
## 总结及对比
549552

@@ -566,6 +569,7 @@ pac::IOC
566569
[bitflags]: https://crates.io/crates/bitflags
567570
[stm32-rs]: https://github.com/stm32-rs/stm32-rs
568571
[ch32-rs]: https://github.com/ch32-rs/ch32-rs
572+
[ch32-data]: https://github.com/ch32-rs/ch32-data
569573
[stm32-data]: https://github.com/embassy-rs/stm32-data
570574
[hpm_sdk]: https://github.com/hpmicro/hpm_sdk
571575
[yaml2pac]: https://github.com/embedded-drivers/yaml2pac

0 commit comments

Comments
 (0)