为什么不能在ISR中进行任务切换

吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?

在学习UCOSIII的时候时常遇到下面的一段代码,能看懂,它的意思就是不允许在中断中进行任务调度,但是就是不知道为什么要这样设置,今天仔细想了一下,同时上网搜了一下,得到答案:如果我们在中断中切换到别的地方去执行,由于ISR并没有向操作系统内核报道(也就是并没有属于自己的控制块被加到受OS内核控制的任务就续表中),所以当切换到别的任务中去了以后,当前的ISR就相当于半途而废了,无法从切换点继续执行,这是我们不希望看到的,我们希望ISR被完整地执行。

    if (OSIntNestingCtr > (OS_NESTING_CTR)0) {              /* ISRs still nested?                                     */
        return;                                             /* Yes ... only schedule when no nested ISRs              */
    }                    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值