Hitech C 语法

Hitech C Syntax

谁能给我解释一下这个语法?它来自 Hi Tech C 包含文件

    /*  STATUS bits */
static volatile bit IRP     @ (unsigned)&STATUS*8+7;
static volatile bit RP1     @ (unsigned)&STATUS*8+6;
static volatile bit RP0     @ (unsigned)&STATUS*8+5;
static volatile bit TO  @ (unsigned)&STATUS*8+4;
static volatile bit PD  @ (unsigned)&STATUS*8+3;
static volatile bit ZERO    @ (unsigned)&STATUS*8+2;
static volatile bit DC      @ (unsigned)&STATUS*8+1;
static volatile bit CARRY   @ (unsigned)&STATUS*8+0;

我假设这些是外设硬件寄存器。 bit 类型和 @ 是非标准的。 @ 将它们放在 STATUS 给出的绝对地址中。 bit 告诉编译器地址实际上是单个位,因此它可能必须使用适当的指令(位操作)。

根据@LPs 的评论(经过一番思考),这看起来像 PIC-MCU(您没有说明使用了 CPU)。 bit 类型告诉编译器对象的地址(ZERO 等)地址 "RAM" 中的单个位(STATUS 实际上是一个 CPU 寄存器内存映射)地址 space。位号被打包到低 3 位(位 0..7),字节地址在高位。

@ 的右侧计算此位地址:(8 bits/byte,因此乘法)和位数(低 3 位,因此加法)。或者可以使用位运算符(相同的结果):

static volatile bit IRP @ ((unsigned)&STATUS << 3) | 7;
...

我很确定,@bit 在编译器文档中有解释。

请注意,位类型实际上违反了 C 标准,因为这要求最小的可寻址类型为 char,至少有 8 位和 sizeof(char) == 1.