pish 发表于 2013-4-3 18:27:40

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呢?

ibichao 发表于 2013-4-3 19:32:17

OSTime是会变的。

pish 发表于 2013-4-3 19:48:56

获取OSTime的值可能需要多条语句,故而需要关中断,不能把return语句放在临界段中,所以用一个赋值语句来放在临界段中

yuyu87 发表于 2013-4-3 20:32:44

os time 是64位的,而你的单片机是32位的,也就行一个简单的
os time ++ 不是单指令,而是分至少2条指令(汇编)完成的
那么如果刚好执行了一步而跳到OS TICK中断里面执行了++操作,这样不乱了么
所以要锁存一下,楼主明白没?
不明白再问

qq305147332 发表于 2013-11-5 22:13:22

原来如此

woshiqinyikun 发表于 2013-11-6 14:09:24

就是防止在获取时间的时候,被中断打断了,所以刻意做的一个保护措施吧
页: [1]
查看完整版本: uc/OS-II中的OSTimeGet()有一点不明白,求教!!!