含有函数指针的结构体好处

//------------------- 现在的做法--------------------------------

//-------------------led灯结构体定义----------------------------

typedef struct {
int (* initialize)(void);
}LED_T;

//------------------led灯变量定义 全局变量----------------------------

LED_T led = {
.initialize = initialize
};

/* 错误代码

LED_T led ;

led.initialize = initialize; //全局变量只能 在函数体外部初始化 而不能重新赋值

*/

//-------------------initilize函数定义-------------------------------

static int initialize(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI, ENABLE); //ͨÓÃʱ ÐèÒªÐÞ¸Ä
initialize_led(LED1_GPIO, LED1_PIN);
initialize_led(LED2_GPIO, LED2_PIN);
initialize_led(LED3_GPIO, LED3_PIN);
return 0;
}

//----------------主函数的调用---------------------------------

 

int main(void)
{

led.initialize();
while(1){
}
}

 

 

//----------------分割线,以前的做法----------------------------------

 

void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

 

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}

总结:过去写初始化注重函数功能的实现,而没有将LED这样一个简单的外设包括在一起的想法。现在通过结构体的定义,我们不仅可以将针对led的外设的行为通过结构里面的函数指针囊括起来,而且这样我们 看待led 看见的 就是一个整体,而且led可以完成 很多功能。 

 

posted @ 2015-12-09 11:08  王姣—ncut  阅读(298)  评论(0编辑  收藏  举报