5413|3

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请教一个UCOS中断任务的问题 [复制链接]

     假设一个任务在执行过程中,被中断,然后保存现场进入中断后,发现更高优先级任务,这时候,执行更高优先级任务,在执行更高优先级任务时候,被中断的任务处在什么状态?在被中断的代码中,没有看到被挂起的代码。还有更高优先级任务执行完后,是不是马上中断返回到被中断的任务继续执行?

最新回复

1、答:     UCOSII的中断服务程序中有必不可少的4个部分: OSIntEnter(); //(1) 进入中断,OSIntNesting加1,OSIntNesting>0时任务调度被关闭 OSSemPost(Sem); //(2) 发送信号量,使其他任务进入就绪态 清除中断的响应标志 //(3) 清除中断响应标志 OSIntExit(); //(4) 退出中断,OSIntNesting减1,OSIntNesting==0时任务调度才被打开 按照楼主所说,“发现更高优先级任务”的程序应该是在(2)部分,而此时任务调度是关闭的,要想进行 任务切换,至少得等到这个中断结束(至于任务切不切换,怎么切换,看一下OSIntEnter()和OSIntExit() 的相关内容就明白了)。所以在中断中高优先级的任务是不会被执行的。   2、答:     任务要想切换就必须执行一个任务调度函数OS_Sched()(中断另当别论),最典型的就是OSTimeDly()函数里调用了OS_Sched(),所以低优先级任务被高优先级任务剥夺CPU控制权,要等到低优先级任务执行任务调度函数OS_Sched()之后。如果你的程序从头到尾都没调用OS_Sched(),它永远也不会进行任务切换。至于任务怎么切换看看OS_Sched()相关内容就明白了。总之任务切换时,CPU控制权总是被就绪态的任务优先级最高的任务获得。 [ 本帖最后由 SuperStar515 于 2011-7-21 10:19 编辑 ]  详情 回复 发表于 2011-7-21 10:15
点赞 关注
 

回复
举报

11

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
2、正常工作时候,高优先级任务到来,会是剥夺低优先级任务的CPU控制权,切换运行高优先级任务,那么被打断的低优先级任务,处在什么状态?因为高优先级任务运行到末尾调用ostimedly函数进行调度高优先级就绪任务接着运行。。但是之前被打断的低优先级本身就是运行状态了,也就是就绪状态,那么如果判断依然有比被打断的低优先级任务高的任务,不是又没有恢复执行?
 
 
 

回复

449

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

1、答:

    UCOSII的中断服务程序中有必不可少的4个部分:

OSIntEnter(); //(1) 进入中断,OSIntNesting加1,OSIntNesting>0时任务调度被关闭

OSSemPost(Sem); //(2) 发送信号量,使其他任务进入就绪态

清除中断的响应标志 //(3) 清除中断响应标志

OSIntExit(); //(4) 退出中断,OSIntNesting减1,OSIntNesting==0时任务调度才被打开

按照楼主所说,“发现更高优先级任务”的程序应该是在(2)部分,而此时任务调度是关闭的,要想进行 任务切换,至少得等到这个中断结束(至于任务切不切换,怎么切换,看一下OSIntEnter()和OSIntExit() 的相关内容就明白了)。所以在中断中高优先级的任务是不会被执行的。

 

2、答:

    任务要想切换就必须执行一个任务调度函数OS_Sched()(中断另当别论),最典型的就是OSTimeDly()函数里调用了OS_Sched(),所以低优先级任务被高优先级任务剥夺CPU控制权,要等到低优先级任务执行任务调度函数OS_Sched()之后。如果你的程序从头到尾都没调用OS_Sched(),它永远也不会进行任务切换。至于任务怎么切换看看OS_Sched()相关内容就明白了。总之任务切换时,CPU控制权总是被就绪态的任务优先级最高的任务获得。

[ 本帖最后由 SuperStar515 于 2011-7-21 10:19 编辑 ]
 
个人签名世界是个圈,人生也是个圈。
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

4
 
多谢滨头的讲解。很详细。。好人啊
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表