uCOS_II的时钟节拍中断函数OSTickISR()

[复制链接]
7460|5
 楼主| 老郑电子 发表于 2011-1-24 19:59 | 显示全部楼层 |阅读模式
uCOS_II的时钟节拍中断函数OSTickISR()会不会引一次任务调度呢?
原野之狼 发表于 2011-1-24 21:25 | 显示全部楼层
当任务延时到就会切换
emailli 发表于 2011-1-24 21:57 | 显示全部楼层
我来详细点回答吧
调度肯定是会进行的
但是,调度的后果由两种
一种是 对任务做切换
一种是 对任务不做切换

对于非抢占式的操作系统,如果当前任务运行不再是最高优先级的任务,在定时中断来临时,就发生切换任务的动作。否则就不切换。
所有的任务都应该是在这种情况才切换的。
如果是抢占式的,则不需要等到定时中断的来临即可切换。
 楼主| 老郑电子 发表于 2011-1-24 22:36 | 显示全部楼层
我来详细点回答吧
调度肯定是会进行的
但是,调度的后果由两种
一种是 对任务做切换
一种是 对任务不做切换

对于非抢占式的操作系统,如果当前任务运行不再是最高优先级的任务,在定时中断来临时,就发生切换任务的 ...
emailli 发表于 2011-1-24 21:57

是时钟节拍中断函数,不是中断函数、、中断函数返回后肯定会进行一次任务调度、、但是我看书上的代码没有 引用任务调度函数OSSched()、、但感觉时钟节拍中断函数应该进行一次任务调度、、
 楼主| 老郑电子 发表于 2011-1-24 22:42 | 显示全部楼层
时钟节拍中断函数OSTickISR()的示意性代码是:
void OSTickISR(void)
{
    保存CPU寄存器;
    调用OSIntEnter();            //记录中断嵌套层数
    if(OSIntNesting==1)
    {
       OSTCBcur->OSTCBStkPtr=sp;           //在任务TCB中保存堆栈指针
    }
    调用OSTimeTick();
    清除中断;
    开中断;
    调用OSIntExit();
    恢复CPU寄存器;
    中断返回;
}

哦,要进行一次任务切换,把这个敲一遍就发现了。。先没注意看这个函数OSIntExit()、只跑去研究这个函数去了OSTimeTick();
这个OSIntExit()条件满足时会进行一次任务切换、、
nevsayno 发表于 2011-1-25 08:40 | 显示全部楼层
调用OSIntExit();:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

56

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部