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

在阅读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))( ) 也就是取出一个结构体中的一个字段 而这个字段是个函数 所以后面加上()来执行它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值