2 Star 2 Fork 2

Actor_V / MF_Modbus

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
mf_mbtime.c 2.16 KB
一键复制 编辑 原始数据 按行查看 历史
#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; //返回创建出的定时器
}
C
1
https://gitee.com/Actor_V/mf_modbus.git
git@gitee.com:Actor_V/mf_modbus.git
Actor_V
mf_modbus
MF_Modbus
V1.0

搜索帮助