参考 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