OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7571|回复: 16

原子哥,UCOSIII的优先级反转实验中,低优先级任务里任务调度了1千万次,为什么串口“middle task Running!”只打印了几十次???

[复制链接]

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-10-21
在线时间
0 小时
发表于 2015-10-23 17:17:59 | 显示全部楼层 |阅读模式
5金钱



在低优先级任务里面任务调度后,就执行中优先级任务了,在中优先级任务里,串口打印“middle task Running!”,但是任务调度了1千万次,怎么串口只打印了“middle task Running!”20次。还有中优先级任务里的延时时间越长,打印“middle task Running!”的次数越少,好像是倍数关系。为什么呢???

最佳答案

查看完整内容[请看2#楼]

额,中等任务执行多少次和低优先级任务没有任何的关系!更没有什么倍数关系,中等优先级任务有延时肯定是延时完成以后才会再次执行的,这个是UCOS的基础知识啊!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7381

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14979
金钱
14979
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-10-23 17:18:00 | 显示全部楼层
额,中等任务执行多少次和低优先级任务没有任何的关系!更没有什么倍数关系,中等优先级任务有延时肯定是延时完成以后才会再次执行的,这个是UCOS的基础知识啊!
开往春天的手扶拖拉机
回复

使用道具 举报

70

主题

6670

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12201
金钱
12201
注册时间
2012-11-26
在线时间
3640 小时
发表于 2015-10-23 17:26:30 | 显示全部楼层
呵呵。。。。。。
学无止境
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-10-21
在线时间
0 小时
 楼主| 发表于 2015-10-23 17:38:57 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
说说吧
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-10-21
在线时间
0 小时
 楼主| 发表于 2015-10-23 18:35:20 | 显示全部楼层
是不是那个延时一秒钟,都消耗在了这个函数了???
for(times=0;times<10000000;times++)
{
OSSched(); //任务调度
}
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-10-21
在线时间
0 小时
 楼主| 发表于 2015-10-24 12:19:06 | 显示全部楼层
回复【5楼】zuozhongkai:
---------------------------------
中等任务延时中,执行哪段程序???是for()循环吗???
回复

使用道具 举报

88

主题

7381

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14979
金钱
14979
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-10-24 12:22:34 | 显示全部楼层
回复【6楼】C磊:
---------------------------------
middle_task函数中那么大的OSTimeDlyHMSM()!!!!
开往春天的手扶拖拉机
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-10-21
在线时间
0 小时
 楼主| 发表于 2015-10-24 17:04:33 | 显示全部楼层
回复【7楼】zuozho回复【7楼】zuozhongkai:
---------------------------------
你没看懂我的意思  ,延时的时候不是引发任务调度,去执行其他函数嘛
回复

使用道具 举报

70

主题

6670

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12201
金钱
12201
注册时间
2012-11-26
在线时间
3640 小时
发表于 2015-10-25 08:39:39 | 显示全部楼层
回复【8楼】C磊:
---------------------------------
呵呵
学无止境
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-10-21
在线时间
0 小时
 楼主| 发表于 2015-10-25 21:12:07 | 显示全部楼层
回复【9楼】jermy_z:
---------------------------------
大神 ,讲一下
回复

使用道具 举报

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
发表于 2015-10-26 11:09:47 | 显示全部楼层
OSSched() 是系统的内部函数,楼主也敢调用,敢去抢系统的饭碗,胆真大!
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-10-21
在线时间
0 小时
 楼主| 发表于 2015-10-26 16:17:53 | 显示全部楼层
回复【11楼】jnfxt95:
---------------------------------
这不就是任务调度嘛
回复

使用道具 举报

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
发表于 2015-10-27 10:49:20 | 显示全部楼层
回复【12楼】C磊:
---------------------------------
1. UCOS3源码说,OSSched() 这个函数由其他的UCOS-III服务函数调用。
 UCOS3的英文说明:This function is called by other uC/OS-III services to determine whether a new, high priority task has been made ready to run.
2. UCOS2源码说,OS_Sched() 这个函数是UCOS-II的内部函数,你的用户程序不能调用。 
UCOS2的英文说明:This function is INTERNAL to uC/OS-II and your application should not call it.
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-10-21
在线时间
0 小时
 楼主| 发表于 2015-10-30 19:33:34 | 显示全部楼层
回复【13楼】jnfxt95:
---------------------------------
那是原子的程序
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2015-11-1 22:12:08 | 显示全部楼层
回复【14楼】C磊:
---------------------------------
你还要多写代码.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

15

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2015-10-27
在线时间
3 小时
发表于 2015-11-6 19:36:33 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
请问这样是正确的吗?
中等优先级任务延时的时候才能够切换去执行低优先级任务,低优先级OSSched()每次切换到中等优先级的位置是上一次延时点的位置,
低优先级OSSched()执行若干次后,等优先级任务延时时间到了,就自动切换到高等优先级,高优先级被挂起,再次从中优先级的开头执行,打印到串口
回复

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-6-10
在线时间
18 小时
发表于 2020-8-10 11:59:58 来自手机 | 显示全部楼层
低优先级任务获得信号量后,在没有释放信号量前,会一直运行,恰巧在for循环内有了任务调度,低优先级任务便会在for循环的过程中去进行任务调度至中等优先级任务,中等优先级任务中延时了1秒,这一秒能够让低优先级任务中的for循环执行好多次,这好多次中只有会一次在中等任务就绪的时机从而引发调度,所以才回只打印几十次
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 11:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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