完善资料让更多小伙伴认识你,还能领取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时使该任务回到就绪表。在中断结束后还会进行一次优先级判断,有更高优先级的任务就发生任务调度。
|
|
|
|
只有小组成员才能发言,加入小组>>
683 浏览 1 评论
2113 浏览 5 评论
2420 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2186 浏览 6 评论
2158 浏览 7 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
307浏览 9评论
295浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
431浏览 6评论
295浏览 5评论
344浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 01:08 , Processed in 0.820233 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号