此帖出自实时操作系统RTOS论坛
最新回复
关中断的时间最长不超过内核本身的关中断时间
我的理解是这样的,在UCOS这个实时内核中在处理很多问题时是需要关中断的,比如临界数据的处理、中断嵌套层数计数处理、任务调度等情况下OS都要先关闭中断处理后再开中断。具体的代码比如任务调度锁函数
void OSSchedLock (void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register*/
OS_CPU_SR cpu_sr = 0;
#endif
if (OSRunning == OS_TRUE) { /* Make sure multitasking is running*/
OS_ENTER_CRITICAL();
if (OSIntNesting == 0) { /* Can't call from an ISR */
if (OSLockNesting < 255u) { /* Prevent OSLockNesting from wrapping back to 0 */
OSLockNesting++; /* Increment lock nesting level*/
}
}
OS_EXIT_CRITICAL();
}
}
这样实时内核运行时就会有一定的时间是关着中断的,这个时间虽然很短,但是客观存在。把内核中所有关中断的时间总和叫做系统关中断时间T disable interrupt of OS,不仅仅是uCOS存在这个时间。所有的实时内核都存在这个时间,并且这个时间越小这个实时内核的实时性能越好。所以很所商用实时内核把这个时间作为衡量自己实时内核性能的一种参数。
而“关中断的时间最长不超过内核本身的关中断时间”就是用户自己的应用代码中关中断的总时间尽量不要大于T disable interrupt of OS。我们可以用一个极端的例子来说明这一点。因为任何系统都是基于系统时钟节拍的,而系统时钟节拍就是一个定时中断,如果我们总是关中断以至于影响到了系统的时钟节拍,系统的性能不久无从谈起了么。呵呵。
不知道这样解释你是否理解。呵呵
详情
回复
发表于 2011-3-1 14:17
| ||
|
||
回复 楼主 ZHANGXUEJIE 的帖子
此帖出自实时操作系统RTOS论坛
| ||
|
||
EEWorld Datasheet 技术支持