- #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);
 
- }
2. 事件驱动构架:
- #include "vsf.h"
 
- #include "usrapp.h"
 
 
- struct vsfsm_state_t*
 
- usrapp_led_evt_handler(struct vsfsm_t *sm, vsfsm_evt_t evt);
 
- struct usrapp_t usrapp =
 
- {
 
-     .sm.init_state.evt_handler      = usrapp_led_evt_handler,
 
-     .sm.user_data                   = &usrapp,
 
- };
 
 
- #define USRAPP_EVT_ON1S                 VSFSM_EVT_USER
 
- struct vsfsm_state_t*
 
- usrapp_led_evt_handler(struct vsfsm_t *sm, vsfsm_evt_t evt)
 
- {
 
-     struct usrapp_t *app = (struct usrapp_t *)sm->user_data;
 
-     switch (evt)
 
-     {
 
-     case VSFSM_EVT_INIT:
 
-         vsfhal_gpio_init(0);
 
-         vsfhal_gpio_config_pin(0, 1, GPIO_OUTPP);
 
-         vsftimer_create(sm, 1000, -1, USRAPP_EVT_ON1S);
 
-         // fall through
 
-     case USRAPP_EVT_ON1S:
 
-         if (app->toggle)
 
-             vsfhal_gpio_set(0, 1 << 1);
 
-         else
 
-             vsfhal_gpio_clear(0, 1 << 1);
 
-         app->toggle = !app->toggle;
 
-         break;
 
-     }
 
-     return NULL;
 
- }
 
 
- void usrapp_srt_init(struct usrapp_t *app)
 
- {
 
-     vsfsm_init(&app->sm);
 
- }
3. 原状态机(msm):
- #include "vsf.h"
 
- #include "usrapp.h"
 
 
- enum
 
- {
 
-     STATE_INIT = 0,
 
-     STATE_ON,
 
-     STATE_OFF,
 
- };
 
 
- #define USRAPP_EVT_ON1S                 VSFSM_EVT_USER
 
- int usrapp_do_init(struct vsfsm_msm_t *msm);
 
- int usrapp_do_on(struct vsfsm_msm_t *msm);
 
- int usrapp_do_off(struct vsfsm_msm_t *msm);
 
- struct usrapp_t usrapp =
 
- {
 
-     .msm.entry_num              = dimof(usrapp.trans_tbl),
 
-     .msm.trans_tbl              = usrapp.trans_tbl,
 
-     .msm.user_data              = &usrapp,
 
-     .msm.state                  = STATE_INIT,
 
 
-     .trans_tbl[0]               = {STATE_INIT, VSFSM_EVT_INIT, NULL, usrapp_do_init},
 
-     .trans_tbl[1]               = {STATE_ON, USRAPP_EVT_ON1S, NULL, usrapp_do_off},
 
-     .trans_tbl[2]               = {STATE_OFF, USRAPP_EVT_ON1S, NULL, usrapp_do_on},
 
- };
 
 
- int usrapp_do_on(struct vsfsm_msm_t *msm)
 
- {
 
-     vsfhal_gpio_set(1, 1 << 1);
 
-     return STATE_ON;
 
- }
 
- int usrapp_do_off(struct vsfsm_msm_t *msm)
 
- {
 
-     vsfhal_gpio_clear(1, 1 << 1);
 
-     return STATE_OFF;
 
- }
 
- int usrapp_do_init(struct vsfsm_msm_t *msm)
 
- {
 
-     vsfhal_gpio_init(1);
 
-     vsfhal_gpio_config_pin(1, 1, GPIO_OUTPP);
 
-     vsftimer_create(msm->sm, 1000, -1, USRAPP_EVT_ON1S);
 
-     return usrapp_do_off(msm);
 
- }
 
 
- void usrapp_srt_init(struct usrapp_t *app)
 
- {
 
-     vsfsm_msm_init(&app->sm, &app->msm);
 
- }
4. PT协程:
- #include "vsf.h"
 
- #include "usrapp.h"
 
 
- vsf_err_t usrapp_led_thread(struct vsfsm_pt_t *pt, vsfsm_evt_t evt);
 
- struct usrapp_t usrapp =
 
- {
 
-     .pt.thread                      = usrapp_led_thread,
 
-     .pt.user_data                   = &usrapp,
 
- };
 
 
- #define USRAPP_EVT_ON1S                 VSFSM_EVT_USER
 
- vsf_err_t usrapp_led_thread(struct vsfsm_pt_t *pt, vsfsm_evt_t evt)
 
- {
 
-     struct usrapp_t *app = (struct usrapp_t *)pt->user_data;
 
 
-     vsfsm_pt_begin(pt);
 
-     vsfhal_gpio_init(0);
 
-     vsfhal_gpio_config_pin(0, 1, GPIO_OUTPP);
 
-     vsftimer_create(pt->sm, 1000, -1, USRAPP_EVT_ON1S);
 
-     while (1)
 
-     {
 
-         if (app->toggle)
 
-             vsfhal_gpio_set(0, 1 << 1);
 
-         else
 
-             vsfhal_gpio_clear(0, 1 << 1);
 
-         app->toggle = !app->toggle;
 
-         vsfsm_pt_wfe(pt, USRAPP_EVT_ON1S);
 
-     }
 
-     vsfsm_pt_end(pt);
 
-     return VSFERR_NONE;
 
- }
 
 
- void usrapp_srt_init(struct usrapp_t *app)
 
- {
 
-     vsfsm_pt_init(&app->sm, &app->pt);
 
- }
5. setjmp方式:
- #include "vsf.h"
 
- #include "usrapp.h"
 
 
- void usrapp_led_thread(struct vsfsm_ljmp_t *ljmp);
 
- struct usrapp_t usrapp =
 
- {
 
-     .ljmp.thread        = usrapp_led_thread,
 
-     .ljmp.user_data     = &usrapp,
 
-     .ljmp.stack         = usrapp.stack + sizeof(usrapp.stack),
 
- };
 
 
- #define USRAPP_EVT_ON1S                 VSFSM_EVT_USER
 
- void usrapp_led_thread(struct vsfsm_ljmp_t *ljmp)
 
- {
 
-     struct usrapp_t *app = (struct usrapp_t *)ljmp->user_data;
 
 
-     vsfhal_gpio_init(0);
 
-     vsfhal_gpio_config_pin(0, 1, GPIO_OUTPP);
 
-     vsftimer_create(ljmp->sm, 1000, -1, USRAPP_EVT_ON1S);
 
 
-     while (1)
 
-     {
 
-         if (app->toggle)
 
-             vsfhal_gpio_set(0, 1 << 1);
 
-         else
 
-             vsfhal_gpio_clear(0, 1 << 1);
 
-         app->toggle = !app->toggle;
 
-         vsfsm_ljmp_wfe(ljmp, USRAPP_EVT_ON1S);
 
-     }
 
- }
 
 
- void usrapp_srt_init(struct usrapp_t *app)
 
- {
 
-     vsfsm_ljmp_init(&app->sm, &app->ljmp);
 
- }