我在做 2018 版本 MIT 6.828 时遇到了一些奇怪的事情,该实验室在模拟 80386 CPU 的 QEMU 上运行:
我想做的是初始化 INTEL 82540EM 芯片(也称为 E1000)的接收过程。我基本上只是将一些字节写入设备的寄存器。
首先我定义了一个带有位域的结构,因为它实际上是硬件中的寄存器:
struct rx_addr_reg {
// low 32 bit
unsigned ral : 32; // 0 - 31
// high 32 bit
unsigned rah : 16; // 0 -15
unsigned as : 2; // 16 - 17
unsigned rs : 13; // 18 - 30
unsigned av : 1; // 31
};
Run Code Online (Sandbox Code Playgroud)
我决定通过 C 宏使用它:
#define E1000_RA 0x05400 /* Receive Address - RW Array */
#define …Run Code Online (Sandbox Code Playgroud)