hello world: 基于PT協(xié)程的閃燈程序

usrapp.h:

struct usrapp_t
{
    struct vsfsm_pt_t pt;
    struct vsfsm_t sm;
    bool toggle;
};

extern struct usrapp_t usrapp;
void usrapp_srt_init(struct usrapp_t *app);

usrapp.c:

#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);
}

這里,usrapp_led_thread中的app變量,在每次調(diào)用的時候,都會初始化。代碼功能和之前的事件驅(qū)動的閃燈程序一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容