OpenEdv-开源电子网

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

FreeRtos关于任务调度和任务加入就绪列表问题

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-20
在线时间
6 小时
发表于 2021-5-4 15:22:35 | 显示全部楼层 |阅读模式
5金钱
        大家好!小弟最近在学习FreeRtos,有一个问题想请教一下:
        我在看FreeRtos代码的时候,看到有时候把任务加入到就绪列表,需要判断任务调度器是否已经开启,有时候不需要判断,这两者之间有什么关系吗?

01-任务进就绪列表需要由任务调度器决定

01-任务进就绪列表需要由任务调度器决定

02-任务直接挂载到任务列表

02-任务直接挂载到任务列表

03-调度器挂起情况下,任务挂载到就绪列表

03-调度器挂起情况下,任务挂载到就绪列表

最佳答案

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

刚才又重新研究了一下,发现函数有可能被中断服务直接或者间接调用时,如果此函数有释放任务相关的操作,就需要判断任务调度器是否已暂停;如果函数只是在任务中使用,需要释放任务时直接释放就可以了,不用考虑任务调度器。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-20
在线时间
6 小时
 楼主| 发表于 2021-5-4 15:22:36 | 显示全部楼层
        刚才又重新研究了一下,发现函数有可能被中断服务直接或者间接调用时,如果此函数有释放任务相关的操作,就需要判断任务调度器是否已暂停;如果函数只是在任务中使用,需要释放任务时直接释放就可以了,不用考虑任务调度器。
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-20
在线时间
6 小时
 楼主| 发表于 2021-5-9 09:49:51 | 显示全部楼层
有哪位老哥知道为什么吗?帮小弟解答一下,在这里谢谢了
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1960
金钱
1960
注册时间
2021-4-16
在线时间
500 小时
发表于 2021-5-9 10:14:42 | 显示全部楼层
帮顶~~
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-20
在线时间
6 小时
 楼主| 发表于 2021-5-9 10:40:44 | 显示全部楼层
  1. void vTaskSwitchContext( void )
  2. {
  3.         if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
  4.         {
  5.                 /* The scheduler is currently suspended - do not allow a context
  6.                 switch. */
  7.                 xYieldPending = pdTRUE;
  8.         }
  9.         else
  10.         {
  11.                 xYieldPending = pdFALSE;
复制代码


看这里,其实在调度器暂停的情况下,根本就不会进行任务调取了,会什么中断中不能把任务加入到就绪列表?
可能是因为任务调度器暂停的情况下,虽然不会进行任务切换了,但是如果把高优先级任务加入到就绪列表,由于任务调度器被停止,高优先级任务等不到运行,会出现任务优先级翻转的问题。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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