代码拉取完成,页面将自动刷新
#include "mf_mbtime.h"
#include "mf_mbconfig.h"
#include "mf_mb.h"
#include "mf_linklist.h"
//定时器链表
mf_link* time_link = NULL;
//从定时链表中连续获得定时器
uint8_t* mf_time_get(void)
{
static mf_link* link = NULL;
if(link_get_length(time_link) == 0)
{
return NULL;
}
if(link == NULL)
{
link = time_link->next; //第一个节点为空节点
}else
{
link = link->next;
if(link == time_link)
{
link = link->next;
}
}
return link->data;
}
//1ms中断调用刷新时间,建议使用定时器调用.
void mf_time_tick_inc(void)
{
for(uint8_t i = 0;i < link_get_length(time_link);i++)
{
Mf_Mb_Time_t* time = (Mf_Mb_Time_t*)mf_time_get();
if(time == NULL) continue;
if(time->running == MF_MB_TIME_START && time->trigger == MF_MB_TIME_UNTRIGGER)
{
time->real_time++;
if(time->real_time >= time->set_time)
{
time->real_time = 0;
time->trigger = MF_MB_TIME_TRIGGER;
time->trigger_number++;
}
}
}
}
//定时器停止计时
void mf_time_tick_stop(Mf_Mb_Time_t* time)
{
time->real_time = 0;
time->running = MF_MB_TIME_STOP;
time->trigger = MF_MB_TIME_UNTRIGGER;
}
//定时器开始计时
void mf_time_tick_start(Mf_Mb_Time_t* time)
{
time->real_time = 0;
time->running = MF_MB_TIME_START;
time->trigger = MF_MB_TIME_UNTRIGGER;
}
/*
*描述:获取定时器触发状态
*参数:time:定时器指针
*返回:0:没有触发 1:已触发
*/
uint8_t mf_time_get_trigger(Mf_Mb_Time_t* time)
{
if(time->trigger == MF_MB_TIME_TRIGGER)
{
mf_time_tick_stop(time);
return 1;
}
return 0;
}
/*
*描述:创建定时器
*参数:tick:定时时间ms
*返回:此定时器指针
*/
Mf_Mb_Time_t* mf_time_create(uint32_t tick)
{
if(time_link == NULL) //定时器链表判空
{
time_link = link_create(); //第一次创建定时器时,先创建定时器链表
if(time_link == NULL) return NULL;//初始化失败返回NULL
}
Mf_Mb_Time_t* time = (Mf_Mb_Time_t*)malloc(sizeof(Mf_Mb_Time_t)); //申请定时器内存
if(time == NULL) return NULL; //申请失败返回NULL
time->set_time = tick; //设置定时时间
time->running = MF_MB_TIME_STOP; //设置定时运行状态
time->trigger = MF_MB_TIME_UNTRIGGER; //设置定时触发状态
time->trigger_number = 0; //设置定时触发计数
link_tail_add(time_link,(uint8_t*)time,0); //添加定时器到定时器链表
return time; //返回创建出的定时器
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。