打印

ucos移植里的中断调度问题

[复制链接]
1866|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kedayyc|  楼主 | 2009-7-19 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void OSIntExit (void)    
{   
    OS_ENTER_CRITICAL();   
    if ((--OSIntNesting | OSLockNesting) == 0) { /* Reschedule only if all ISRs completed & not locked */   
        OSIntExitY    = OSUnMapTbl[OSRdyGrp];   
        OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl][OSIntExitY]]);   
        if (OSPrioHighRdy != OSPrioCur) {        /* No context switch if current task is highest ready */   
            OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];   
            OSCtxSwCtr++;                        /* Keep track of the number of context switches       */   
            OSIntCtxSw();                        /* Perform interrupt level context switch             */   
        }   
    }   
    OS_EXIT_CRITICAL();   
}   
在上述程序里假如 OSIntCtxSw();里进行了任务调度那么
 OS_EXIT_CRITICAL();   这个函数什么时候执行 
该中断应该怎么退出?
那位大侠指导、指导。
            

相关帖子

沙发
sufeng983| | 2009-7-23 15:54 | 只看该作者

中断任务切换,也要等中断函数执行完。

使用特权

评论回复
板凳
sufeng983| | 2009-7-23 16:03 | 只看该作者

2

你在公司上班,正在整理资料(任务1)。
突然想WC(中断),
在坑上,接到老总电话,叫你去办公室(任务2)(你不可能先整理完资料再去,因为他是老总)。
但是你总得上完WC,然后直接去他办公室,而不是先拿起资料看一眼,再去办公室。
但是PP总得要擦吧。不管是国家主席叫你,还是谁叫你,最后一步少不了。中断任务切换,只是告诉你,从WC出来,直接去切换后的目标(办公室),而且不是去原来的目标望望,再转目标。
中断级任务切换,省去了,你去自己的办公室,再转去老总办公室的麻烦。但是PP总得要擦的。

使用特权

评论回复
地板
zchong| | 2009-7-23 16:51 | 只看该作者

是不是这样的

是不是这样的:
执行OSIntCtxSw()后,只是改变了堆栈等信息,并不是直接进行了任务切换,OSIntCtxSw()巧妙地把中断返回地址设置成了将要执行的最高优先级的就绪任务

使用特权

评论回复
5
sufeng983| | 2009-7-23 17:22 | 只看该作者

就是免去了,切换回原来任务,再重新切换到高级任务,免去一次切换。

使用特权

评论回复
6
nenozyp| | 2009-7-24 13:10 | 只看该作者

sufeng983的wc比喻有意思

   
   wc比喻比较有意思的,实际上ucos-ii调度本质就是任何时候让高优先级的任务运行,当然是最快的切换方式,所以说免去了切换原来任务的时间。

使用特权

评论回复
7
fe_arm| | 2009-7-26 12:52 | 只看该作者

这个比喻有点意思

使用特权

评论回复
8
qiyinxian| | 2012-7-20 15:44 | 只看该作者
你在公司上班,正在整理资料(任务1)。突然想WC(中断),在坑上,接到老总电话,叫你去办公室(任务2)(你不可能先整理完资料再去,因为他是老总)。但是你总得上完WC,然后直接去他办公室,而不是先拿起资料看一 ...
sufeng983 发表于 2009-7-23 16:03




mark

使用特权

评论回复
9
yifeng1118| | 2012-7-28 15:19 | 只看该作者
1# kedayyc
前面的说法都是针对线程的切换来说,这里说说LZ说的问题,因为切换线程里的压入的PSW里面会有进入中断的时候的中断的状态。
所以在弹出的时候会自动恢复中断的标志,不需要再返回 OS_EXIT_CRITICAL()去保证开中断或者还原。所以不用担心。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