14 个不稳定版本 (6 个重大更改)
新版本 0.7.0 | 2024 年 8 月 22 日 |
---|---|
0.6.0 | 2024 年 5 月 26 日 |
0.5.3 | 2024 年 1 月 8 日 |
0.4.2 | 2024 年 6 月 27 日 |
0.1.0 | 2020 年 9 月 28 日 |
在 嵌入式开发 中排名第 174
每月下载量 353
用于 2 crates
36KB
637 行代码
设备驱动程序工具包 #![no_std]
一个用于编写更好的设备驱动程序的工具包,更快。
这个 crate 包含一组 trait,用于表示设备、寄存器和命令。您可以使用宏以方便的方式实现寄存器和命令。
您可以轻松地为用户提供阻塞和异步接口。
目前您有以下选项
- 使用类似 Rust 语法的宏: 示例
- 从 外部 json 文件 生成: 示例
- 从 外部 yaml 文件 生成: 示例
欢迎反馈和建议!请直接在 github 上提交问题。我想为这个 crate 添加更多功能,但只有在我(或者你)需要的时候。
我明白文档有些不足,但示例应该相当直观。对于使用此 crate 的真实驱动程序示例,您还可以查看: https://github.com/diondokter/s2lp
还需要改进
- 添加一次性读取多个寄存器的能力
- 命令行界面以生成实现(提高驱动程序用户的编译时间)
注意:在https://github.com/illicitonion/num_enum/pull/77 合并之前,您需要将 num_enum 导入到使用设备驱动宏的 crate 中。这需要在 Cargo.toml
中添加。仅仅从设备驱动中重新导出是不够的。
架构
该 crate 由三部分组成
device-driver
:主要的 crate,重新导出所需的一切。它定义了一组表示设备和寄存器的 trait。设备 trait 应由驱动 crate 实现,以便让系统知道如何读取和写入寄存器。所有这些操作都是通过包含有关寄存器所需所有信息的寄存器 trait 来完成的。虽然可以手动实现寄存器和它们的字段,但这个 crate 提供了非常方便的功能来生成所有这些。device-driver-generation
:这相当于后端。它包含了一种设备及其寄存器和字段的中间表示形式的定义。从那里,它可以生成实现上述设备驱动 trait 的 Rust 代码。它还为各种类型提供了自定义的serde
反序列化例程,以便它们可以方便地表达。device-driver-macros
:包含所有的 proc 宏。一个宏接受一个定义文件的路径。然后它使用 serde 将其反序列化为 '生成' 表示形式。另一个宏定义了自定义的 Rust 语法,并将其转换为 '生成' 表示形式。两者都生成寄存器和它们的字段的实现。
语义版本控制
任何可能破坏用户代码的东西都应引发 破坏性 的语义版本控制提升。这包括宏格式和文件寄存器定义格式。
generation
和 macros
crate 被视为内部组件,因此它们在语义版本控制提升上可能不会那么严格。这主要是为了使它们与主要 crate 的版本保持一致。
如果您直接依赖于这些 crate,请告诉我!如果我知道这些有直接用户,我会对版本更加严格。
许可证
根据您选择的以下任何一个许可证授权:
- Apache License,版本 2.0(《LICENSE-APACHE》或 https://apache.ac.cn/licenses/LICENSE-2.0》)
- MIT 许可证(《LICENSE-MIT》或 http://opensource.org/licenses/MIT》)
由您选择。
贡献
除非您明确表示,否则根据 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(2022年12月13日)(已撤回)
- 为寄存器接口添加了异步支持。使用
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
实现,该实现还会打印出所有字段,但要求所有字段都实现Debug
。请参阅(#10)了解其工作原理。
0.2.0 (19-04-21)
- 现在所有与“W”的用户交互都通过&mut进行,而不是直接进行,以支持更多类型的代码结构(#7)
依赖项
~3–4MB
~81K SLoC