在将结构定义的地址存储到指针中时是否创建了结构实例?

时间:2017-03-04 22:42:24

标签: c pointers struct embedded

在我的微控制器课程中,我们正在为SAMD20J18微控制器编写嵌入式C语言。

我们程序的开头包含以下两行代码:

Port *ports = PORT_INSTS; 
PortGroup *porA = &(ports->Group[0]); 

第二行向我暗示,Port结构的实例存在,因为正在访问其Group成员。但是,课程手册指出PORT_INSTSPort结构定义的基地址(如下所示),而不是它的实例。是否通过在指针Port中存储结构定义的地址来创建结构ports的实例?对我来说,PORT_INSTS地址指向现有的struct Port实例更有意义。我错了还是手册错了?

以下是手册的相关部分:

manual

2 个答案:

答案 0 :(得分:2)

  

第二行告诉我,自从访问Group成员以来,存在一个Port结构实例。但是,课程手册指出PORT_INSTS是Port结构定义的基地址(如下所示),而不是它的实例。

这些都是这些。该结构的目的是在已经存在的MCU硬件寄存器之上创建一个抽象层。寄存器已经存在于硬件中,从给定的基址开始。这就是为什么你不必分配任何东西。

答案 1 :(得分:1)

代码与:

相同
Port *ports = (Port *)0x41004400UL;

指针ports指向具有内存地址0x41004400的存储。设备硬件将此地址范围映射到端口控制器中的寄存器。 Link to documentation