VSF中很多模块的设计,往往会提供回掉函数的方式来实现模块之间的隔离。定时器模块就有一个vsftimer_create_cb来实现定时调用一个指定函数的功能。
usrapp.h:
struct usrapp_t
{
bool toggle;
};
extern struct usrapp_t usrapp;
void usrapp_srt_init(struct usrapp_t *app);
usrapp.c:
#include "vsf.h"
#include "usrapp.h"
struct usrapp_t usrapp;
void usrapp_on_timer1S(void *param)
{
struct usrapp_t *app = (struct usrapp_t *)param;
if (app->toggle)
vsfhal_gpio_set(0, 1 << 1);
else
vsfhal_gpio_clear(0, 1 << 1);
app->toggle = !app->toggle;
}
void usrapp_srt_init(struct usrapp_t *app)
{
vsfhal_gpio_init(0);
vsfhal_gpio_config_pin(0, 1, GPIO_OUTPP);
usrapp_on_timer1S(app);
vsftimer_create_cb(1000, -1, usrapp_on_timer1S, app);
}
回调函数在VSF中使用了非常多,甚至还有用回调函数实现的状态机,这个以后再慢慢道来。
网友评论