OpenEdv-开源电子网

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

freeRTOS关于任务调度的一个问题求助

[复制链接]

4

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2018-10-4
在线时间
9 小时
发表于 2019-5-29 09:48:24 | 显示全部楼层 |阅读模式
1金钱
freeRTOS中设置两个任务,任务A优先级>任务B优先级,任务A中延迟用osDelay(引起任务切换),任务B中延时用delay_ms(不引起任务切换),为啥实验中显示任务A和任务B都在不停的运行运行?(我认为应该后面只有任务B在运行,因为任务B运行过程中不会触发任务切换)(任务A和任务B的优先级下的任务都只有他们自己,且都不等于空闲任务优先级)
而当任务A优先级<任务B优先级,任务A中延迟用osDelay(引起任务切换),任务B中延时用delay_ms(不引起任务切换),实验中显示后面只有任务B运行(这个我认为是正常的)
求大佬们帮助啊啊啊!!


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

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2018-10-4
在线时间
9 小时
 楼主| 发表于 2019-5-29 10:39:58 | 显示全部楼层
发现啦
之前看的资料是原子丛书的左忠凯老师的FreeRTOS源码详解与应用开发的时间片调度部分,该部分仅仅仅仅仅仅仅仅针对于时间片调度实验而言,想了解更多还得看源码。
定位到xPortSysTickHandler函数的xTaskIncrementTick函数,
                                        #if (  configUSE_PREEMPTION == 1 )
                                        {
                                                /* Preemption is on, but a context switch should
                                                only be performed if the unblocked task has a
                                                priority that is equal to or higher than the
                                                currently executing task. */
                                                if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
                                                {
                                                        xSwitchRequired = pdTRUE;
                                                }
                                                else
                                                {
                                                        mtCOVERAGE_TEST_MARKER();
                                                }
                                        }
                                        #endif /* configUSE_PREEMPTION */

很明显,systick中断不仅仅就时间片实验而言,更针对于对于高优先级的任务,低优先级任务要为其开绿灯,让高的就绪态先运行。。。


顺便吐槽下cubemx的更新,每次一更新源码部分就要花功夫去了解- -,有时候真的很麻烦,对于新手真的吃不消
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
发表于 2019-5-29 16:15:38 | 显示全部楼层
孙阳 发表于 2019-5-29 10:39
发现啦
之前看的资料是原子丛书的左忠凯老师的FreeRTOS源码详解与应用开发的时间片调度部分,该部分仅仅仅 ...

你的意思是不是  在任务B里面,没有OSdelay,但是systick触发中断,切换到任务A?
穷不可怕,可怕的是穷的是我~~~
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2018-10-4
在线时间
9 小时
 楼主| 发表于 2019-5-29 21:39:08 | 显示全部楼层
是啊,只能切换到优先级更高的任务
回复

使用道具 举报

4

主题

44

帖子

0

精华

高级会员

Rank: 4

积分
635
金钱
635
注册时间
2019-4-23
在线时间
84 小时
发表于 2019-7-6 17:08:29 | 显示全部楼层
LZ描述的两种现象都没问题吧;前一个现象,高优先级的A,delay后即让B运行;delay时间到了,又抢占B,接着运行;所以A,B都运行运行;
回复

使用道具 举报

10

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2016-4-9
在线时间
97 小时
发表于 2019-9-3 10:50:55 | 显示全部楼层
A阻塞时间到了 抢占B
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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