1
完善资料让更多小伙伴认识你,还能领取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的话, 优先级最低的是界面处理显示任务(就像手机的桌面一样)他是死循环的, 然后优先级高一点的是桌面上其他按钮所触发的其他任务这个也是死循环的(但是他要由桌面显示任务来打开这个任务),最高一级的任务是触摸屏任务,用于打开桌面的某个任务
|
|
|
|
我有这本书,当当网买的,纸质的
|
|
|
|
只有小组成员才能发言,加入小组>>
793 浏览 0 评论
1152 浏览 1 评论
2528 浏览 5 评论
2861 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2711 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1073浏览 3评论
195浏览 2评论
457浏览 2评论
370浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:11 , Processed in 1.206970 second(s), Total 73, Slave 64 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号