完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ucos ii中任务调度是通过延时来完成的高优先级的任务延时了,低优先级的任务才能执行。可记录延时时间的变量怎么感觉就一个,这样高优先几点延时时间不就会被低优先级的延时时间覆盖吗?
void OStimeDly (INT32U ticks) { INT8U y; #if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr = 0u; #endif if (OSIntNesting > 0u) { /* See if trying to call from an ISR */ return; } if (OSLockNesting > 0u) { /* See if called with scheduler locked */ return; } if (ticks > 0u) { /* 0 means no delay! */ OS_ENTER_CRITICAL(); y = OSTCBCur->OSTCBY; /* Delay current task */ OSRdyTbl[y] &= (OS_PRIO)~OSTCBCur->OSTCBBitX; if (OSRdyTbl[y] == 0u) { OSRdyGrp &= (OS_PRIO)~OSTCBCur->OSTCBBitY; } OSTCBCur->OSTCBDly = ticks; /*这个应该是记录延时时间的吧,当优先级高度任务a延时了这个变量记录ad延时时间。而当低优先级的任务也延时时不就把他给覆盖了吗 */ OS_EXIT_CRITICAL(); OS_Sched(); /* Find next task to run! */ } } 还有OSTCBCur->OSTCBDly理论上是要每隔一个时钟周期就自减吧,这段代码在哪,我找不到 |
|
相关推荐
1个回答
|
|
OSTCBCur->OSTCBDly这个是当前任务的延时,每个任务都有自己的延时。所以不会覆盖,在ucos中任务调度不仅仅只在延时中发生,它有个硬件定时,定时到了发生中断,使不为0的OSTCBDly减一,当有减到0时使该任务回到就绪表。在中断结束后还会进行一次优先级判断,有更高优先级的任务就发生任务调度。
|
|
|
|
只有小组成员才能发言,加入小组>>
722 浏览 0 评论
1123 浏览 1 评论
2504 浏览 5 评论
2840 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2684 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
664浏览 9评论
679浏览 7评论
682浏览 5评论
665浏览 5评论
imx6dl芯片与imx6q芯片互换启动无反应请问是什么问题呢
280浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 00:03 , Processed in 1.229130 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号