1. pt-thread使用
官网:http://dunkels.com/adam/pt/index.html
1.1 使用示例
ptthread 有两种运行任务的方式,一种是switch,另一种是goto。这里使用的是switch,在lc.h文件中包含相应头文件即可。#include “lc-switch.h”
//PT_BEGIN(p);
{
char PT_YIELD_FLAG = 1;
//LC_RESUME((pt)->lc)
switch(p->lc)
{
case 0:;
//PT_YIELD(p);
do
{
PT_YIELD_FLAG = 0;
//LC_SET((pt)->lc);
p->lc = __LINE__; case __LINE__:
if(PT_YIELD_FLAG == 0)
{
return PT_YIELDED;
}
} while(0);
//PT_END(p);
//LC_END((pt)->lc);
};
PT_YIELD_FLAG = 0;
p->lc = 0;//PT_INIT(pt);
return PT_ENDED;
}
1.2 代码解释
-
PT_BEGIN( p ); PT_YIELD( p ); PT_END( p );这三个宏是使用pt任务时最基础的3条语句,依次的意思是任务开始,任务挂起,任务结束。
-
PT_BEGIN( p ):开始运行,如果p->lc是0,则按顺序往下运行。如果p->lc不为0则跳到相应的case语句中运行(这种情况发生在上一次任务调用了PT_YIELD处于挂起状态)。
-
PT_YIELD( p ):将p->lc的值改为当前行数,退出当前任务(挂起任务)。下次进来任务就会直接跳到当前的case运行,往下运行代码(因为PT_YIELD_FLAG !=0 )。
-
PT_END( p ):首先是呼应PT_BEGIN( p )中的switch的大括号};;然后就清除相关变量等等,下一次任务就又是重头开始。