OpenEdv-开源电子网

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

freertos的任务运行时间如何设置呢

[复制链接]

12

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-14
在线时间
18 小时
发表于 2017-7-24 21:02:25 | 显示全部楼层 |阅读模式
1金钱
对于相同优先级的任务采用时间片轮询的方式运行,那比如说有两个优先级都为5的任务,那这两个任务的运行时间如何设置呢?在rt-thread中创建任务时就可以设置任务的运行时间,在freertos中怎么用呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-14
在线时间
18 小时
 楼主| 发表于 2017-7-24 21:09:56 | 显示全部楼层
难道只能根据设置的systick来决定吗?设置的切换频率如果是1ms,就是1ms切换一次???
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-7-26 01:39:18 | 显示全部楼层
帮顶
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11922
金钱
11922
注册时间
2015-11-5
在线时间
2086 小时
发表于 2017-7-26 11:02:22 | 显示全部楼层
yuer19900712 发表于 2017-7-24 21:09
难道只能根据设置的systick来决定吗?设置的切换频率如果是1ms,就是1ms切换一次???

应该是的!
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-4 23:36:39 来自手机 | 显示全部楼层
yuer19900712 发表于 2017-7-24 21:09
难道只能根据设置的systick来决定吗?设置的切换频率如果是1ms,就是1ms切换一次???

任务切换还有一种:调用某些系统API的时候
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-4 23:37:56 来自手机 | 显示全部楼层
FreeRTOS 发表于 2017-7-26 11:02
应该是的!

不一定! 还有一种就是调用系统某些Api的时候会切换任务
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11922
金钱
11922
注册时间
2015-11-5
在线时间
2086 小时
发表于 2018-4-6 13:02:02 | 显示全部楼层
本帖最后由 FreeRTOS 于 2018-4-6 13:10 编辑
wen619 发表于 2018-4-4 23:37
不一定! 还有一种就是调用系统某些Api的时候会切换任务
你忽略了一个情况,假如两个相同优先级的任务,都不会主动交出CPU的使用权,那么只能通过systick来强行切换,外部条件比如信号量激活都是没法让任务1交出CPU的使用权的因为他们两者的优先级是一样的,谁也不会让谁
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-6 14:18:49 来自手机 | 显示全部楼层
FreeRTOS 发表于 2018-4-6 13:02
你忽略了一个情况,假如两个相同优先级的任务,都不会主动交出CPU的使用权,那么只能通过systick来强行切换 ...

左工视频讲了:任务切换发生在调用系统Api或者sysrick中断服务函数里!

两个同优先级任务如果是当前就绪任务列表里的最高优先级的话,任务切换的时候他们是会得到执行的。具体源码我上班后看了再贴出来。
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11922
金钱
11922
注册时间
2015-11-5
在线时间
2086 小时
发表于 2018-4-6 16:25:09 | 显示全部楼层
本帖最后由 FreeRTOS 于 2018-4-6 16:31 编辑
wen619 发表于 2018-4-6 14:18
左工视频讲了:任务切换发生在调用系统Api或者sysrick中断服务函数里!

两个同优先级任务如果是当前就 ...
两个任务都是当前的最高优先级,而且两个都不交出CPU的使用权,何来切换?
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-6 16:53:46 来自手机 | 显示全部楼层
FreeRTOS 发表于 2018-4-6 16:25
两个任务都是当前的最高优先级,而且两个都不交出CPU的使用权,何来切换?

相同优先级(最高)的任务如果都处于就绪态,你知道系统如何让它俩先后得到执行吗?兄弟
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-6 17:03:54 来自手机 | 显示全部楼层
就绪任务列表上的任务是在systick中断中得到处理?
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11922
金钱
11922
注册时间
2015-11-5
在线时间
2086 小时
发表于 2018-4-6 17:21:43 | 显示全部楼层
wen619 发表于 2018-4-6 16:53
相同优先级(最高)的任务如果都处于就绪态,你知道系统如何让它俩先后得到执行吗?兄弟

看了下源码,任务每次进行切换时,都会执行下面这个代码 1.PNG
这个代码就是防止相同优先级的任务独占CPU,是我搞错了,很抱歉!
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-6 17:26:50 来自手机 | 显示全部楼层
也就是相同优先级(假设是当前最高的)的任务是会依次得到执行了。节后看了源码 我也好好理理系统的处理脉络。 谢谢你节日期间还为此去查阅源码,赞!
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11922
金钱
11922
注册时间
2015-11-5
在线时间
2086 小时
发表于 2018-4-6 17:30:57 | 显示全部楼层
wen619 发表于 2018-4-6 17:26
也就是相同优先级(假设是当前最高的)的任务是会依次得到执行了。节后看了源码 我也好好理理系统的处理脉 ...

我是很抱歉才对,你前几天的评论今天才有空上来看,同时非常感谢你对我的错误的纠正
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-6 17:38:37 来自手机 | 显示全部楼层
别这么客气。
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2305
金钱
2305
注册时间
2017-7-6
在线时间
280 小时
发表于 2018-4-9 14:55:24 | 显示全部楼层
UCOSIII也可以设置任务的时间片轮转时间,但是FreeRTOS不可以,只能调整系统时钟节拍来达到该功能
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-9 20:17:36 来自手机 | 显示全部楼层
1547674987 发表于 2018-4-9 14:55
UCOSIII也可以设置任务的时间片轮转时间,但是FreeRTOS不可以,只能调整系统时钟节拍来达到该功能

目前1ms的systick周期对大部分应用场合还不够吗?


