Ai
2 Star 10 Fork 7

wdliming/MultiTimer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
multi_timer.c 2.30 KB
一键复制 编辑 原始数据 按行查看 历史
wdliming 提交于 2021-06-16 22:06 +08:00 . 代码美化
/*
* Copyright (c) 2016 Zibin Zheng <znbin@qq.com>
* All rights reserved
*/
#include "multi_timer.h"
//timer handle list head.
static struct Timer* head_handle = NULL;
//Timer ticks
static uint32_t _timer_ticks = 0;
/**
* @brief Initializes the timer struct handle.
* @param handle: the timer handle strcut.
* @param timeout_cb: timeout callback.
* @param repeat: repeat interval time.
* @retval None
*/
void timer_init (struct Timer* handle, void (*timeout_cb) (), uint32_t timeout, uint32_t repeat)
{
// memset(handle, sizeof(struct Timer), 0);
handle->timeout_cb = timeout_cb;
handle->timeout = _timer_ticks + timeout;
handle->repeat = repeat;
}
/**
* @brief Start the timer work, add the handle into work list.
* @param btn: target handle strcut.
* @retval 0: succeed. -1: already exist.
*/
int timer_start (struct Timer* handle)
{
struct Timer* target = head_handle;
while (target)
{
if (target == handle)
{ return -1; } //already exist.
target = target->next;
}
handle->next = head_handle;
head_handle = handle;
return 0;
}
/**
* @brief Stop the timer work, remove the handle off work list.
* @param handle: target handle strcut.
* @retval None
*/
void timer_stop (struct Timer* handle)
{
struct Timer** curr;
for (curr = &head_handle; *curr;)
{
struct Timer* entry = *curr;
if (entry == handle)
{
*curr = entry->next;
// free(entry);
}
else
{ curr = &entry->next; }
}
}
/**
* @brief main loop.
* @param None.
* @retval None
*/
void timer_loop()
{
struct Timer* target;
for (target = head_handle; target; target = target->next)
{
if (_timer_ticks >= target->timeout)
{
if (target->repeat == 0)
{
timer_stop (target);
}
else
{
target->timeout = _timer_ticks + target->repeat;
}
target->timeout_cb();
}
}
}
/**
* @brief background ticks, timer repeat invoking interval 1ms.
* @param None.
* @retval None.
*/
void timer_ticks()
{
_timer_ticks++;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/liming2019/MultiTimer.git
git@gitee.com:liming2019/MultiTimer.git
liming2019
MultiTimer
MultiTimer
master

搜索帮助