通过结构体调用程序
下面代码来至于rt-thread操作系统的设备驱动。(C也能面向对象,类似java里的属性+方法)
//定义结构体
struct rt_wlan_cfg_ops
{
int (*read_cfg)(void *buff, int len);
int (*get_len)(void);
int (*write_cfg)(void *buff, int len);
};
//结构体赋值
static const struct rt_wlan_cfg_ops ops =
{
read_cfg,
get_len,
write_cfg
};
//把链接付给另外一个结构体
static const struct rt_wlan_cfg_ops *cfg_ops;
rt_wlan_cfg_set_ops(&ops);
void rt_wlan_cfg_set_ops(const struct rt_wlan_cfg_ops *ops)
{
rt_wlan_cfg_init();
WLAN_CFG_LOCK();
/* save ops pointer */
cfg_ops = ops;
WLAN_CFG_UNLOCK();
}
//通过结构体调用函数
cfg_ops->write_cfg(info_pkg, len)
使用函数指针来调用地址为app_addr的函数
通过函数地址调用函数,应用于qboot。
运行boot程序,跳转到固定的app程序地址。
typedef void (*app_func_t)(void);
app_func_t app_func = (app_func_t)(*((__IO uint32_t *)(app_addr + 4)));
app_func();