试图理解bit ram地址

时间:2013-09-18 13:50:08

标签: c embedded bit ram pic

我正在尝试理解这段代码来解决这些问题:

/*  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以这种方式定义:

static volatile unsigned char   GPIO    @ 0x06;

为什么GPIO地址乘以8然后加上该位数?这个宏的结果是什么,我该如何解决这个问题?

上面的代码适用于PIC微控制器的XC8编译器。 Atmel在使用宏 IOPORT_CREATE_PIN 时使用相同的内容。该宏定义如下:

#define IOPORT_CREATE_PIN(port, pin)    ((IOPORT_##port)*8 + (pin))

2 个答案:

答案 0 :(得分:2)

“为什么GPIO地址乘以8后再加上该位的数量?该宏的结果是什么以及如何对该位进行寻址?”

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

您可以使用该名称来处理该位,例如GP3 = 1;。编译器知道它是一个位。正如所指出的,这是PIC的特定编译器扩展。

答案 1 :(得分:1)

因为每个特殊功能寄存器都有8位(取决于微控制器)。 GP0的地址为0x06*8+0 = 0x30。解决一些问题的方法也取决于微控制器。对不起,我不熟悉PIC。你可以自己搞清楚。

enter image description here