如何定义指向结构的指针?

时间:2013-11-14 19:57:28

标签: c

我想定义结构

typedef struct
{
    unsigned long GPFSEL[6];
    unsigned long Reserved_1;
    unsigned long GPSET[2];
    unsigned long Reserved_2;

//Ignoring the reserved and test bytes
} GPIO_REGS_;

一个解决方案就是这个

volatile  GPIO_REGS_ * const GPIO_REGS  = ((volatile GPIO_REGS_ *) 0x20200000UL);

在这种情况下,我可以按如下方式登记:

GPIO_REGS->GPSET[0];

但是我应该如何定义我可以使用的GPIO_REGS变量

GPIO_REGS.GPSET[0];

为什么以下不起作用?

#define GPIO_REGS  (*(( GPIO_REGS_ *) 0x20200000UL));

2 个答案:

答案 0 :(得分:1)

GPIO_REGS_ my_gpio_reg;

GPIO_REGS_ * my_gpio_reg_ptr;

my_gpio_reg_ptr = &my_gpio_reg;

答案 1 :(得分:1)

问题中代码的问题

#define GPIO_REGS  (*(( GPIO_REGS_ *) 0x20200000UL));

结尾是分号。你应该删除它

#define GPIO_REGS  (*(( GPIO_REGS_ *) 0x20200000UL))

(这里真正的教训是不惜一切代价避免使用宏。它们非常棘手。每当你认为你理解它们时,你就会得到一种虚假的安全感,然后会写出更多错误的代码!)

无论如何,原来使用宏:

GPIO_REGS.GPSET[0];

它被扩展为:

(*(( GPIO_REGS_ *) 0x20200000UL));.GPSET[0];

看到分号不适合这里?

保持宏小。不要将;放在最后。并且总是在它们周围加上括号。括号应该是最外层的 - 不要在末尾加上分号。 (我们可以整天写关于宏的其他警告。