wirebed 任务之事件

wirebed 任务就是一个有限状态机(FSM),状态之间转换需要事件触发。

wirebed 任务事件特性

  • 事件是任务内部可见,其他任务之间或者BSP不能触发事件
  • 1个任务最多32个事件
  • 事件编号小具有更高优先级别

wirebed任务事件定义

在wirebed code view视图中,直接定义事件。事件本质上是定义一个以evt命名的函数,比如


void evtTimeout()
{
}

void evtTaskPoll()
{
}

说明1:事件定义函数没有返回值,而且函数体为空。wirebed软件会自动生成事件定义代码。

说明2:先定义的事件,有更高优先级。evtTimeout 比 evtTaskPoll 有更高优先级。

wirebed任务事件触发

wirebed事件是任务内部可见,所以只能在任务内部调用。事件触发就是一个普通函数的调用。

说明:任务内定义全局函数或者槽函数调用事件触发,实现任务间接调用。

比如任务内部定时器超时,触发evtTimeout事件。

/**********************************************************************
** task timer service (auto generate)**
**********************************************************************/
static void __wb_timer_service(void)
{
    
    evtTimeout();
    //restart timer or not

}

 

wirebed任务事件转换

在 transition view 视图,任务根据事件进行状态转移。

事件转换生成C代码为

/**********************************************************************
** state  <state0>  event  <evtTimeout>  handler **
**********************************************************************/
static void __wb_event_state0_evtTimeout(void)
{
    //add your code here
}

一个完整的事件处理还应包括 离开状态的exit action 和 进入状态的 exit action。

猜你喜欢

转载自blog.csdn.net/qq20975717/article/details/81076760