佚名通过本文主要向大家介绍了ostcbdly,ostimetickhook,问题儿童都来自异世界,保利楼盘曝质量问题,三严三实问题清单等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: uCOS ii关于OSTCBDly与OSTimeTickHook的问题
描述:
INT8U d=32;
INT8U i=0;
INT16U tt=1; //时钟计数器
char s[5];
void OSTimeTickHook (void)
{
if(OSTCBPrioTbl[1]->OSTCBDly==1)
{
sprintf(s,"%5d",tt);
PC_DispStr(d,i+4,s,DISP_FGND_WHITE+DISP_BGND_BLACK);
d+=6;
}
tt+=1;
}
#endif
如上示例代码,当OSTCBPrioTbl[1]->OSTCBDly==1能够正常显示优先级为1的延时时间到时的时钟节拍数;
而当OSTCBPrioTbl[1]->OSTCBDly==0时却不行?
处于OSTimeDly()延时挂起的任务,每一个时钟节拍后OSTCBDly进行减1操作,直至减为0,该任务进入就绪状态;
想请问大神们,导致以上问题的原因是什么??
解决方案1:
描述:
uCOSii
#if OS_CPU_HOOKS_EN > 0INT8U d=32;
INT8U i=0;
INT16U tt=1; //时钟计数器
char s[5];
void OSTimeTickHook (void)
{
if(OSTCBPrioTbl[1]->OSTCBDly==1)
{
sprintf(s,"%5d",tt);
PC_DispStr(d,i+4,s,DISP_FGND_WHITE+DISP_BGND_BLACK);
d+=6;
}
tt+=1;
}
#endif
如上示例代码,当OSTCBPrioTbl[1]->OSTCBDly==1能够正常显示优先级为1的延时时间到时的时钟节拍数;
而当OSTCBPrioTbl[1]->OSTCBDly==0时却不行?
处于OSTimeDly()延时挂起的任务,每一个时钟节拍后OSTCBDly进行减1操作,直至减为0,该任务进入就绪状态;
想请问大神们,导致以上问题的原因是什么??
解决方案1:
OSTCBPrioTbl[1]->OSTCBDly == 0 时?有延时为0的吗?为0了就不在OSTCBDly了吧。应该在就绪链表里了吧。都0了,就绪了。
解决方案2: 就绪状态的迁移状态在哪里,触发条件是什么呢?