C结构体内定义结构体,不能直接赋值。
现像:
如下代码:
头文件:
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;
#endifaBlinkGpioPinOutAbst* test;
}aBlinkGpioAbst;
C文件:
aBlinkGpioPinOutAbst pt;aBlinkGpioAbst gpio = {.pa0 = pt,
};
结果报错如下:
分析:
结构体应该代表的是一片内存,应该像基本类型一样可以直接赋值呀,为什么会出错?
使用如下初始化:
aBlinkGpioPinOutAbst pt;aBlinkGpioAbst gpio = {.test = &pt,
};
可以编译了:
但是代价要使用->而不是.来调用。
解决:
使用
void x_aBlinkGpioInit(){
aBlinkGpio.pa0 = pa0;
}