3

我正在阅读一些关于指针和结构的东西,但我就是不明白:微控制器的头文件中有这个内容:

#define NVIC_BASE (SCS_BASE + 0x0100) /*< NVIC Base Address */ (1)
#define NVIC ((NVIC_Type *) NVIC_BASE) /*< NVIC configuration struct */ (2)

在后面的代码中,可能会有类似的内容:

NVIC->ICER[0] = (1<<4);

这(因为定义)是否对应于:

(NVIC_Type *) NVIC_BASE).ICER[0] = (1<<4);

NVIC_Type 只是一个类型定义的结构,带有一些用于设置和清除中断的寄存器。很明显,(2)以某种方式管理结构起始地址是 NVIC_BASE 地址。但是怎么做?

括号(NVIC_Type *)中这个结构之后的指针(*)是什么?

4

1 回答 1

3

NVIC_BASE是地址。这(NVIC_Type *)是一个强制转换,这意味着当您引用NVIC引用时,它将被解释为指向NVIC_Type结构的指针。

因此,当您编写 时NVIC->ICER[0],就好像 NVIC 是一个已声明的结构,但具有一个常量地址。这样,结构的布局与外设内存映射相匹配,并且使用给定的基地址,寄存器排成一行,让您可以操作您的硬件。

此外,yesNVIC->ICER[0] = (1<<4);(*(NVIC_Type *) NVIC_BASE).ICER[0] = (1<<4);

于 2012-05-21T16:46:14.487 回答