我试着理解这段代码来解决以下问题:
/* 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))发布于 2013-09-18 20:01:29
“为什么GPIO地址乘以8,然后加上位数?这个宏的结果是什么,我如何处理这个位呢?”
它是来自最低地址的位数:每字节8位加上对字节的偏移。
您可以使用该名称(例如,GP3 = 1; )对位进行寻址。编译器知道它是一位。正如所指出的,这是PIC的一个特定的编译器扩展。
发布于 2013-09-18 14:56:36
因为每个特殊的功能寄存器有8位(取决于单片机)。GP0的地址是0x06*8+0 = 0x30。位地址的方式也取决于微控制器。对不起,我不熟悉PIC。你自己想办法吧。

https://stackoverflow.com/questions/18874041
复制相似问题