搜索
bottom↓
回复: 5

求教:uCOS操作系统的OS_Sched函数的问题

[复制链接]

出0入0汤圆

发表于 2013-6-26 11:19:41 | 显示全部楼层 |阅读模式
有谁帮忙解答一下OS_Sched函数的问题:
我的问题是:执了OS_TASK_SW();函数之后,它会不会返回调用点,接着调用OS_EXIT_CRITICAL();开中断?我试着在OS_TASK_SW();函数后加调试信息发现它没有执行调试信息,这样子的话,由于前面已经调用了关中断函数OS_ENTER_CRITICAL();,如果OS_TASK_SW();没有返回,又是谁再开中断?
望高手指点,谢谢。

void  OS_Sched (void) CPL_RET
{
#if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
    OS_CPU_SR  cpu_sr = 0;
#endif



    OS_ENTER_CRITICAL();
    if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */
        if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */
            OS_SchedNew();
            if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
                OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
#if OS_TASK_PROFILE_EN > 0
                OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
#endif
                OSCtxSwCtr++;                          /* Increment context switch counter             */
                OS_TASK_SW();                          /* Perform a context switch                     */
            }
        }
    }
    OS_EXIT_CRITICAL();
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-6-26 11:29:46 | 显示全部楼层
OS_EXIT_CRITICAL();  这个函数以后才会执行PendSV中断,

出0入0汤圆

 楼主| 发表于 2013-6-26 12:53:05 | 显示全部楼层
Eric2013 发表于 2013-6-26 11:29
OS_EXIT_CRITICAL();  这个函数以后才会执行PendSV中断,

刚才做了一个实验,好像是你说的这样子的,多谢啊。那如果是在中断中调用OSIntExit呢?中断函数是怎么返回的?

出0入0汤圆

发表于 2013-6-26 13:12:02 | 显示全部楼层
也无风雨赵 发表于 2013-6-26 12:53
刚才做了一个实验,好像是你说的这样子的,多谢啊。那如果是在中断中调用OSIntExit呢?中断函数是怎么返 ...

一样的,不过要考虑中断优先级抢占的问题。比如这个中断是USART。
(1)PendSV抢占了USART
       OS_EXIT_CRITICAL(); 后就执行PendSV,然后退回到USART,然后退出USART,执行相应任务
(2)PendSV不能抢占USART
        退出USART中断以后,执行PendSV

出0入0汤圆

 楼主| 发表于 2013-6-26 14:00:07 | 显示全部楼层
Eric2013 发表于 2013-6-26 13:12
一样的,不过要考虑中断优先级抢占的问题。比如这个中断是USART。
(1)PendSV抢占了USART
       OS_EXI ...

嗯,是的,谢谢啦,应该是这样的!!

出0入0汤圆

 楼主| 发表于 2013-6-26 20:19:59 | 显示全部楼层
Eric2013 发表于 2013-6-26 13:12
一样的,不过要考虑中断优先级抢占的问题。比如这个中断是USART。
(1)PendSV抢占了USART
       OS_EXI ...

恩,查了一下PendSV的优先级必须设置为最低,也就是退出中断服务程序后才会响应PendSV,进而进行任务切换!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 21:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表