指针函数和函数指针的区别:
(1)函数指针:
定义的一个函数指针,当这个指针赋值(一般以函数名形式付给指针),那么这个函数指针指向一个函数。
例如:
int (*p)(int,int);
(2)指针函数:即:p是一个指向函数的指针变量,该函数有两个整形参数。(注意*p两侧的括号不能省略,表示p先与*结合,是指针变量,然后再与后面的()结合,表示指针变量指向函数)
定义一个指针函数,表示这个函数的返回值是指针
例如:
int *p(int,int);
即:由于()优先级高于*,它就声明了一个p函数了,这个函数的返回值是指向整形变量的指针
(3)在ARM2440中的用法:
struct {
void (*fun)(void); //定义一个函数指针,并在结构体数组中对“每个函数指针”成员赋值,让每个成员指向对应的函数
char *tip;
}CmdTip[] = {
{ Temp_function, "Please input 1-11 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" } ,
{ Lcd_TFT_Test, "Test TFT LCD" } ,
{ Test_Iic, "Test IIC EEPROM" } ,
{ PlayMusicTest, "UDA1341 play music" } ,
{ RecordTest, "UDA1341 record voice" } ,
{ Test_SDI, "Test SD Card" } ,
{ Camera_Test, "Test CMOS Camera"},
{ 0, 0}
};
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 );
}
}