1.5.1 位标志

01-位标志 — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/bare-metal/aps/better-uart/bitflags.html

1.5.1 位标志

bitflags crate 很适合处理位标志。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
use bitflags::bitflags;

bitflags! {
    /// 来自 UART 标志寄存器的标志。
    #[repr(transparent)]
    #[derive(Copy, Clone, Debug, Eq, PartialEq)]
    struct Flags: u16 {
        /// 清除发送。
        const CTS = 1 << 0;
        /// 数据集准备就绪。
        const DSR = 1 << 1;
        /// 数据载体检测。
        const DCD = 1 << 2;
        ///UART 忙于传输数据。
        const BUSY = 1 << 3;
        /// 接收 FIFO 为空。
        const RXFE = 1 << 4;
        /// 发送 FIFO 已满。
        const TXFF = 1 << 5;
        /// 接收 FIFO 已满。
        const RXFF = 1 << 6;
        /// 发送 FIFO 为空。
        const TXFE = 1 << 7;
        /// 响铃指示器。
        const RI = 1 << 8;
    }
}
  • 这bitflags!宏创建一个新类型,类似于struct Flags(u16), 以及一堆用于获取和设置标志的方法实现。
最后修改 August 11, 2026: 更新 (70a5af133)