搜索
bottom↓
回复: 17
打印 上一主题 下一主题

对于没有老师指导的人,遇到问题只能来请教万能的坛子啊!!一个关于UCOS中OSTimeDly()的

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2011-7-11 20:58:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
任务A调用了OSTimeDly正在延时,此时正在运行任务B,当延时时间到后任务A会马上开始运行吗? 还是等任务B运行完了再运行任务A       任务A的优先级高于任务B

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

2
发表于 2011-7-11 21:42:20 | 只看该作者
有很多种情况 建议看下邵贝贝的书

在正常情况下 OSTimeDly时间到达后回运行TaskA

但是如果出现优先级反转情况就不一定了
本人新手

出0入0汤圆

3
 楼主| 发表于 2011-7-11 21:50:16 | 只看该作者
发完帖子后的这段时间在百度谷歌狂搜了一下,自己是这样总结的 不知道对不对啊!!
       假设 任务A  优先级号5    任务B优先级号6

当任务A调用OSTimeDly()后,任务A被延时(挂起),此时任务B开始运行,当任务A调用的延时函数时间到时(OSTickISR()函数调用OSTimeTick()来完成实时监测延时时间到否),OSTimeTick()函数就会把任务A进入就绪状态,而函数OSTickISR()会执行一次中断级的任务调度,因为任务A的优先级高于任务B的优先级,所以任务A就会打断任务B的运行而直接进入运行状态。

出0入85汤圆

4
发表于 2011-7-11 22:23:45 | 只看该作者
搞清什么是占先式内核的定义就明白了

出0入0汤圆

5
发表于 2011-7-11 22:36:00 | 只看该作者
2漏的理解还是不对,这个时候如果任务A的延时还没有结束的话,运行的是 空闲任务!

出0入0汤圆

6
发表于 2011-7-12 07:14:49 | 只看该作者
回复【4楼】badboy007
-----------------------------------------------------------------------

当延时时间到后任务A会马上开始运行吗?  --》他不是说了任务A的延时到达吗?

出0入0汤圆

7
发表于 2011-7-12 07:43:19 | 只看该作者
延时时间到后任务A会马上开始运行

出0入0汤圆

8
 楼主| 发表于 2011-7-12 07:45:56 | 只看该作者
是啊 ,我说的是任务A的延时时间已到,任务B正在运行。  问题是会不会中断任务B的运行直接运行任务A ,还是等任务B运行完了进行任务调度时再运行任务A。     目前在2楼的理解应该没问题吧?

出0入0汤圆

9
发表于 2011-7-12 09:55:08 | 只看该作者
应该是要等任务B运行完成,执行任务调度时才执行任务A吧,要不然你要是多搞几个任务,那肯定会出现这样的情况,如果会中断任务B,那整个系统不全都乱套了?

出0入0汤圆

10
发表于 2011-7-12 13:03:02 | 只看该作者
回复【8楼】hjl2832
应该是要等任务b运行完成,执行任务调度时才执行任务a吧,要不然你要是多搞几个任务,那肯定会出现这样的情况,如果会中断任务b,那整个系统不全都乱套了?
-----------------------------------------------------------------------

大错特错,OSTimeDly()是定时中断引发的,比如在STM32的Port里面是systick中断,中断以后会根据优先级让任务A先执行。

出0入0汤圆

11
发表于 2011-7-12 13:20:39 | 只看该作者
当高优先级的任务需要运行的时候,无论低优先级得任务
在做什么,系统都会执行高优先级的任务,哪怕你的
b在while(1)也是如此,这就是实时内核最基本得要求;

出0入0汤圆

12
发表于 2011-7-12 13:27:25 | 只看该作者
当a的延时到期了,在系统执行时钟滴答函数
的时候会将a就绪,在退出时钟滴答的时候
进行一次任务的切换,将cpu交给当前就绪
了的,并且优先级最高的任务;

出0入0汤圆

13
 楼主| 发表于 2011-7-12 14:23:27 | 只看该作者
回复【9楼】hitler
-----------------------------------------------------------------------

我在2楼的理解对吗?

出0入0汤圆

14
 楼主| 发表于 2011-7-12 14:24:43 | 只看该作者
不对啊,突然发现 10楼和11楼没了啊!

出0入0汤圆

15
发表于 2011-7-12 14:56:12 | 只看该作者
回复【12楼】jdzjk06
回复【9楼】hitler  
-----------------------------------------------------------------------
我在2楼的理解对吗?
-----------------------------------------------------------------------

我认为是对的。
而且OSTimeDly(1)的延迟时间并非1/TICKS_PER_SECOND,而是0~1/TICKS_PER_SECOND之间,所以UserManual上面写的,如果要保证1/TICKS_PER_SECOND,必须写OSTimeDly(2)。因为你发出OSTimeDly()以后,到定时中断处一定会结束延时。

出0入0汤圆

16
发表于 2011-7-12 17:13:52 | 只看该作者
这个问题简单点说应该是这样吧,任务A调用了OSTimeDly延时时间结束后,在没有更高优先级的任务运行的情况下,任务A会立刻被OS内核调度执行,如果有更高优先级的任务在运行或者就绪,那么任务A将会等到高优先级的任务完成后被调度执行。

出0入0汤圆

17
发表于 2012-3-5 09:30:36 | 只看该作者
回复【15楼】changhui0222 CODING之王
-----------------------------------------------------------------------

同意楼上的观点

出0入0汤圆

18
发表于 2012-3-5 10:48:39 | 只看该作者
回复【楼主位】jdzjk06
-----------------------------------------------------------------------
两个前提:
1、没有另外比A更高的优先级的任务话
2、A任务不被任何信号量限制着。

当A延迟结束,系统会进行次调度,立刻执行A(理论上延迟非常非常短).此后B只有在A延迟或挂起时才能执行.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-10 14:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表