gpt4 book ai didi

C 与微 Controller : starting address of struct to be a specific address?

转载 作者:行者123 更新时间:2023-12-02 22:59:45 42 4
gpt4 key购买 nike

我正在阅读一些有关指针和结构的内容,但我就是不明白:微 Controller 的头文件中有这样的内容:

#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 *)?

最佳答案

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

所以当你写NVIC->ICER[0]时,就好像 NVIC 是一个已声明的结构,但具有常量地址。这样,结构的布局与外设内存映射相匹配,并且根据给定的基地址,寄存器排列起来,让您可以操纵硬件。

另外,是的NVIC->ICER[0] = (1<<4);(*(NVIC_Type *) NVIC_BASE).ICER[0] = (1<<4); 相同

关于C 与微 Controller : starting address of struct to be a specific address?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689142/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com