2016-08-17 35 views
1

我想知道如何访问映射到特定固定地址的微控制器中的特定寄存器。我GOOGLE了这个问题,我发现以下几点:如何使用指针访问微控制器的特定寄存器

#define WDTCTL  (*((volatile unsigned short *)0x0120)) 
#define P1DIR (*((volatile unsigned char *)0x0022)) 

这种方法的工作绝对好,但我不明白它是如何工作的。

如果有人能向我解释,我会很高兴。

+0

我看到了类似的问题好几遍了,但找不到欺骗。 – Groo

+0

在SO上可以找到数百个这个问题的重复内容。 – Lundin

+0

嘿,你们可以提供以前提出的相同问题的链接 –

回答

1

限定WDTCTL(*((挥发性无符号短*)0x0120))

这意味着WDTCTL寄存器是在地址0x0120(volatile unsigned short *)将形成一个短指针。 然后(*((volatile unsigned short *)0x0120))将给出该指针位置的值。

这里使用volatile的原因是,对于微控制器地址,该值可以在任何时候独立于C代码而改变。 volatile关键字不允许围绕此寄存器进行编译器优化。

欲了解更多信息,请参阅Why is volatile needed in C?

+0

嘿,谢谢你的回复。我有一个问题,我可以这样做,“volatile unsigned short * WDTCTL”,“WDTCTL = 0×0120”,然后解除引用它*“WDTCTL = 0×01”并写任何我想要的。请回复 –

+0

是的,你可以这样做。但是,在你的情况下,你正在分配一个指针变量'WDCTL',这会占用一些内存。您也必须为微控制器的所有寄存器执行此操作,这可能会占用太多内存。 –

相关问题