完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
void OStimeDly (INT16U ticks) //任务延时函数(时钟节拍数)
{ #if OS_CRITICAL_METHOD == 3 //中断函数被设定为模式3 OS_CPU_SR cpu_sr; #endif if (ticks > 0) //如果延时设定为0值,表示不想对任务延时,返回调用任务 { OS_ENTER_CRITICAL(); //关闭中断 if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) //????? { OSRdyGrp &= ~OSTCBCur->OSTCBBitY; //非0值会使得任务延时函数OSTimeDly()将当前任务从就绪表中移除 } OSTCBCur->OSTCBDly = ticks; //接着,这个延时节拍数会被保存在当前任务的OS_TCB中 OS_EXIT_CRITICAL(); //打开中断 OS_Sched(); //既然任务已经不再处于就绪状态,(任务调度) //任务调度程序会执行下一个优先级最高的就绪任务。 } } if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) 此句里的判断的意思是什么??? |
|
相关推荐
3个回答
|
|
是将当前任务删除?
|
|
|
|
可能要看教材里到底这些bit位代表啥才知道了。
|
|
|
|
一个OSRdyGrp有8个相关的任务,就是OSRdyGrp的某一位为1的话,对应相关的8个任务中至少有一个任务是就绪态的,如果当前要调用了延时的任务所在的组中没有其他的任务处于就绪态,那么调用延时程序的这个任务被从就绪态列表中删去之后,它所在的这个组的OSRdyGrp相关的那一位要被清0.而上面代码中的&=就是起到清除OSRdyTbl表中对应调用延时任务的那一位,在判断==0就起到判读这一个OSRdyGrp是否还有其他任务,如果没有其他任务了,就应该将OSRdyGrp对应的那位也清0.
|
|
|
|
只有小组成员才能发言,加入小组>>
UCOSII中断中添加OSSemPost(Sem);程序无法运行
4963 浏览 1 评论
在BC5.0上编译uC/OS-II出现"eeror writing object file",怎样处理???
3177 浏览 1 评论
544浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 14:25 , Processed in 0.497774 second(s), Total 53, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号