打印
[ZLG-ARM]

问个 uC/OS II问题

[复制链接]
1169|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjtuer|  楼主 | 2008-1-28 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uC/os, TI, ST, tc, IO
void  OSIntExit (void)
{
#if OS_CRITICAL_METHOD == 3    
    OS_CPU_SR  cpu_sr;
#endif
    
    
    if (OSRunning == TRUE) {
        OS_ENTER_CRITICAL();
        if (OSIntNesting > 0) {        
            OSIntNesting--;
        }
        if ((OSIntNesting == 0) && (OSLockNesting == 0)) { 
            OSIntExitY    = OSUnMapTbl[OSRdyGrp];          
            OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl][OSIntExitY]]);
            if (OSPrioHighRdy != OSPrioCur) {              
                OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];
                OSCtxSwCtr++;                              
                OSIntCtxSw();                             
            }
        }
        OS_EXIT_CRITICAL();
    }
}
上面程序中的OSIntCtxSw();相当于执行return;
因为includes.h中有宏定义
#define OSIntCtxSw()   return
执行这个return除了程序返回之外,还有其他什么作用?? 

相关帖子

沙发
zlgarm| | 2008-1-28 14:27 | 只看该作者

OSIntCtxSw()

xjtuer 您好:
    这样做主要是不同情况中断OSIntExit()对堆栈的使用情况不同,所以必须加上这个宏定义,这样做也是为了使用方便。对于return具体作用您可以参考C语言书中的相关部分。
                                      By zlgarm_zhp

使用特权

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

本版积分规则

12

主题

19

帖子

1

粉丝