2、void MyTask(void*p_arg)
{
//用户代码
}
typedef (*OS_TASK_PTR)(void *p_arg);
OS_TASK_PTR p_Func ;定义一个函数指针变量p_Func;
p_Func = MyTask;
等价于: void(*p_Func)(void *p_arg) ;
p_Func = MyTask;
函数指针在操作系统内核源码中的使用较多,所以对于函数指针变量的定义形式,赋值形式及调用形式一定要清晰;
3、其他形式
struct t_String{
uint8_t *string;
uint32_t size;
uint32_t length;
};
typedef struct t_String T_String;
typedef struct {
char *command;
T_String *(*handler)(char *msg, u16 len); //函数指针
}T, *P;
static T commandhandlers[] =
{
{"A",
A_Handler},
{"B",
B_Handler},
{NULL,
NULL} };
P FUNC1(const char *cmd)
{
P ptmp = commandhandlers;
while (ptmp->command != NULL)
{
if (*(ptmp->command) == *cmd)
//输入字符 是否等于数组列举的 字符
{
return ptmp;
}
ptmp++;
}
return NULL;
}
void FUNC2(const char *cmd)
{
P handler = FUNC1((str + 1));
if (handler != NULL)
{
T_String *value_Return = handler->handler(str + 2, 2);
}
}
4、用法示例
```c
typedef struct
{
u8* cmd;
u8 *(*handler)(u8*msg,u16 len);
} VAR,*PTR_VAR;
// 其中 PTR_VAR 等效于 VAR*
//定义数组
VAR array[]=
{
{"A",
forA_HandlerFunc};
...
{"Z",
forZ_HandlerFunc};
{NULL,NULL
}
};
PTR_VAR Func1(u8*cmd)
{
PTR_VAR ptmp = array //将数组首地址给该指针
while(ptmp->cmd != NULL)
{
if(*(ptmp->cmd) == *cmd)
{
return ptmp;
}
ptmp++;
}
return NULL;
}
void main()
{
if(*(str+1)大于A小于Z)
{
PTR_VAR ptmp2 = Func1(str+1);
if(ptmp2 != NULL)
{
ptmp2->handler(str+2,len);
}
}
}