OpenEdv-开源电子网

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

关于使用信号量之后的任务切换问题

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-4-23
在线时间
4 小时
发表于 2016-4-23 11:52:22 | 显示全部楼层 |阅读模式
2金钱
问题1:在UCOSIII的例10-1直接访问共享例程当中,当“任务1”,“任务2”,和第一个”second task Running“字符串输出到串口助手之后,我可以理解为,下一步是通过task1_task中的OSTimeDlyHMSM函数进行的任务切换至task2_task中,才输出的第二个”second task Running“字符串的吗?之后再通过task2_task中的OSTimeDlyHMSM函数切换至task1_task中又重新开始的吗?如果不是,请问是如何进行任务1和2之间的切换的?
问题2:请问例10-2中,加入信号量之后的task1和task2的任务是如何切换的,因为当任务一使用OSSemPend的时候,信号量减一,但是delay_ms是有任务切换的,此时切换到任务2,但是任务2中OSSemPend中请求的信号量此时为0,而且其参数OS_OPT_PEND_BLOCKING为阻塞型,任务也无法向下进行了,此时任务2无法进行,也切换不到任务1,那程序下面是如何运行的?
希望各位大神能够帮助解答,非常感谢。

最佳答案

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

OS在这各种情况下,为了仿止你说的卡住的情况, 会让获得信号量的任务优先级自动提升到最高优先级, 以最快最优先的状态运行获得信号量的任务, 然后当任务释放信号量后, 自动改为原先设置的优先级, 这就是OS的仿锁死处理方法!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3308
金钱
3308
注册时间
2013-4-10
在线时间
328 小时
发表于 2016-4-23 11:52:23 | 显示全部楼层
OS在这各种情况下,为了仿止你说的卡住的情况, 会让获得信号量的任务优先级自动提升到最高优先级, 以最快最优先的状态运行获得信号量的任务, 然后当任务释放信号量后, 自动改为原先设置的优先级, 这就是OS的仿锁死处理方法!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2016-4-23 13:18:35 | 显示全部楼层
任务切换发生在延时和高优先级任务的抢占。
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-4-23
在线时间
4 小时
 楼主| 发表于 2016-4-23 21:06:18 | 显示全部楼层
本帖最后由 mc的腰牌 于 2016-4-23 21:07 编辑

  非常感谢,但是还是有一块没有懂。
  我知道延时的时候进行了任务切换,但是比如例10-2中,由于task1中调用delay_ms延时函数切换到task2时的信号量为0,而由于task2中的OSSemPend的opt参数为OS_OPT_PEND_BLOCKING,我理解这个是堵塞型的,就是信号量如果一直为0,它就继续等待信号量,堵塞当前任务,既然此时任务被堵塞了,那么task2不就卡在这里了吗,也运行不到task2中的延时函数delay_ms来进行切换到任务1啊,那么这里是怎么切换到任务1的。难道是假如任务2堵塞了,task1由于优先级较高来抢占了?
  非常感谢。
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-4-23
在线时间
4 小时
 楼主| 发表于 2016-4-24 09:16:47 | 显示全部楼层
likunxue 发表于 2016-4-23 22:35
OS在这各种情况下,为了仿止你说的卡住的情况, 会让获得信号量的任务优先级自动提升到最高优先级, 以最快最 ...

好的,我明白了,非常感谢你,也谢谢原子哥。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 18:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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