函数:
#define ASSOC(port) (*(volatile bit_field *) (&port))
函数调用:
#define SCLK ASSOC(PORTC).bit0
bit_field 定义为这样的结构:
typedef struct {
unsigned char bit0 :1, bit1 :1, bit2 :1, bit3 :1, bit4 :1, bit5 :1,
bit6 :1, bit7 :1;
} bit_field;
我不知道 &port 在哪里定义的。
有人可以解释一下函数是如何读取的以及它是如何工作的吗?我不太擅长指针,这个例子特别容易混淆前面和结尾的“*”以及端口的“&”。
谢谢
最佳答案
端口
未定义。正如您在此处看到的那样,它是 ASSOC 的参数:
#define ASSOC(port) /* etc. */
此外,我假设它应该是一个 char
,因为 bit_field
有 8 位。 &port
中的 &
只是用来获取它在内存中的地址。
ASSOC 依次将&port
转换为volatile bit_field *
然后在开头有额外的*
直接指向内容结果指针。
因此,一旦你调用了ASSOC(port),你就可以把它当作一个bit_field类型的结构来使用。例如,SCLK
宏将提供 PORTC
的第一位。
关于c - C 中带有#define 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4534820/