stm8s电机库vtimer_SetTimer()函数的使用

作用就是在延时msec的时间后,调用pCallback指向的函数。

注:这个延时并不是在原地等着延时完毕再去调用,和deley_ms()这样的延时是有区别的。

函数原型在MC_vtimer.c文件中

void vtimer_SetTimer(VtimerName_t name,timer_res_t  msec,void* pCallback)
{
sVtimer[name].msec = msec;
sVtimer[name].pCallback = pCallback;
}

第一眼看到这个函数原型的时候还是一脸懵逼,这都是啥?

实际上电机库中还有一个定时器是专门与之相关的。dev_vtimerInit()初始化函数中将TIM6设置为定时器中断,中断函数如下:

@far @interrupt void TIM6_UPD_OVF_TRG_IRQHandler(void)
{
TIM6_ClearITPendingBit(TIM6_IT_UPDATE);
vtimer_UpdateHandler();
return;
}/* 

在中断中会调用vtimer_UpdateHandler();这个函数,关键的地方来了,这个函数原型也在MC_vtimer.c文件中。函数原型如下:

void vtimer_UpdateHandler(void)
{
//Enter each DELTAT_MS ms
u8 i;

for (i = 0; i < VTIMER_NUM; i++)
{
if (sVtimer[i].msec != 0)
{
sVtimer[i].msec--;
if (sVtimer[i].pCallback != 0)
{
if (sVtimer[i].msec == 0) 
{
((PFN_Callback_t)sVtimer[i].pCallback)();
}
}
}
}
}

这下弄明白了吧,定时器6实际上被当做一个心跳作用了(不知道这样形容对不对),每跳一次就进来做一下for循环,直到msec等于0,(PS:这个msec就是你自己设置的延时时间),然后调用你设置好的要去调用的函数。

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值