完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
近来我有一个困惑,若假设ucos里有N个任务,其中优先级最高的是TaskA,其次是TaskB,且两任务都是死循环且没有延时函数!
假设当前运行任务是TaskA,TaskB处于就绪状态,当系统节拍到来,TaskA被TaskB抢占,TaskA进入就绪状态? TaskB开始运行,当下一个系统节拍到来,此时就绪表中只有TaskA的优先级最高,那么TaskA恢复运行,TaskB进入就绪状态。 如此一来,cpu岂不是一直在TaskA和TaskB中来回切换?而其他任务永远得不到运行的机会? 也许我理解错了,求知道的同学解释一下,谢谢 |
|
相关推荐
14个回答
|
|
那么永远是TaskA占用CPU,没有调度。
|
|
|
|
没有延时是不会进程序调度的。ucos就是在延时函数里进行进程调度的。
|
|
|
|
我上面这指的是抢占式模式,没有同优先级时间片轮转。
|
|
|
|
[C] 纯文本查看 复制代码
//systick中断服务函数,使用ucos时用到void SysTick_Handler(void){ OSIntEnter();//进入中断 OSTimeTick(); //调用ucos的时钟服务程序 OSIntExit(); //触发任务切换软中断}看原子的书里提到 每次进入系统systick中断函数SysTick_Handler,都会执行一次OSIntExit(),这不就触发任务切换了吗? |
|
|
|
|
|
|
|
状态图里,A在运行时发生systick中断,A应该转入中断服务状态还是进入就绪状态?如果进入就绪态,那当然时钟不会发生任务切换;如果进入中断服务状态,此时就绪表中应该没有A?那A什么时候才能进入就绪态? 如果不会发生任务切换的结论成立,那么ucos的任务函数是否要求必须含有延时函数? 存不存在不包含延时函数的任务(且是死循环)? |
|
|
|
就绪态
|
|
|
|
|
|
|
|
A被滴答时钟打断后 当然转入图中的中断服务状态 但此状态名称不是一个具体的状态 只是为了说明一个“时刻”吧 此时A仍然在就绪表中 也就是说 A具体的状态就是在就绪态! 那么到滴答中断结束退出的时候 系统会在就绪表里查找最高优先级的任务 按照你的预设条件 当然只能查到A了 所以接下来仍然运行A 所以B永远没机会运行
|
|
|
|
看labrosse(ucos的作者)的书(uC/OSIII,The Real-Time Kernel)有过这样的介绍,我的理解是,任何任务都要需要阻塞(pend 延时等等)来使得每一个任务都能得到运行 ,否则低优先级的任务得不到CPU使用权
|
|
|
|
你有labrosse(ucos的作者)的书(uC/OSIII,The Real-Time Kernel)这本书么
|
|
|
|
我有,但是建议你直接去谷歌下。
|
|
|
|
你最好是这样假设有界面处理工具如gui的话, 优先级最低的是界面处理显示任务(就像手机的桌面一样)他是死循环的, 然后优先级高一点的是桌面上其他按钮所触发的其他任务这个也是死循环的(但是他要由桌面显示任务来打开这个任务),最高一级的任务是触摸屏任务,用于打开桌面的某个任务
|
|
|
|
我有这本书,当当网买的,纸质的
|
|
|
|
只有小组成员才能发言,加入小组>>
695 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
655浏览 9评论
651浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
783浏览 6评论
630浏览 5评论
670浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 18:39 , Processed in 1.314323 second(s), Total 105, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号