有朋友测过在目前1ms周期情况下,您的工程任务切换的最快和最慢时间分别是多少?这东西咋测?
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2305
金钱
2305
注册时间
2017-7-6
在线时间
280 小时
发表于 2018-4-9 21:23:23 | 显示全部楼层
wen619 发表于 2018-4-9 20:17
目前1ms的systick周期对大部分应用场合还不够吗?

但是1MS对于任务来说还是太短了, 一个任务开时间片轮转调度,但是只能跑1MS就切换跑另一个任务,时间有点短了,除非任务简单,耗时短
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-9 22:35:28 来自手机 | 显示全部楼层
1547674987 发表于 2018-4-9 21:23
但是1MS对于任务来说还是太短了, 一个任务开时间片轮转调度,但是只能跑1MS就切换跑另一个任务,时间有 ...

每个任务执行时间不是这个1ms决定的,由你自己的任务代码及工程复杂程度及优先级设置等决定的。确实systick是每1ms运行一次并处理部分任务切换,不要忘记了调用系统Api函数也会引起任务调度,因此任务切换的周期应该小于1ms,我在考虑如何测某任务的运行周期的问题!
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2305
金钱
2305
注册时间
2017-7-6
在线时间
280 小时
发表于 2018-4-9 23:01:59 | 显示全部楼层
wen619 发表于 2018-4-9 22:35
每个任务执行时间不是这个1ms决定的,由你自己的任务代码及工程复杂程度及优先级设置等决定的。确实systi ...

我觉得开时间片轮转的意义就是让相同优先级任务都能至少跑一次循环而不是频繁的切来切去还跑不了一次,这就得不偿失了。至于时钟节拍定位1MS就是说高优先级如果已经就绪最多等待1MS就能抢占CPU,也并不一定意味着任务必须压缩到1MS以内(只要没比它高的任务跑就行),你测任务运行周期的话建议仿真下试试
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-4-10 07:48:54 来自手机 | 显示全部楼层
1547674987 发表于 2018-4-9 23:01
我觉得开时间片轮转的意义就是让相同优先级任务都能至少跑一次循环而不是频繁的切来切去还跑不了一次,这 ...

用Systemview,Trace…等工具监控任务,我没用过 你用过吗?
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2305
金钱
2305
注册时间
2017-7-6
在线时间
280 小时
发表于 2018-4-10 08:52:52 | 显示全部楼层
wen619 发表于 2018-4-10 07:48
用Systemview,Trace…等工具监控任务,我没用过 你用过吗?

Systemview 窗口经常会用到,trace没怎么用过,看你的需要呗,根据你说的你应该是更关注任务调度的周期,用J-LINK或则ST-LINK仿真窗口会有系统实时的时间,你对比两次任务切换的时间差就是调度的周期(可能调度周期是变化的)
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-9-10
在线时间
0 小时
发表于 2019-9-10 17:59:31 | 显示全部楼层
请教一个问题一下,如果freertos配置成不支持抢占式,只支持时间片轮转,所有任务优先级都一样,那某一个任务如果没有阻塞或者挂起,等到该任务时间片到了之后,系统tick中断切换任务,是回到这个没有被挂起的任务, 还是切换到其他就绪任务?麻烦大神解答一下
回复

使用道具 举报

0

主题

11

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-8-20
在线时间
6 小时
发表于 2019-11-13 15:37:04 | 显示全部楼层
xiaohe123 发表于 2019-9-10 17:59
请教一个问题一下,如果freertos配置成不支持抢占式,只支持时间片轮转,所有任务优先级都一样,那某一个 ...

如果systick中断切换任务时,当前只有这个任务是就绪态,那还是切换回该任务;
当前如果有多个任务是就绪态,那就切换到等待时间最久的那个任务;
这就是时间片轮转法调度;
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2020-8-17
在线时间
2 小时
发表于 2021-11-3 14:17:32 | 显示全部楼层
1547674987 发表于 2018-4-9 23:01
我觉得开时间片轮转的意义就是让相同优先级任务都能至少跑一次循环而不是频繁的切来切去还跑不了一次,这 ...

怎么就得不偿失了,对系统来说1ms也不短了,cpu完全处理的过来,你不能按大脑的思维去判断cpu的思维啊。主要是时间片轮转就可以实现类似多任务同时运行的模式了。
回复

使用道具 举报

32

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
617
金钱
617
注册时间
2013-1-16
在线时间
131 小时
发表于 2021-11-8 09:49:54 | 显示全部楼层
FreeRTOS 发表于 2018-4-6 17:30
我是很抱歉才对,你前几天的评论今天才有空上来看,同时非常感谢你对我的错误的纠正

依次得到执行我可以这么理解么,就我我两任务优先级相同,先执行前面那个,然后在执行后面的那个?每次执行那个查找最高任务优先级的函数时,都会去依次执行这两个任务
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2021-11-9 16:46:05 | 显示全部楼层
进来学习一下
Nothing is impossible
回复

使用道具 举报

32

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
617
金钱
617
注册时间
2013-1-16
在线时间
131 小时
发表于 2021-11-11 17:16:04 | 显示全部楼层
wen619 发表于 2018-4-6 17:26
也就是相同优先级(假设是当前最高的)的任务是会依次得到执行了。节后看了源码 我也好好理理系统的处理脉 ...

大佬,请教下,怎样一次执行,依次执行的代码是在哪里的?
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2020-12-25
在线时间
22 小时
发表于 2021-12-1 09:26:23 | 显示全部楼层
本帖最后由 weiguanS 于 2021-12-1 09:28 编辑

#define configTICK_RATE_HZ                                                (1000)                  //时钟节拍频率,这里设置为1000,周期就是1ms。然后在任务设置延时vTaskDelay(50); //就是50ms执行一次任务
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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