打印

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

[复制链接]
6844|5
手机看帖
扫描二维码
随时随地手机跟帖
沙发
原野之狼| | 2011-1-24 21:25 | 只看该作者
当任务延时到就会切换

使用特权

评论回复
板凳
emailli| | 2011-1-24 21:57 | 只看该作者
我来详细点回答吧
调度肯定是会进行的
但是,调度的后果由两种
一种是 对任务做切换
一种是 对任务不做切换

对于非抢占式的操作系统,如果当前任务运行不再是最高优先级的任务,在定时中断来临时,就发生切换任务的动作。否则就不切换。
所有的任务都应该是在这种情况才切换的。
如果是抢占式的,则不需要等到定时中断的来临即可切换。

使用特权

评论回复
地板
老郑电子|  楼主 | 2011-1-24 22:36 | 只看该作者
我来详细点回答吧
调度肯定是会进行的
但是,调度的后果由两种
一种是 对任务做切换
一种是 对任务不做切换

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

是时钟节拍中断函数,不是中断函数、、中断函数返回后肯定会进行一次任务调度、、但是我看书上的代码没有 引用任务调度函数OSSched()、、但感觉时钟节拍中断函数应该进行一次任务调度、、

使用特权

评论回复
5
老郑电子|  楼主 | 2011-1-24 22:42 | 只看该作者
时钟节拍中断函数OSTickISR()的示意性代码是:
void OSTickISR(void)
{
    保存CPU寄存器;
    调用OSIntEnter();            //记录中断嵌套层数
    if(OSIntNesting==1)
    {
       OSTCBcur->OSTCBStkPtr=sp;           //在任务TCB中保存堆栈指针
    }
    调用OSTimeTick();
    清除中断;
    开中断;
    调用OSIntExit();
    恢复CPU寄存器;
    中断返回;
}

哦,要进行一次任务切换,把这个敲一遍就发现了。。先没注意看这个函数OSIntExit()、只跑去研究这个函数去了OSTimeTick();
这个OSIntExit()条件满足时会进行一次任务切换、、

使用特权

评论回复
6
nevsayno| | 2011-1-25 08:40 | 只看该作者
调用OSIntExit();:lol

使用特权

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

本版积分规则

0

主题

56

帖子

1

粉丝