OpenEdv-开源电子网

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

初学RTT,这两个函数都能实现任务切换,请问它们的区别是什么?

[复制链接]

17

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2019-3-26
在线时间
105 小时
发表于 2019-12-20 20:35:33 | 显示全部楼层 |阅读模式
1金钱
//rt_schedule();//任务调度
//rt_thread_yield();//任务切换

最佳答案

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

1、 rt_thread_yield()函数在早前的版本(大概2018年11月之前的版本里)中有非常多的操作,这些操作完成之后,在最后调用了一次rt_schedule();。 在早前的版本中,【rt_thread_yield() 函数和 rt_schedule() 函数比较相像,但在有相同优先级的其他就绪态线程存在时,系统的行为却完全不一样。执行 rt_thread_yield() 函数后,当前线程被换出,相同优先级的下一个就绪线程将被执行。而执行 rt_schedule() 函数后,当前线程并不一 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-9-3
在线时间
7 小时
发表于 2019-12-20 20:35:34 | 显示全部楼层
1、
rt_thread_yield()函数在早前的版本(大概2018年11月之前的版本里)中有非常多的操作,这些操作完成之后,在最后调用了一次rt_schedule();。
在早前的版本中,【rt_thread_yield() 函数和 rt_schedule() 函数比较相像,但在有相同优先级的其他就绪态线程存在时,系统的行为却完全不一样。执行 rt_thread_yield() 函数后,当前线程被换出,相同优先级的下一个就绪线程将被执行。而执行 rt_schedule() 函数后,当前线程并不一定被换出,即使被换出,也不会被放到就绪线程链表的尾部,而是在系统中选取就绪的优先级最高的线程执行(如果系统中没有比当前线程优先级更高的线程存在,那么执行完 rt_schedule() 函数后,系统将继续执行当前线程)。】

2、
在支持SMP功能后(大约就是2018年11月之后了),对rt_thread_yield()函数有所修改。你当前看到的最新版本或者master的版本,都是直接使用rt_thread_yield()调用rt_schedule(),没有其他的操作,所以意义是一样的。

楼主有疑问的话可以翻翻源码看看。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 13:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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