- GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
- volatile struct GPIO_CTRL_REGS GpioCtrlRegs;
- struct GPIO_CTRL_REGS
- {
- union GPACTRL_REG GPACTRL; // GPIO A Control Register (GPIO0 to 31)
- union GPA1_REG GPAQSEL1; // GPIO A Qualifier Select 1 Register (GPIO0 to 15)
- union GPA2_REG GPAQSEL2; // GPIO A Qualifier Select 2 Register (GPIO16 to 31)
- union GPA1_REG GPAMUX1; // GPIO A Mux 1 Register (GPIO0 to 15)
- union GPA2_REG GPAMUX2; // GPIO A Mux 2 Register (GPIO16 to 31)
- union GPADAT_REG GPADIR; // GPIO A Direction Register (GPIO0 to 31)
- union GPADAT_REG GPAPUD; // GPIO A Pull Up Disable Register (GPIO0 to 31)
- Uint32 rsvd1;
- union GPBCTRL_REG GPBCTRL; // GPIO B Control Register (GPIO32 to 63)
- union GPB1_REG GPBQSEL1; // GPIO B Qualifier Select 1 Register (GPIO32 to 47)
- union GPB2_REG GPBQSEL2; // GPIO B Qualifier Select 2 Register (GPIO48 to 63)
- union GPB1_REG GPBMUX1; // GPIO B Mux 1 Register (GPIO32 to 47)
- union GPB2_REG GPBMUX2; // GPIO B Mux 2 Register (GPIO48 to 63)
- union GPBDAT_REG GPBDIR; // GPIO B Direction Register (GPIO32 to 63)
- union GPBDAT_REG GPBPUD; // GPIO B Pull Up Disable Register (GPIO32 to 63)
- Uint16 rsvd2[8];
- union GPC1_REG GPCMUX1; // GPIO C Mux 1 Register (GPIO64 to 79)
- union GPC2_REG GPCMUX2; // GPIO C Mux 2 Register (GPIO80 to 95)
- union GPCDAT_REG GPCDIR; // GPIO C Direction Register (GPIO64 to 95)
- union GPCDAT_REG GPCPUD; // GPIO C Pull Up Disable Register (GPIO64 to 95)
- };
- union GPACTRL_REG
- {
- Uint32 all;
- struct GPACTRL_BITS bit;
- };
第一行是需要解释的语句
第二行是对第一行
GpioCtrlRegs的解释,定义了GpioCtrlRegs是一个GPIO_CTRL_REGS结构体类型的变量,
第3到25行是解释了GPIO_CTRL_REGS 结构体类型的变量具有哪些成分,即,GpioCtrlRegs内有哪些成员,
比如,选出其中一个成员(第5行) union GPACTRL_REG GPACTRL; ,这个成员的类型是共用体
第26行是针对共用体成员GPACTRL的共用体类型
GPACTRL_REG进行了定义。
28、29行表示了这个共用体类型里面有两个成员,一个是all,一个是bit
总的来说就是结构体内有共用体成员,共用体内有结构体成员,这个结构体内的成员就是all和bit。
volatile是一个类型修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
简单地说就是防止编译器对代码进行优化。比如如下程序:
1
2
3
4
XBYTE[2]=0x55;
XBYTE[2]=0x56;
XBYTE[2]=0x57;
XBYTE[2]=0x58;
对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一地进行编译并产生相应的机器代码(产生四条代码)(百度百科)