首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hitech C句法

Hitech C句法
EN

Stack Overflow用户
提问于 2015-08-27 15:01:11
回答 1查看 206关注 0票数 1

有人能解释一下这个语法吗?它来自高科技C包括文件

代码语言:javascript
运行
复制
    /*  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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 15:06:52

我想这些都是外围硬件寄存器。bit类型和@是非标准的.@将它们放置在STATUS给出的绝对地址上。bit告诉编译器地址实际上是单个位,所以它可能需要使用适当的指令(位操作)。

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

@的右侧计算这个位地址:(8位/字节,因此是乘法)和位数(低3位,因此是加法)。另外,也可以使用位运算符(相同的结果):

代码语言:javascript
运行
复制
static volatile bit IRP @ ((unsigned)&STATUS << 3) | 7;
...

我非常肯定,@bit在编译器文档中得到了解释。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32252917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档