通过结构体和函数指针进行菜单操作的一个实例

在阅读mini2440test 时发现一个不错的操作,通过结构体和函数指针进行菜单操作!

如下:

struct {
 void (*fun)(void);            \\为一个函数指针
 char *tip;
}CmdTip[] = {
    { Temp_function, "Please input 1-16 to select test" } ,
    { BUZZER_PWM_Test, "Test PWM" } ,
    { RTC_Display, "RTC time display" } ,
    { Test_Adc, "Test ADC" } ,
    { KeyScan_Test, "Test interrupt and key scan" } ,
    { Test_Touchpanel, "Test Touchpanel" } ,
    { TFT_LCD_Test, "Test TFT-LCD or VGA1024x768 module" } ,
    { Test_Iic, "Test IIC EEPROM, if use QQ2440, please remove the LCD" } ,
    { PlayMusicTest, "UDA1341 play music" } ,
    { Test_SDI, "Test SD Card" } ,
    { Camera_Test, "Test CMOS Camera"},
    { 0, 0}      
   };                  \\以上定一个结构体,并初始化

 

主函数中:

main(){

.....
 while(1)
 {
  U8 idx;
  
  Uart_Printf("\nPlease select function : \n"); 
  for(i=0; CmdTip[i].fun!=0; i++)
   Uart_Printf("%d : %s\n", i, CmdTip[i].tip);
  idx = Uart_GetIntNum_GJ() ; 
  if(idx<i)
  {
   (*CmdTip[idx].fun)();  
   Delay(20);
   Uart_Init( 0,115200 );
  } 
 
 }  

}


(*CmdTip[idx].fun)() == ( *(CmdTip[idx].fun))( ) 也就是取出一个结构体中的一个字段 而这个字段是个函数 所以后面加上()来执行它

你可能感兴趣的:(通过结构体和函数指针进行菜单操作的一个实例)