UCOSIII编写中断服务函数

1.1、编写中断服务函数:

void USART1_IRQHandler(void)

{

  OSIntEnter();

 //中断服务程序

OSIntExit();

1.2、进入中断服务函数以后使用函数OSIntEnter()

void  OSIntEnter (void)

{

     if (OSRunning != OS_STATE_OS_RUNNING)

     {

         return;

     }

    if (OSIntNestingCtr >= (OS_NESTING_CTR)250u)

    {

return;

    }

    OSIntNestingCtr++;

}

1.3、退出中断服务函数时要调用函数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--;

   if (OSIntNestingCtr > (OS_NESTING_CTR)0)

   {    

         CPU_INT_EN();                                     

         return;

    }

   if(OSSchedLockNestingCtr > (OS_NESTING_CTR)0)

   {

           CPU_INT_EN();                                      

   return;

    }

    OSPrioHighRdy = OS_PrioGetHighest();  

    OSTCBHighRdyPtr = OSRdyList[OSPrioHighRdy].HeadPtr;   

    if(OSTCBHighRdyPtr==OSTCBCurPtr)

    {                       

  CPU_INT_EN();       

           return;

    }

    #if OS_CFG_TASK_PROFILE_EN > 0u

    OSTCBHighRdyPtr->CtxSwCtr++;  

    #endif

    OSTaskCtxSwCtr++;                                  

    #if defined(OS_CFG_TLS_TBL_SIZE) && (OS_CFG_TLS_TBL_SIZE > 0u)

    OS_TLS_TaskSw();

    #endif

    OSIntCtxSw();  

     CPU_INT_EN();

}

OSIntNestingCtr来记录中断嵌套次数,UCOSIII最多支持250级的中断嵌套。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值