#if OS_MAX_TASKS<9 //把当前任务加入到此消息队
//列的等待任务表中
Buf[3]=OSMapTbl[OSRunnmgTasklD()]; (5)
#else
if(OSRunningTasklD()<8){ (6)
Buf[3]=OSMap Tbl[OSRunningTasklD()]; (7)
else{
Buf[4] |= OSMapTbl[OSRunningTasklD( ) &()x07]; (8)
}
#endif
while(Buf[O]==0) //消息队列中暂时投有消息 (9)
{
#ifdef_C51_
SP=SP+sizeof(Buf)。 (10)
*((uint8 0S_Q_MEM_SEL * data*)(SP+l-slzeof(Buf))=Buf; (11)
#endif{
OSClearSignal(OSRunningTask()); //当前任务进入休眠
//状态 (12)
OSSched(); //调度下一个最高优先级的就绪任务运行(13)
#ifdef_C51_
Buf= *((uint8 OS_Q_MEM SEL*dota*)(SP+1-sizeof(Buf)); (14)
SP=SP-sizeof(Buf); (15)
#endif
if(OSWaitTick[OSRunningTasklD()]==O)(16)
{
break; //任务再次运行,如果超时到,退出循环
}
} //while(Buf[0]==O)
第(10)(11)(14)(15)语句不是很理解,堆栈指针sp是如何变化的?(uint8 0S_Q_MEM_SEL * data*)是什么意思?
UYOU
相关分类