CH32V103 HAL库的结构组织构思

写在前面

好久没发文章了,最近有好些在折腾的事,今天写一篇文章主要是为了分析本人所构思的一种脱离svd2rust工具而自制ch32v103 rust hal库的实现,这对于我理解市面大部分mcu以及rust的no-std开发有着极其重要的作用,他对于我来说,不仅是一次项目,更是一次学习。

项目地址:GitHub

正文开始

结构设计

本人设想以rust语言编写一个大部分mcu库都在使用的寄存器-HAL双层结构,能够以最简单易懂的方式完成对mcu的操作。众所周知rust相对C语言,有了许多高级的特性,trait、泛型、泛型约束、函数式编程、借用检查、内存安全等,意味着我需要以rust的惯用模式去设计,而不能简单的将库以“C的翻版”方式去写。让我们以GPIO为例子,去探讨设计一个简单好用的库。

为了简化,方便说明,假设我们的GPIO只有一组IO,其寄存器基地址为GPIO_BASE_ADDR,为无符号32位整数,寄存器间地址偏移值均0x04。有了这个假设,按照双层结构,我们应该先设计寄存器层,我们将GPIO抽象成一个结构体,其结构为

  • GPIO
    • CFGR(端口配置寄存器,用来配置每个IO口的输入输出及其他模式)
    • INDR(用于存放某IO当输入模式下存放的值)
    • OUTDR(用于存放某IO当输出模式下输出的值,也就是上下拉)
    • BSHR(端口置位寄存器)
    • BCR(端口复位寄存器)
    • LCKR(端口配置锁定寄存器,会锁定CFGR寄存器)
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计