6621Cx_6621Px 事件EVT响应示例

wen sir · 387次点击 · 2023-06-27

6621x 中 事件设置及响应是非常常用的。 通常在中断中,都会先置一个事件标志, 然后在后台循环中,再去响应事件


1-事件响应先后执行顺序,一般情况下,是不确定的。

2-事件响应执行到了,需要清除对应标志,否则会无限执行。

3-事件标志就是简单一个变量,后台查询 到为1时,执行其对应的Callback函数。执行完了,要手动清0

(HS6620x SDK中 为 co_event ,6621x中,为ke_event 本质基本一样)


// ### 4.4 事件和事件响应
// (1)定义EVT
#define evt0 (KE_EVENT_USR_FIRST+0)
#define evt1 (KE_EVENT_USR_FIRST+1)
#define evt2 (KE_EVENT_USR_FIRST+2)
#define evt3 (KE_EVENT_USR_FIRST+3)
// (2)注册Callback
ke_event_callback_set(evt0, evt0_callback);
ke_event_callback_set(evt1, evt1_callback);
ke_event_callback_set(evt2, evt2_callback);
ke_event_callback_set(evt3, evt3_callback);
//(3) 设置EVT标志
static void  simple_timer_handler(co_timer_t *timer, void  *param)
{
    static int second = 0;
    second++;
    switch (second % 4)
    {
    case 0:
        ke_event_set(evt0);
        break;
    case 1:
        ke_event_set(evt1);
        break;
    case 2:
        ke_event_set(evt2);
        break;
    case 3:
        ke_event_set(evt3);
        break;
    default:
        break;
    }
}
// (4)响应并清除标志
void evt0_callback(void)
{
    ke_event_clear(evt0);
    log_debug("\r\nevent0");
}
void evt1_callback(void)
{
    ke_event_clear(evt1);
    log_debug("\r\nevent1");
}
void evt2_callback(void)
{
    ke_event_clear(evt2);
    log_debug("\r\nevent2");
}
void evt3_callback(void)
{
    ke_event_clear(evt3);
    log_debug("\r\nevent3");
}

void  main(void)
{
    appm_init();
    ke_event_callback_set(evt0, evt0_callback);
    ke_event_callback_set(evt1, evt1_callback);
    ke_event_callback_set(evt2, evt2_callback);
    ke_event_callback_set(evt3, evt3_callback);
    co_timer_set(&simple_timer, 1000, TIMER_REPEAT, simple_timer_handler, NULL);
}


被收藏 1  ∙  1 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站