现像:
如下代码:
头文件:
typedef struct aBlinkGpioPinOutAbst_{
void (*initAsOutput)(void);
void (*high)(void);
void (*low)(void);
}aBlinkGpioPinOutAbst;
typedef struct aBlinkGpioAbst_{
#if GPIO_CONFIG_PA0 == GPIO_CONFIG_AS_OUTPUT
aBlinkGpioPinOutAbst pa0;
#elif GPIO_CONFIG_PA0 == GPIO_CONFIG_AS_INPUT
aBlinkGpioPinInAbst pa0;
#elif GPIO_CONFIG_PA0 == GPIO_CONFIG_AS_DOUBLE
aBlinkGpioPinDoubleAbst pa0;
#endif
aBlinkGpioPinOutAbst* test;
}aBlinkGpioAbst;
C文件:
aBlinkGpioPinOutAbst pt;
aBlinkGpioAbst gpio = {
.pa0 = pt,
};
结果报错如下:
分析:
结构体应该代表的是一片内存,应该像基本类型一样可以直接赋值呀,为什么会出错?
使用如下初始化:
aBlinkGpioPinOutAbst pt;
aBlinkGpioAbst gpio = {
.test = &pt,
};
可以编译了:
但是代价要使用->而不是.来调用。
解决:
使用
void x_aBlinkGpioInit(){
aBlinkGpio.pa0 = pa0;
}