OpenEdv-开源电子网

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

某任务A使用发出信号量函数OSSemPost,由于其内部要执行任务调度,那么该任务A何时返回呢?

[复制链接]

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-9-16
在线时间
0 小时
发表于 2014-9-16 10:14:44 | 显示全部楼层 |阅读模式
5金钱
发出信号量  若被唤醒的任务是最高优先级则切换到该任务
305  OS_ENTER_CRITICAL(); //关闭中断
306  if (pevent->OSEventGrp != 0x00) { //有任务在等待信号量,等待事件的任务组=0
307  OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM); //使任务进入就绪态
308  OS_EXIT_CRITICAL(); //打开中断
309  OS_Sched(); //进入调度任务,使就绪态优先级最高任务运行
310  return (OS_NO_ERR); //返回(信号量成功的置位)
311 }
第309行就切换到别的任务了,那么何时能执行第310行?切换到别的任务后,CPU已经跟本任务A没有关系了,如果再有别的什么消息或中断,则不停切换到其它任务了,那么本任务A的第310行啥时才能执行到呢?  特别的,当在中断程序里使用Post时,若切换到别的任务了,那么这个中断不是一直无法结束吗?

最佳答案

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

当轮到任务A继续运行的时候。 所以不要在中断里面做能引起任务调度的操作。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-16 10:14:45 | 显示全部楼层
当轮到任务A继续运行的时候。
所以不要在中断里面做能引起任务调度的操作。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-9-16
在线时间
0 小时
 楼主| 发表于 2014-9-16 10:14:45 | 显示全部楼层
哦 我明白了  虽然中断服务程序里调用了Post  而Post又调用了OS_Sched  但并不必然发生切换  因为OS_Sched里会检测是否退出中断了  若非则不切换       基础知识不牢啊   一看到OS_Sched就以为必然发生切换  实际它里面有许多条件判断的
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-9-16
在线时间
0 小时
 楼主| 发表于 2014-9-16 14:37:04 | 显示全部楼层
我看不少例子都在中断里使用Post发送信号量啊     而Post函数里就调用了任务切换函数呀
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-16 15:06:07 | 显示全部楼层
回复【4楼】清风明月逍遥云:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2014-9-24 13:22:55 | 显示全部楼层
回复【4楼】清风明月逍遥云:
---------------------------------
如果在执行A任务的时候进入了中断执行了必要的操作并Post(通常都是这样,会在中断里面发送信号量或者消息到其他监听的任务),退出中断后内核会对等待信号量或者消息对象进行处理并更新相应标志,如果任务B在等待该信号量或者消息(通常在等待消息或者信号量的任务都会挂起的),那么会将B任务放入就绪列表,然后就启动任务调度,扫描任务就绪列表里面的就绪任务,如果有则调度,没有话还是返回到原任务继续执行
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 04:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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