查看: 1802|回复: 0

实验证明:时钟节拍不能够引发任务调度?

[复制链接]

该用户从未签到

发表于 2014-3-23 19:55:36 | 显示全部楼层 |阅读模式
分享到:
请教:要实现任务切换只有这几个方式吗?:1OSTimeDly  2任务间通信(如信号量,邮箱等)。
疑问:时钟节拍中断,到底会不会进行一次任务调度。
如果可以,那么时钟节拍函数也算是中断的一类,按理说也要进行一次任务切换。
本人做实验时,设计了任务A(优先级为5),任务B(优先级为9),A和B不通信,如果任务A和任务B中都调用osTimeDly( ),任务切换正常。
后来把实验改动,高优先级任务中还是调用OsTimeDly( ), 低优先级里去掉OsTimeDly( ) ;发现当任务切换到任务B,就一直再执行B的操作。
如果时钟节拍函数里面的中断可以触发一次任务调度的话,当任务A的延时到,应该要切换到这个高优先级的任务A才对。可是实验结果就是一直运行任务B。
由此,本人的疑问:实验结果表明,时钟节拍中断,是不能够触发一次任务调度的?但是查看OSTickISR() ,里面代码又有OSIntExit() ,那应该要任务调度才对啊。。

但是查看:
时钟节拍中断函数OSTickISR()的示意性代码是:
void OSTickISR(void)
    保存CPU寄存器;
   调用OSIntEnter();            //记录中断嵌套层数
   if(OSIntNesting==1)
    {
       OSTCBcur->OSTCBStkPtr=sp;           //在任务TCB中保存堆栈指针
    }
    调用OSTimeTick();
    清除中断;
    开中断;
    调用OSIntExit();
    恢复CPU寄存器;
    中断返回;
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-12-12 10:49 , Processed in 0.118776 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.