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
.
谁能给我解释一下这个语法?它来自 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
.