搜索
bottom↓
回复: 5

uCOS任务级的调度关中断的问题,需要高手的一些指点!

[复制链接]

出0入0汤圆

发表于 2010-3-29 08:07:19 | 显示全部楼层 |阅读模式
任务级调度使用了如下的函数:
void  OS_Sched (void)
{
#if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
    OS_CPU_SR  cpu_sr;
#endif   
    INT8U      y;


    OS_ENTER_CRITICAL();
    if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Sched. only if all ISRs done & not locked    */
        y             = OSUnMapTbl[OSRdyGrp];          /* Get pointer to HPT ready to run              */
        OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
        if (OSPrioHighRdy != OSPrioCur) {              /* No Ctx Sw if current task is highest rdy     */
            OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
            OSCtxSwCtr++;                              /* Increment context switch counter             */
            OS_TASK_SW();                              /* Perform a context switch                     */
        }
    }
    OS_EXIT_CRITICAL();
}
我有一个问题,这个函数开始使用OS_ENTER_CRITICAL();关闭了全局中断使能,如果优先级更高的任务进入了使能状态,这个开中断的操作是在什么地方实现的?OSCtxSw函数,只是实现了任务优先级的切换,没有开中断的操作。还有一旦优先级更高的任务需要执行,这个调用就不返回了,那么 OS_EXIT_CRITICAL();还有什么作用?

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

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

出0入0汤圆

发表于 2010-3-29 09:02:40 | 显示全部楼层
这个开中断的操作是在什么地方实现的?
OS_EXIT_CRITICAL();还有什么作用?
-----------------------------------------

楼主之考虑出去,没考虑回来。
两问题互为答案。

出0入0汤圆

 楼主| 发表于 2010-3-29 11:44:10 | 显示全部楼层
我觉得它回不来,任务调度函数不是任务,没有办法保存现场的,来回执行的是任务切换, OS_EXIT_CRITICAL()只有在当前运行的任务是最高优先级的情况下才会执行吧。

出0入0汤圆

发表于 2010-4-1 15:06:34 | 显示全部楼层
回复【2楼】simplorer
-----------------------------------------------------------------------
你仔细分析代码看看 就拿在延时函数调用OS_Sched 为例 此时函数还在某个任务中执行 所以打断的还是任务  上官是对的

出0入0汤圆

 楼主| 发表于 2010-4-8 17:09:44 | 显示全部楼层
跟踪了一下源码,终于有点理解了,谢谢各位!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-31 14:36

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

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