|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//函数名列表
struct _m_usmart_nametab
{
void* func; //函数指针
const u8* name; //函数名(查找串)
};
//usmart控制管理器
struct _m_usmart_dev
{
struct _m_usmart_nametab *funs; //函数名指针
void (*init)(u8); //初始化
u8 (*cmd_rec)(u8*str); //识别函数名及参数
void (*exe)(void); //执行
void (*scan)(void); //扫描
u8 fnum; //函数数量
u8 pnum; //参数数量
u8 id; //函数id
u8 sptype; //参数显示类型(非字符串参数):0,10进制;1,16进制;
u16 parmtype; //参数的类型
u8 plentbl[MAX_PARM]; //每个参数的长度暂存表
u8 parm[PARM_LEN]; //函数的参数
u8 runtimeflag; //0,不统计函数执行时间;1,统计函数执行时间,注意:此功能必须在USMART_ENTIMX_SCAN使能的时候,才有用
u32 runtime; //运行时间,单位:0.1ms,最大延时时间为定时器CNT值的2倍*0.1ms
};
//函数控制管理器初始化
//得到各个受控函数的名字
//得到函数总数量
struct _m_usmart_dev usmart_dev=
{
usmart_nametab,
usmart_init,
usmart_cmd_rec,
usmart_exe,
usmart_scan,
sizeof(usmart_nametab)/sizeof(struct _m_usmart_nametab),//函数数量
0, //参数数量
0, //函数ID
1, //参数显示类型,0,10进制;1,16进制
0, //参数类型.bitx:,0,数字;1,字符串
0, //每个参数的长度暂存表,需要MAX_PARM个0初始化
0, //函数的参数,需要PARM_LEN个0初始化
};
//函数名列表初始化(用户自己添加)
//用户直接在这里输入要执行的函数名及其查找串
struct _m_usmart_nametab usmart_nametab[]=
{
(void*)runtimeTest,"void runtimeTest(u8 sta)",
(void*)test_fun,"void test_fun(void(*ledset)(u8),u8 sta)",
};
case 1://有1个参数
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0]);
break;
这是原子哥写的USMART的一段代码,有些地方看不懂
这一句(*(u32(*)())usmart_dev.funs[id].func)(temp[0]);怎么解释? 尤其是前面的一堆括号,麻烦懂得的鱼油指点一下,谢谢!!
本帖最后由 Croper 于 2020-1-4 15:07 编辑 这是一个类型,表示返回类型为u32函数指针
(u32(*)())usmart_dev.funs[id].func
这是把usmart_dev.funs[id].func强制转化为上面所说的函数指针类型
(*(u32(*)())usmart_dev.funs[id].func)(temp[0])
这是调用上面哪个函数,实参为temp[0]
|
|