VS2010中模拟UCOS的TICK的方法

参考 https://www.cnblogs.com/smulngy/p/8426310.html

/********************************************************
利用OSTickW32的WaitForSingleObject(OSTickEventHandle, 1000) 产生TICK为1秒的时钟,并调用OSTickISR.

OS_TIMER的周期为1S, 此外系统TICK也是1S

********************************************************/

 

DWORD WINAPI OSTickW32(LPVOID lpParameter)
{
    OS_INIT_CRITICAL();

    while (!OSTerminateTickW32)
    {
        OSTickISR();
#ifdef WIN_MM_TICK
        if (WaitForSingleObject(OSTickEventHandle, 1000) == WAIT_TIMEOUT)
        {
#ifdef OS_CPU_TRACE
            OS_Printf("Error: MM OSTick Timeout!\n");
#endif
        }

        ResetEvent(OSTickEventHandle);
#else
        Sleep(1000 / OS_TICKS_PER_SEC);
#endif
    }

    return 0;
}

 

------------------------------------------------------------------------

void OSTickISR()
{
    OSIntEnter();
    OSTimeTick();
    OSIntExit();
}

-----------------------------------------------------------

#if (OS_CPU_HOOKS_EN > 0) && (OS_TIME_TICK_HOOK_EN > 0)
void  OSTimeTickHook (void)
{
#if OS_TMR_EN > 0
    OSTmrCtr++;
    if (OSTmrCtr >= (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC)) {
        OSTmrCtr = 0;
        OSTmrSignal();
    }
#endif
}
#endif


版权声明:本文为forlifefor原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。