#devices #driver #toolkit #yaml #no-std

no-std device-driver-generation

device-driver 集成生成代码

4 个版本 (2 个破坏性版本)

新版本 0.7.0 2024 年 8 月 22 日
0.6.0 2024 年 5 月 26 日
0.5.3 2024 年 1 月 8 日
0.5.0 2024 年 1 月 7 日

#1671嵌入式开发

每月 49 次下载
2 个集成中使用 (通过 device-driver-macros)

MIT/Apache

78KB
1.5K SLoC

设备驱动工具包 #![no_std] crates.io Documentation

一个用于编写更好、更快的设备驱动程序的工具包。

这个集成是一组特质,用于表示设备、寄存器和命令。您可以使用宏以方便的方式实现寄存器和命令。

您可以用相当简单的方式为用户提供阻塞和异步接口。

目前您有以下选项

欢迎反馈和建议!只需在 github 上提交问题。我想为这个集成添加更多功能,但只有在我(或可能您)需要它们的时候。

我意识到文档有点不够完整,但示例应该相当简单。对于使用此集成的真实驱动程序示例,您还可以查看:https://github.com/diondokter/s2lp

还需要

  • 添加一次性读取多个寄存器的功能
  • CLI 生成实现一次(提高驱动程序用户的编译时间)

注意:在https://github.com/illicitonion/num_enum/pull/77合并之前,您需要将num_enum导入到使用设备驱动宏的crate中。这需要在Cargo.toml中添加。仅尝试从设备驱动中导入重导出是不够的。

架构

该crate由三部分组成

  • device-driver:主要的crate,重新导出所需的一切。它定义了一套代表设备和寄存器的特质。设备特质由驱动crate实现,以便让系统知道如何读写寄存器。所有这些操作都是通过包含关于寄存器所需所有信息的寄存器特质来完成的。手动实现寄存器和它们的字段是可能的,但这个crate提供了非常方便的功能来生成所有这些。
  • device-driver-generation:这可以被视为后端。它定义了设备及其寄存器和字段的一种中间表示。从那里,它可以生成实现上述设备驱动特质的Rust代码。它还提供了一些自定义的serde反序列化例程,以便方便地表示各种类型。
  • device-driver-macros:包含所有过程宏。一个宏接受一个定义文件的路径。然后它使用serde将其反序列化为'生成'表示。另一个宏定义了一种自定义的Rust语法,并将其转换为'生成'表示。两者都生成寄存器和它们的字段的实现。

语义版本控制

任何可能破坏用户代码的事情都将导致语义版本控制的重大更改。这包括宏格式和文件寄存器定义格式。

认为generationmacroscrates是内部的,因此它们在语义版本控制上的要求可能不那么严格。这主要是为了使它们与主要crate的版本保持一致。

如果您直接依赖这些crate,请告诉我!如果我知道它们有直接的用户,我会对版本要求更加严格。

许可证

在以下任一许可证下授权

由您选择。

贡献

除非您明确说明,否则任何有意提交给包括在您的工作中的贡献,根据Apache-2.0许可证定义,都应双许可,没有额外的条款或条件。

变更日志

未发布

0.7.0 (22-08-24)

  • 重大更改:改进了命令调度的API
  • 添加了缓冲区支持
  • 添加了严格模式转换。这使得类型需要From<primitive>而不是TryFrom<primitive>。但读取寄存器字段的结果不是。
  • 为寄存器添加了字节序选项,以便可以将它们以小端读取和存储。(如果没有指定,则默认为大端)
  • 在寄存器结构体上添加了BitAnd、BitOr和BitXor。这与我期望的并不一致,但希望在下个版本中修复。
  • 添加了对寄存器块的支持

0.6.0 (26-05-24)

  • 重大更改:将宏重命名,不包括“register”这个词
  • 添加了定义命令的方式

0.5.3 (08-01-24)

  • 改进的readme,包含硬链接和更多说明
  • 现在生成的设备寄存器函数也有文档了

0.5.2 (08-01-24)

  • 异步读和修改现在使用寄存器而不是它们的读写类型

0.5.1 (08-01-24)

  • 移除了强制std的意外依赖

0.5.0 (07-01-24)

  • 破坏性变更:从零开始重新构建了crate。现在更依赖于类型系统,所有宏都是proc-macros。这使得它更容易维护和扩展。
  • 新的寄存器特质
  • 新的设备特质
  • 几乎所有的旧功能仍然支持

0.4.1 (13-12-22)

  • 意外地将异步标志默认设置为0.4.0,导致它在稳定版本上无法编译

0.4.0 (13-12-22) (已撤回)

  • 为寄存器接口添加了异步支持。使用async功能标志来激活它。激活后,您将能够访问ll::register_async模块,该模块会为您生成异步代码。
  • 更新了依赖项(主要是bitvec到1.0,这使得这次发布是一个技术上的破坏性变更)

0.3.1 (22-12-21)

  • 为低级错误添加了文档(#14

0.3.0 (02-05-21)

  • 为所有寄存器R添加了更好的Debug实现,以十六进制形式打印原始值。现在还有一个选项(#[generate)])来获取一个更好的Debug实现,该实现还会打印出所有字段,但要求所有字段都必须实现自己的Debug。请参阅(#10)了解其工作原理。

0.2.0 (19-04-21)

  • 现在所有与'W'的用户交互都通过&mut而不是直接进行,以支持更多种类的代码结构(#7

依赖项

~1.9–2.7MB
~50K SLoC