最近看了一些开源的代码,看到了一些关于struct 和 union 的妙用,记下来,以备学习之用
1、struct 使用比较多的地方实在寄存器定义,很多寄存器都有相同的结构,举例来说:
假如有GPIOA~GPIOG,它们都有控制寄存器CON、状态寄存器STAT、数据寄存器DAT,那么在定义它们的时候就可以这样写
typedef struct {
u32_t CON;
u32_t STAT;
u32_t DAT;
}STRUCT_GPIO;
#define GPIOx_BASE =xxxxxxxxx;
那么调用它的控制寄存器时就是((STRUCT_GPIO)GPIOx_BASE)->CON
2、union定义相似结构体中的不同部分。例如,在VFS文件系统中最重要的super block结构,它的定义前面对于所有的具体的文件系统都是相同的,结构体的最后一个u域
就是不同的,用了一个结构体