|
我在STM32上移UCOS2.86,进程之间任务的切换好像有点问题,在本论坛中看到有人上传的UCOS2.90,这下任务切换同步比较好,
经UCOS2.90和UCOS2.86内核代码比较,发现,在OSIntExit和OS_Sched中有一句 OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];位置有些不一样,提前了一下,在这两个函数中都把2.86下的
OS_SchedNew();
if (OSPrioHighRdy != OSPrioCur)
{ /* No Ctx Sw if current task is highest rdy */
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSIntCtxSw(); /* Perform interrupt level ctx switch */
}
换成2.90的
OS_SchedNew();
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
if (OSPrioHighRdy != OSPrioCur)
{ /* No Ctx Sw if current task is highest rdy */
OSCtxSwCtr++; /* Keep track of the number of ctx switches */
OSIntCtxSw(); /* Perform interrupt level ctx switch */
}
请问这样做是为什么??为什么改了后任务切换比较好,原理是什么??谢谢. |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|