hello world: 基于回调函数的闪灯程序

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中使用了非常多,甚至还有用回调函数实现的状态机,这个以后再慢慢道来。

你可能感兴趣的:(hello world: 基于回调函数的闪灯程序)