搜索
bottom↓
回复: 18

在rtt系统中,节拍设置为10ms,系统有2任务,两个任务间没有通信...问,任务B有运行的机会吗

[复制链接]

出0入0汤圆

发表于 2010-6-15 06:02:31 | 显示全部楼层 |阅读模式
1.在rtt系统中,节拍设置为10ms,系统有2任务,两个任务间没有通信。
2.任务A有最高优先级,使用系统延时函数,每10ms周期性执行,每次执行只需要1ms。
3.任务B有低的优先级,使用系统延时函数,每100ms周期性执行,每次执行只需要10ms。
4.问,任务B有运行的机会吗?CPU花1ms时间执行完任务A后进入系统延时函数后,在剩下的9ms时间内,假如任务B已经就绪,任务B能立即得到执行吗?

以下蓝色文字由站长:armok 于:2010-06-15,07:15:50 加入。
你的原标题:“<font color=black>请教ffxz一个os的问题。
” 不合符规定。请更改成能说明帖子大意的标题
试想一下,如果本论坛的帖子标题清一色的‘帮助!’,‘ADC求救!’等笼统的标题,你在阅读的过程中会造成许多麻烦。
所以本论坛规定:一定要起一个能说明帖子大意的标题。不允许“关于 AVR 的 ADC 使用!”这种笼统标题。作为标题,必须说明清楚:
 ①你是在请教问题,还是在介绍有关的知识?
 ②ADC的问题有许多,你是想说那方面的内容?
注意以上两点,标题应该改成如:“请教:ADC 可以不使用中断吗?”。
起一个能说明帖子大意的标题,除了减轻我们的帖子分类整理工作,还方便其它人阅读,节省大家的时间。
注:使用合格的标题,对你来说只是举手之劳,但却会为我们的管理工作提供很大的便利。谢谢你的支持。

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-6-15 06:45:00 | 显示全部楼层
有机会运行。

在运行的时候,
如果当前10ms正在运行B,那么当A就绪的时候(在当前这10ms内),A将抢占B而运行,运行完它的1ms后切换到B继续运行。
如果当前1ms正在运行A,那么当B就绪的时候(在当前这1ms内),那么将在A的1ms运行结束后,切换到B进行运行。

出0入0汤圆

 楼主| 发表于 2010-6-15 07:13:40 | 显示全部楼层
回复这么快,我先理解一下。

出0入0汤圆

 楼主| 发表于 2010-6-15 07:46:30 | 显示全部楼层
前提还是系统节拍10ms。
1.如1楼的所说,那么从A任务运行完1ms,立即切换到B任务,大概需要多少时间。假设系统为stm32,72M。
2.RTT是实时可抢占的操作系统。这个实时怎么理解?是指10ms为节拍的系统调度,还是指极短的、us级时间。


1.如果外部中断具有最高中断级别,在此中断服务程序中向任务A发送同步信号。
2.任务A具有最高优先级,等到接受到同步信号,得到运行一次的机会,运行过程需要1ms。
3.任务B具有低优先级,运行周期是100ms,每次运行10ms。
4.如果中断任务给A发送同步信号,A任务能立即运行吗?

出0入0汤圆

发表于 2010-6-15 07:58:23 | 显示全部楼层
回复【3楼】luxinsun  
前提还是系统节拍10ms。
1.如1楼的所说,那么从a任务运行完1ms,立即切换到b任务,大概需要多少时间。假设系统为stm32,72m。
2.rtt是实时可抢占的操作系统。这个实时怎么理解?是指10ms为节拍的系统调度,还是指极短的、us级时间。

1.如果外部中断具有最高中断级别,在此中断服务程序中向任务a发送同步信号。
2.任务a具有最高优先级,等到接受到同步信号,得到运行一次的机会,运行过程需要1ms。
3.任务b具有低优先级,运行周期是100ms,每次运行10ms。
4.如果中断任务给a发送同步信号,a任务能立即运行吗?

-----------------------------------------------------------------------

1. 切换到时间是us级。
2. 关于实时系统的定义可以参见编程指南中的章节。节拍是10ms,指的是,在系统中如果需要延时等待,精度是10ms,更细的精度就达不到了<例如定时器精度,rt_thread_delay精度,rt_sem_take(sem, tick)中的tick精度等>。这个精度和实时响应时间关系并不大。

另,
是的,在中断服务例程运行结束后,系统将立即切换到a任务中运行,而不管b任务的当前状态。

出0入0汤圆

 楼主| 发表于 2010-6-15 09:04:57 | 显示全部楼层
1.如4楼所说,那么cpu、os系统需要不停的“检查”任务或邮箱的状态,还需要跑任务。这样检查也需要一个很小的时间间隔啊?如果有这个间隔,需要多长时间?检查需要多长时间?
2.任务调度函数,如果应用程序不干预它,是周期性调用执行,还是不定时随机调用执行?如果是周期性的,周期是多少?运行时间又是多少?以上2点是我的猜想?请ffxz简单讲讲其中的机理。

3.

(原文件名:rtt.jpg)

从上面的文字看,如果不手动调用任务调度函数,中断执行后,不能立即执行a任务。

出0入0汤圆

