我刚刚开始探索 ARM 控制器的 CMSIS。使用它似乎很方便,但是我想知道实际的寄存器值在哪里定义。让我们以 GPIO 为例。
有一个结构 GPIOA_AHB_Type 定义了各种成员。然后,对于 GPIOB,定义了一个内存(或寄存器?)地址,比如说 GPIOB_AHB_BASE。之后,将指针设置为 GPIOB_AHB_BASE,如下所示:
#define GPIOB_AHB ((GPIOA_AHB_Type*) GPIOB_AHB_BASE)
以 GPIOB_AHB 的成员变量为 GPIOB_AHB->DIR 为例,设置它的输入或输出。我的问题是,这些成员变量究竟是在哪里初始化的?我猜寄存器的实际地址是特定于设备的,所以我试图在特定于设备的标头中找到它们,但我发现的只是 GPIOB_AHB_BASE 定义和成员变量的声明。编译器如何知道当我键入 GPIOB_AHB->DIR 时,我想写入设置该端口 I/O 方向的寄存器?