这在您要创建模块寄存器的硬件中特别有用。
现在,里面Register
有很多bit-fields
可以在bits
. 因此,您创建一个结构来表示Register
和bit-fields
。基本上,硬件中的寄存器是存储模块信息的结构。
例如,对于 USB 模块,USB 硬件内部的寄存器存储有关 USB 设备状态和许多其他内容的信息。
通过限制 to 内部数据成员的长度而不是为struct
tobits
保留uints(or any other primitive data types)
,bit-fields
因为它占用的内存非常少。
此外,虚拟声明 unsigned int : 6;
用于填充结构,以便结构对象和访问word aligned
符合机器体系结构。因此,如果访问与处理器的字边界对齐,则对寄存器对象的访问不会消耗更多时间。基本上,如果字、半字或字节在地址处对齐,该地址是处理器字长的倍数,那么它可以非常有效地一次访问。
例如,在您的情况下Register
,16-bits
它具有 3 个位域:掩码、特权和 ov。而其余6-bits
的则保留以备将来使用。这是它的Register
样子,
bit-position 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
---------------------------------------
|ov | reserved | privilege |mask|
---------------------------------------
因此,通过制作大小为 16 位的结构,该结构的对象可以在具有 8、16、32 位 ALU 的处理器上轻松访问