uc/OS-II中的OSTimeGet()有一点不明白,求教!!!
源码如下:#if OS_TIME_GET_SET_EN > 0
INT32UOSTimeGet (void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SRcpu_sr;
#endif
INT32U ticks;
OS_ENTER_CRITICAL();
ticks = OSTime;
OS_EXIT_CRITICAL();
return (ticks); // 为什么不直接返回OSTime?
}
#endif
不明白的就是为什么要定义一个局部变量来返回,而不直接返回OSTime呢? OSTime是会变的。 获取OSTime的值可能需要多条语句,故而需要关中断,不能把return语句放在临界段中,所以用一个赋值语句来放在临界段中 os time 是64位的,而你的单片机是32位的,也就行一个简单的
os time ++ 不是单指令,而是分至少2条指令(汇编)完成的
那么如果刚好执行了一步而跳到OS TICK中断里面执行了++操作,这样不乱了么
所以要锁存一下,楼主明白没?
不明白再问 原来如此 就是防止在获取时间的时候,被中断打断了,所以刻意做的一个保护措施吧
页:
[1]