吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?
在学习UCOSIII的时候时常遇到下面的一段代码,能看懂,它的意思就是不允许在中断中进行任务调度,但是就是不知道为什么要这样设置,今天仔细想了一下,同时上网搜了一下,得到答案:如果我们在中断中切换到别的地方去执行,由于ISR并没有向操作系统内核报道(也就是并没有属于自己的控制块被加到受OS内核控制的任务就续表中
),所以当切换到别的任务中去了以后,当前的ISR就相当于半途而废了,无法从切换点继续执行,这是我们不希望看到的,我们希望ISR被完整地执行。
if (OSIntNestingCtr > (OS_NESTING_CTR)0) { /* ISRs still nested? */
return; /* Yes ... only schedule when no nested ISRs */
}