发表于 2010-6-15 09:25:56 | 显示全部楼层
中断执行总要返回去恢复B吧,不然情况就不可测了,直接调度的话,完成了A就无法继续B了
所以如果中断返回后继续运行B,那么最大的延误就是1个时间片10ms吧

出0入0汤圆

发表于 2010-6-15 10:16:01 | 显示全部楼层
这个问题我以前也跟楼主一样想岔了

建议ffxz在手册里面将这部分讲清楚

在RTT中,对任务的切换,对邮箱、信号量等资源上挂起的任务的监测,跟系统节拍是没有必然联系的。

这些监测,切换的层面低于系统节拍。可以这样简单理解,系统节拍是给任务,给用户用的。监测、切换是不用系统节拍的。

那么监测、切换是怎么实现的呢?我一开始也是跟楼主一样的想法,以为是靠轮询的方式去查询得到的。这样就会产生类似楼主的疑问,B任务不一定能够得到运行的机会。

实际上,看看RTT的源码就知道,RTT没有使用轮询的方式,而是使用了更巧妙的办法。


-------------------------------------
嗯……那个,临时有事要出去一下。如果晚上回来没人补充,我再来将涉及到的关键的源代码贴出来大家一起探讨。

出0入0汤圆

 楼主| 发表于 2010-6-15 12:31:48 | 显示全部楼层
【7楼】 STM32_Study
回来一定要补上。

出0入0汤圆

发表于 2010-6-15 20:13:34 | 显示全部楼层
期待STM32_Study的回复^-^

出0入0汤圆

 楼主| 发表于 2010-6-15 21:40:14 | 显示全部楼层
都快晚10点了,哪位高手解决一下?

出0入0汤圆

发表于 2010-6-15 22:29:30 | 显示全部楼层
回复【5楼】luxinsun
-----------------------------------------------------------------------

rtt是类似于ucos的一个基于优先级的抢占式操作系统,节拍进行任务切换只是一个很小的部分,还有延时函数进行切换,在发送消息进行切换,在发送邮件时进行切换等等,当然,切换任务的条件是,有任务的优先级高于当前的任务,才进行切换。

另有一点,rtt比ucos多了分时调度,所以当任务优先级相同,会根据用户设置的时间运行。即时间不一定是50%,可以自己设置时间片,时间精度就是节拍的精度10ms.

1.第一个问题了,系统是不需要不断检查邮箱等等事件的发生,因为邮箱的发生是已经知道的,因为有接收,就有发送,在发送时检查就可以了。其他事件类似。

2.第二个问题 ,如果你没有在应用程序中调用如延时函数,发送邮件等等其他发生事件的函数,它不会发生任务切换。除非你的任务有优先级相同。任务优先级相同,是按照时间片来进行任务切换。

3.这个问题,还是回到前面的问题上,只要你改变A的状态,使A就绪,A是优先最高的任务就切换,否则还是回到发生中断前的任务运行。

总结:3个问题基本一样,都是对任务切换的条件不太了解造成的,实时抢占式系统都有个共同的特点,就是围绕着就绪表,就绪表发生改变,就会根据就绪表的任务优先级来切换,而改变就绪表都是已经知道什么时候改变的。无非就是有事件发生,有消息,有邮件等等。所以不是在系统节拍去检查这些事件东西的发生,而是你发送这些事件时就检查和进行切换了。

出0入0汤圆

发表于 2010-6-15 22:34:07 | 显示全部楼层
回来了

世界杯开始了呀~~

先简单说说

最关键的一句话:
不管是什么情况,要发生线程切换,有一个前提是,一定要有某个对应的事件发生。

这类事件可以有多种。

先说说楼主提到的问题,每次高优先的A线程执行完1ms以后,进入休眠。这个时候是设置了A线程的定时器的。定时到10ms以后。这些设置完了以后,就会切换到B线程了。在B线程执行的过程中,如果A线程的定时器到时间了,那么系统就会根据优先级的情况,将A线程切换为当前线程。

因此,这种情况用到的事件就是线程的定时器。


同样的道理,其他的事件也一样。邮箱、信号等等都是事件被触发以后,系统根据优先级情况进行线程切换

具体的调用流程,可以 查看 void rt_schedule()的被调用情况

RTT中,所有的线程切换都是通过这个函数进行的

出0入0汤圆

发表于 2010-6-15 22:35:48 | 显示全部楼层
嗯,HBV_F 说得更准确了,楼主可以仔细看看

出0入0汤圆

发表于 2010-6-15 22:59:29 | 显示全部楼层
【11楼】 HBV_F
-------------
解释得很明了。

出0入0汤圆

发表于 2010-6-15 23:00:16 | 显示全部楼层
学习了!

出0入0汤圆

 楼主| 发表于 2010-6-15 23:11:04 | 显示全部楼层
谢谢几位高手。

出0入0汤圆

发表于 2010-6-16 08:09:01 | 显示全部楼层
rtt是抢先式调度的么?支不支持按时间片轮转?

出0入0汤圆

 楼主| 发表于 2010-6-16 08:55:58 | 显示全部楼层
回复【17楼】eworker  
-----------------------------------------------------------------------
支持时间片轮转
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 13:43

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

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