有人能解释一下这个语法吗?它来自高科技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;
发布于 2015-08-27 15:06:52
我想这些都是外围硬件寄存器。bit
类型和@
是非标准的.@
将它们放置在STATUS
给出的绝对地址上。bit
告诉编译器地址实际上是单个位,所以它可能需要使用适当的指令(位操作)。
根据@LPs的评论(经过一些思考),这看起来像PIC-MCU (您没有说明所使用的CPU )。bit
类型告诉编译器对象的地址(ZERO
等)地址单位在“内存”(STATUS
实际上是一个CPU寄存器内存映射)地址空间。位数被打包到下3位(位0..7),字节地址在上位中。
@
的右侧计算这个位地址:(8位/字节,因此是乘法)和位数(低3位,因此是加法)。另外,也可以使用位运算符(相同的结果):
static volatile bit IRP @ ((unsigned)&STATUS << 3) | 7;
...
我非常肯定,@
和bit
在编译器文档中得到了解释。
注意,位类型实际上违反了C标准,因为这要求最小的可寻址类型为char
,至少有8位和sizeof(char) == 1
。
https://stackoverflow.com/questions/32252917
复制相似问题