非阻塞式延时是指程序在执行延时函数时可以继续执行其他任务,不会一直等待。
E_Bool Ticker_Out(u32 *pTicker, u32 uCompareValue)
{
u32 uTicks = 0;
uTicks = BSP_Get_SysTick();
if(0 == uCompareValue)
{
*pTicker = uTicks;
return True;
}
else
{
if(uTicks >= (*pTicker))
{
uTicks = uTicks - (*pTicker);
}
else
{
uTicks = (U32_MAX_VALUE - (*pTicker)) + uTicks;
}
if (uTicks >= uCompareValue)
{
return True;
}
}
return False;
}
上述代码中,BSP_Get_SysTick()是得到在滴答定时器中断函数中计数的值:
u32 BSP_Get_SysTick(void)
{
return gSystickTimes; /* 获取系统心跳 */
}
void SysTick_Handler(void)
{
gSystickTimes++; /* 系统心跳计数 */
}
int main()
{
E_Bool eState = False;
static u32 uSampleTicker = 0;
while(1)
{
eState = Ticker_Out(&uSampleTicker, 500);
if(True == eState)
{
Ticker_Out(&uSampleTicker, 0);
LED_ON();
}
}
}
|