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