在我的微控制器课程中,我们正在为SAMD20J18微控制器编写嵌入式C语言。
我们程序的开头包含以下两行代码:
Port *ports = PORT_INSTS;
PortGroup *porA = &(ports->Group[0]);
第二行向我暗示,Port
结构的实例存在,因为正在访问其Group
成员。但是,课程手册指出PORT_INSTS
是Port
结构定义的基地址(如下所示),而不是它的实例。是否通过在指针Port
中存储结构定义的地址来创建结构ports
的实例?对我来说,PORT_INSTS
地址指向现有的struct Port
实例更有意义。我错了还是手册错了?
以下是手册的相关部分:
答案 0 :(得分:2)
第二行告诉我,自从访问Group成员以来,存在一个Port结构实例。但是,课程手册指出PORT_INSTS是Port结构定义的基地址(如下所示),而不是它的实例。
这些都是这些。该结构的目的是在已经存在的MCU硬件寄存器之上创建一个抽象层。寄存器已经存在于硬件中,从给定的基址开始。这就是为什么你不必分配任何东西。
答案 1 :(得分:1)
代码与:
相同Port *ports = (Port *)0x41004400UL;
指针ports
指向具有内存地址0x41004400
的存储。设备硬件将此地址范围映射到端口控制器中的寄存器。 Link to documentation