|
发表于 2010-7-16 12:08:47
|
显示全部楼层
//注: __LINE__ ,是代码行号
unsigned char ThreadExample()
{
//--------一些准备工作,把这个简记为 __BEGINJOB宏
static unsigned short lineno=0;
char YIELD_FLAG = 1;
switch(lineno) {
case 0:
//---------------------------------_BEGINJOB--------
//-----------记录这里的位置,并退出,把这块简记为__YIELDCPU宏,表示释放CPU-------
YIELD_FLAG = 0;
lineno = __LINE__; case __LINE__:
if (YIELD_FLAG ==0) return RUNNING;
//----------------------------------------------
dosomethingA();
//-----------记录这里的位置,并退出,把这块简记为__YIELDCPU宏,表示释放CPU-------
YIELD_FLAG = 0;
lineno = __LINE__; case __LINE__:
if (YIELD_FLAG ==0) return RUNNING;
//----------------------------------------------
dosomethingB();
//-----------记录这里的位置,并退出,把这块简记为__YIELDCPU宏,表示释放CPU-------
YIELD_FLAG = 0;
lineno = __LINE__; case __LINE__:
if (YIELD_FLAG ==0) return RUNNING;
//----------------------------------------------
dosomethingC();
//------------------结束工作,把这块简记为__ENDJOB-----------
YIELD_FLAG = 0;
lineno=0;
return ENDED;
}
//------------------__ENDJOB-----------
}
//经过简化后的形态:
unsigned char ThreadExampleA()
{
_BEGINJOB;
__YIELDCPU;
dosomethingA();
__YIELDCPU;
dosomethingB();
__YIELDCPU;
dosomethingC();
__ENDJOB;
}
void main(){
while(1){
ThreadExampleA();
ThreadExampleB();
ThreadExampleC();
ThreadExampleD();
}
}
这样,在任务函数里,只要想主动释放CPU控制,就 __YIELDCPU一下即可。 实际上延时函数可以基于__YIELDCPU之上构建,就是增加一些定时器计数的条件而已。 |
|