有一个回调的看不太懂其意义,大家来讨论一下

[复制链接]
1179|1
 楼主| yanandren 发表于 2016-6-2 11:33 | 显示全部楼层 |阅读模式

大家好,

C文件里定义了一个
typedef void (*start_fn_t)(const sysparam_t *param);

另外,结构体的定义:
typedef struct {
    const char * bootver;
    uint32_t master_addr;
    uint32_t config_addr;
    const rsa_pub_key_t * key;
}sysparam_t;
extern const sysparam_t * sysparam;



最后,在一个函数里这样调用了一下
    ((start_fn_t)(*(uint32_t *)  (sysparam->master_addr + 4)))(sysparam);





这句话是函数的最后一句话,这句话看不懂啊。。貌似就是把一个地址强转成一个函数,然后带了个自己的参数,可是没有函数体啊。。函数使用typedef来定义的
lgq1542380129 发表于 2016-6-2 12:22 | 显示全部楼层
最后一句函数的类型:start_fn_t,函数的地址存放在sysparam->master_addr偏移4个字节的地址里面,函数的形参sysparam,但是定义了extern const sysparam_t * sysparam(只读类型),应该在程序的某些地方赋值的时候强制转换了。

评分

参与人数 1威望 +1 收起 理由
yanandren + 1 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部