打印

关于uc/os2的任务级调度函数OS_Sched()

[复制链接]
4206|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdpbeyond|  楼主 | 2008-3-14 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看uc/os2的任务级调试器函数OS_Sched()有一处不明白,特来请教各位大侠!
              OS_Sched()
                      {
                       OS_ENTER_CRITICAL();
                       if((OSIntNesting==0)&&(OSLockNesting==0))  (1)
                         {
                          查找优先级更高的任务并切换;
                         }
                       OS_EXIT_CRITICAL();
                      }
 (1)处的OSIntNesting是中断的嵌套层数,OSLockNesting是给调度器上锁的层数,这条语句的意思是在没有给调度器上锁且并非中断调用任务级调度函数OS_Sched()时,在进行高优先级的任务切换.我不明白的地方是:任务级的调度函数怎么可能在中断中调用?在这里作这样的判断是不是多此一举?
 本人刚接触嵌入式操作系统不久,还请大侠们不吝赐教!先谢过!

相关帖子

沙发
gdpbeyond|  楼主 | 2008-3-14 12:26 | 只看该作者

好冷清呀!

好冷清呀!

使用特权

评论回复
板凳
wxj1952| | 2008-3-14 15:55 | 只看该作者

提示:

中断是系统心跳。它在固定时间执行的系统任务是刷新+调度函数A。如果恰好在这个时间点,任务级也在执行调度函数A,没有运行完而被中断打断了,那么 这次系统心跳就要让给任务级调度执行完,也就是说它这次只执行刷新函数而不执行调度函数A了。

   无论任务级调度还是系统级调度都是执行同一个调度函数A。也就是你说的“ 查找优先级更高的任务并切换;”应该说A是一个原语调用,一经启动,必须完成。两者“互斥”?

使用特权

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

本版积分规则

41

主题

216

帖子

0

粉丝