在多任务程序中,多个任务之间采用消息队列来传递信息和交互,如果在任务循环中采用如下的跳转来操作,那么就会增加计算时间:
while(1)
{
state = get_message();
switch(state)
{
case RUN:
do_something();
break;
case STOP:
do_anotherthing();
break;
......
}
}
另一种做法,是用二维函数指针数组,列出所有处理函数对应的跳转条件,采用回调函数实现,采用函数指针,减少了计算case跳转的比较时间,所以可以提高速度,缺点是占用比较多的存储空间。采用何种方式来表达计算需求,取决于对速度还是空间占用的指标要求。
如下代码结构:
typedef void (*pfunc)(void ); pfunc state_list[MAX_EVENT][MAX_STATE_NUM] = { /*state1*/ /*state2*/ ... /*event1*/ function1, function2 /*event2*/ function3, function4
... } void function1() {...}; void function2() {...};
...