我想知道如何访问映射到特定固定地址的微控制器中的特定寄存器。我GOOGLE了这个问题,我发现以下几点:如何使用指针访问微控制器的特定寄存器
#define WDTCTL (*((volatile unsigned short *)0x0120))
#define P1DIR (*((volatile unsigned char *)0x0022))
这种方法的工作绝对好,但我不明白它是如何工作的。
如果有人能向我解释,我会很高兴。
我想知道如何访问映射到特定固定地址的微控制器中的特定寄存器。我GOOGLE了这个问题,我发现以下几点:如何使用指针访问微控制器的特定寄存器
#define WDTCTL (*((volatile unsigned short *)0x0120))
#define P1DIR (*((volatile unsigned char *)0x0022))
这种方法的工作绝对好,但我不明白它是如何工作的。
如果有人能向我解释,我会很高兴。
限定WDTCTL(*((挥发性无符号短*)0x0120))
这意味着WDTCTL
寄存器是在地址0x0120
。 (volatile unsigned short *)
将形成一个短指针。 然后(*((volatile unsigned short *)0x0120))
将给出该指针位置的值。
这里使用volatile
的原因是,对于微控制器地址,该值可以在任何时候独立于C代码而改变。 volatile
关键字不允许围绕此寄存器进行编译器优化。
欲了解更多信息,请参阅Why is volatile needed in C?
嘿,谢谢你的回复。我有一个问题,我可以这样做,“volatile unsigned short * WDTCTL”,“WDTCTL = 0×0120”,然后解除引用它*“WDTCTL = 0×01”并写任何我想要的。请回复 –
是的,你可以这样做。但是,在你的情况下,你正在分配一个指针变量'WDCTL',这会占用一些内存。您也必须为微控制器的所有寄存器执行此操作,这可能会占用太多内存。 –
我看到了类似的问题好几遍了,但找不到欺骗。 – Groo
在SO上可以找到数百个这个问题的重复内容。 – Lundin
嘿,你们可以提供以前提出的相同问题的链接 –