c - C 中带有#define 的指针

标签 c microcontroller avr winavr

函数:

#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/

相关文章:

c - 在 AVR 微 Controller 上使用结构

c++ - 如何防止字符串在 PROGMEM 中多次发出蜂鸣声

c - 空数组指针

c - PIC24H POT 输入控制 LED 闪烁延迟非线性

指针大小可以是 4.75 字节吗

c - 在 C 中解析 Twitter 提要

c - AVR32 UC3A0 如何利用 USART 中断示例并接收字符串然后做一些事情

microcontroller - 为什么要在 AVR 编程中校准振荡器

c - 如何检测 lib 调用者使用的语言?

结合 C 和汇编代码