在 Rust 中使用类型级编程可以使硬件抽象更加安全。
Rust 是一种日益流行的编程语言,被视为硬件接口的最佳选择。通常会将其与 C 的抽象级别相比较。本文介绍了 Rust 如何通过多种方式处理按位运算,并提供了既安全又易于使用的解决方案。
语言 | 诞生于 | 官方描述 | 总览 |
---|---|---|---|
C | 1972 年 | C 是一种通用编程语言,具有表达式简约、现代的控制流和数据结构,以及丰富的运算符集等特点。(来源:CS 基础知识) | C 是(一种)命令式语言,旨在以相对简单的方式进行编译,从而提供对内存的低级访问。(来源:W3schools.in) |
Rust | 2010 年 | 一种赋予所有人构建可靠、高效的软件的能力的语言(来源:Rust 网站) | Rust 是一种专注于安全性(尤其是安全并发性)的多范式系统编程语言。(来源:维基百科) |
在 C 语言中对寄存器值进行按位运算
在系统编程领域,你可能经常需要编写硬件驱动程序或直接与内存映射设备进行交互,而这些交互几乎总是通过硬件提供的内存映射寄存器来完成的。通常,你通过对某些固定宽度的数字类型进行按位运算来与这些寄存器进行交互。
例如,假设一个 8 位寄存器具有三个字段:
+----------+------+-----------+---------+
| (unused) | Kind | Interrupt | Enabled |
+----------+------+-----------+---------+
5-7 2-4 1 0
字段名称下方的数字规定了该字段在寄存器中使用的位。要启用该寄存器,你将写入值 1
(以二进制表示为 0000_0001
)来设置 Enabled
字段的位。但是,通常情况下,你也不想干扰寄存器中的现有配置。假设你要在设备上启用中断功能,但也要确保设备保持启用状态。为此,必须将 Interrupt
字段的值与 Enabled
字段的值结合起来。你可以通过按位操作来做到这一点:
1 | (1