rt-thread的定时器管理源码分析(五)
*parameter),
void *parameter,
rt_tick_t time,
rt_uint8_t flag)
{
struct rt_timer *timer;
/* allocate a object */
timer = (struct rt_timer *)rt_object_allocate(RT_Object_Class_Timer, name);//动态分配定时器内核对象
if (timer == RT_NULL)
{
return RT_NULL;
}
_rt_timer_init(timer, timeout, parameter, time, flag);//调用上述的初始化接口
return timer;
}
4.2 脱离和删除
脱离:
[cpp]
/**
* This function will detach a timer from timer management.
*
* @param timer the static timer object
*
* @return the operation status, RT_EOK on OK; RT_ERROR on error
*/
rt_err_t rt_timer_detach(rt_timer_t timer)
{
register rt_base_t level;
/* timer check */
RT_ASSERT(timer != RT_NULL);
/* disable interrupt */
level = rt_hw_interrupt_disable();//关中断
/* remove it from timer list */
rt_list_remove(&(timer->list));//从定时器链表中移除
/* enable interrupt */
rt_hw_interrupt_enable(level);//开中断
rt_object_detach((rt_object_t)timer);//脱离内核对象
return -RT_EOK;
}
删除动态创建的定时器
[cpp]
/**
* This function will delete a timer and release timer memory
*
* @param timer the timer to be deleted
*
* @return the operation status, RT_EOK on OK; RT_ERROR on error
*/
rt_err_t rt_timer_delete(rt_timer_t timer)
{
register rt_base_t level;
/* timer check */
RT_ASSERT(timer != RT_NULL);
/* disable interrupt */
level = rt_hw_interrupt_disable();//关中断
/* remove it from timer list */
rt_list_remove(&(timer->list));//从定时器链表中移除
/* enable interrupt */
rt_hw_interrupt_enable(level);//开中断
rt_object_delete((rt_object_t)timer);//删除动态创建的定时器内核对象
return -RT_EOK;
}
4.3 启动定时器
[cpp]
/**
* This function will start the timer
*
* @param timer the timer to be started
*
* @return the operation status, RT_EOK on OK, -RT_ERROR on error
*/
rt_err_t rt_timer_start(rt_timer_t timer)
此接口已在上面介绍软件定时器模式时已有分析,这里就不再重复了。
4.4 停止定时器
[cpp]
/**
* This function will stop the timer
*
* @param timer the timer to be stopped
*
* @return the operation status, RT_EOK on OK, -RT_ERROR on error
*/
rt_err_t rt_timer_stop(rt_timer_t timer)
{
register rt_base_t level;
/* timer check */
RT_ASSERT(timer != RT_NULL);
if (!(timer->parent.flag & RT_TIMER_FLAG_ACTIVATED))//如果定时器已经为非激活状态
return -RT_ERROR;
RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(timer->parent)));//使用钩子函数
/* disable interrupt */
level = rt_hw_interrupt_disable();//关中断
/* remove it from timer list */
rt_list_remove(&(timer->list));//从定时器链表中移除
/* enable interrupt */
rt_hw_interrupt_enable(level);//开中断
/* change stat */
timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;//置非激活状态
return RT_EOK;
}
4.5 控制
此接口是用来修改一个定时器的参数,如下代码:
[cpp]
/**
* This function will get or set some options of the timer
*
* @param timer the timer to be get or set
* @param cmd the control command