OpenEdv-开源电子网

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

请教大家一个关于freertos调度的问题

[复制链接]

74

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2021-2-5
在线时间
133 小时
发表于 2023-2-1 09:31:29 | 显示全部楼层 |阅读模式
1金钱
现在有基于freertos操作系统涉及mqtt,串口的项目代码。问题是这样的,我们通过后台的指令可以在嵌入式层创建一个优先级为6的任务,但是接收这个指令的任务优先级为1,此时我们设定freertos两个宏后调度为抢占模式和时间片模式共存,从我掌握的只是来看,只有同等优先级的任务之间才会通过时间片的方式进行切换,但是我最大的疑惑在于:此时这个优先级为6的任务显然是最高的优先级了,那为什么这个优先级为1的任务还能够接收mqtt指令将这个优先级为6的任务取消掉,此时这个优先级为1的任务不应该无法执行吗?cpu都一直被占用了    这就是我疑惑的地方,请教大家了

最佳答案

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

每个任务里都有vTaskDelay这个函数吧,它会把自己阻塞,让一部分时间给其他优先级的任务
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-2-1 09:31:30 | 显示全部楼层
每个任务里都有vTaskDelay这个函数吧,它会把自己阻塞,让一部分时间给其他优先级的任务
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2676
注册时间
2018-11-8
在线时间
431 小时
发表于 2023-2-1 19:21:14 | 显示全部楼层
“我们通过后台的指令可以在嵌入式层创建一个优先级为6的任务,但是接收这个指令的任务优先级为1”
后面又说“那为什么这个优先级为1的任务还能够接收mqtt指令将这个优先级为6的任务取消掉”
任务1里是先创建6 后面再删掉6?
6里都写了什么内容?
回复

使用道具 举报

74

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2021-2-5
在线时间
133 小时
 楼主| 发表于 2023-2-2 09:31:18 | 显示全部楼层
a5820736 发表于 2023-2-2 08:06
每个任务里都有vTaskDelay这个函数吧,它会把自己阻塞,让一部分时间给其他优先级的任务

开始阻塞之后,就会触发pendsv中断服务函数切换任务,但是这里的切换我记得应寻找最高优先级的任务执行,如果这个最高优先级的任务有几个,那么这几个任务就会按照一定的时间片进行切换,所以在这里我不明白的点在于为什么低优先级的任务得以运行,肯定是什么地方有盲区
回复

使用道具 举报

74

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2021-2-5
在线时间
133 小时
 楼主| 发表于 2023-2-2 09:55:35 | 显示全部楼层
a5820736 发表于 2023-2-2 08:06
每个任务里都有vTaskDelay这个函数吧,它会把自己阻塞,让一部分时间给其他优先级的任务

两个不同优先级的任务想要都运行,而切换的条件有以下几种:1、系统调用主动切换  2、进入阻塞模式或者阻塞结束   3、时间片切换。最合理的就是第二种,在高优先级的任务进入阻塞模式之后,自然会让出CPU的使用权,低优先级的任务得以运行,阻塞结束之后这个高优先级的任务就会抢占这个低优先级的任务
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 19:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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