UCOSIII OSIntExit()和OSIntEnter()的问题

2019-07-20 07:06发布

  首先视频中讲中断服务函数会在进入中断时关闭中断,退出时打开中断,但是实际上OSIntEnter()没有关闭中断的操作,只有OSIntExit()里才有,这点不懂。
然后void  OSIntExit (void)
{
    CPU_SR_ALLOC();

    if (OSRunning != OS_STATE_OS_RUNNING) {     
        return;                                         
    }
    CPU_INT_DIS();  //这里才有关闭中断的操作
  
    if (OSIntNestingCtr == (OS_NESTING_CTR)0) {     
        CPU_INT_EN();                                         
        return;                             //这里可以理解 OSIntNestingCtr 减到0,说明要退出最后一个嵌套了,但是在这一步退出的话下面的寻找下一个任务的事情岂不是做不了了?
    }
    OSIntNestingCtr--;
    if (OSIntNestingCtr > (OS_NESTING_CTR)0) {         
        CPU_INT_EN();                           
        return;          //这里无法理解,能进入这个if说明嵌套还没结束,没结束为什么要打开中断?不是要最后退出才打开中断?
    }
    if (OSSchedLockNestingCtr > (OS_NESTING_CTR)0) {   
        CPU_INT_EN();                          
        return;      
    }
    OSPrioHighRdy   = OS_PrioGetHighest();              
    OSTCBHighRdyPtr = OSRdyList[OSPrioHighRdy].HeadPtr;   
    if (OSTCBHighRdyPtr == OSTCBCurPtr) {               
        CPU_INT_EN();                                 
        return;
    }
这个函数这么几处我都看不太懂,希望谁来给我解释下,谢谢

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。