首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图理解位ram地址

试图理解位ram地址
EN

Stack Overflow用户
提问于 2013-09-18 13:50:07
回答 2查看 156关注 0票数 0

我试着理解这段代码来解决以下问题:

代码语言:javascript
复制
/*  GPIO bits   */
static bit  GP5 @ (unsigned)&GPIO*8+5;
static bit  GP4 @ (unsigned)&GPIO*8+4;
static bit  GP3 @ (unsigned)&GPIO*8+3;
static bit  GP2 @ (unsigned)&GPIO*8+2;
static bit  GP1 @ (unsigned)&GPIO*8+1;
static bit  GP0 @ (unsigned)&GPIO*8+0;

GPIO是这样定义的:

代码语言:javascript
复制
static volatile unsigned char   GPIO    @ 0x06;

为什么GPIO地址乘以8,然后加上位数?这个宏的结果是什么,我如何处理这个位呢?

上面的代码是用于PIC单片机的XC8编译器的。Atmel在使用宏IOPORT_CREATE_PIN.时使用相同的此宏定义如下:

代码语言:javascript
复制
#define IOPORT_CREATE_PIN(port, pin)    ((IOPORT_##port)*8 + (pin))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-18 20:01:29

“为什么GPIO地址乘以8,然后加上位数?这个宏的结果是什么,我如何处理这个位呢?”

它是来自最低地址的位数:每字节8位加上对字节的偏移。

您可以使用该名称(例如,GP3 = 1; )对位进行寻址。编译器知道它是一位。正如所指出的,这是PIC的一个特定的编译器扩展。

票数 2
EN

Stack Overflow用户

发布于 2013-09-18 14:56:36

因为每个特殊的功能寄存器有8位(取决于单片机)。GP0的地址是0x06*8+0 = 0x30。位地址的方式也取决于微控制器。对不起,我不熟悉PIC。你自己想办法吧。

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

https://stackoverflow.com/questions/18874041

复制
相关文章

相似问题

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