From c59db9c949d5310ffa0e41a421268ff3a74341c1 Mon Sep 17 00:00:00 2001 From: 0x1abin <270995079@qq.com> Date: Fri, 23 Sep 2016 07:30:18 +0000 Subject: [PATCH] v0.50 --- README.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++++ examples/main.c | 33 ++++++++++++++++++++ multi_timer.c | 4 +-- multi_timer.h | 5 ++- 4 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 README.md create mode 100644 examples/main.c diff --git a/README.md b/README.md new file mode 100644 index 0000000..f0ce437 --- /dev/null +++ b/README.md @@ -0,0 +1,83 @@ +# MultiTimer + +## 简介 +MultiTimer 是一个软件定时器扩展模块,可无限扩展你所需的定时器任务,取代传统的标志位判断方式, 更优雅更便捷地管理你程序的时间触发时序。 + +## 使用方法 +1.先申请一个定时器管理handle + +``` +struct Timer timer1; +``` +2.初始化定时器对象,注册定时器回调处理函数,设置定时时间(ms),循环定时触发时间 + +``` +timer_init(struct Timer* handle, void(*timeout_cb)(), uint32_t timeout, uint32_t repeat); +``` + +3.启动定时器 + +``` +timer_start(&timer1); +``` +4.设置1ms的硬件定时器循环调用 *timer_ticks()* 以提供时间基准 + +``` +void HAL_SYSTICK_Callback(void) +{ + timer_ticks(); +} +``` + + +5.在主循环调用定时器后台处理函数 + +``` +int main() +{ + ... + while(1) { + ... + timer_loop(); + } +} +``` + +## Examples + +``` +#include "multi_timer.h" + +struct Timer timer1; +struct Timer timer2; + +void timer1_callback() +{ + printf("timer1 timeout!\r\n"); +} + +void timer2_callback() +{ + printf("timer2 timeout!\r\n"); +} + +int main() +{ + timer_init(&timer1, timer1_callback, 1000, 1000); //1s loop + timer_start(&timer1); + + timer_init(&timer2, timer2_callback, 50, 0); //50ms delay + timer_start(&timer2); + + while(1) { + + timer_loop(); + } +} + +void HAL_SYSTICK_Callback(void) +{ + timer_ticks(); //1ms ticks +} +``` + diff --git a/examples/main.c b/examples/main.c new file mode 100644 index 0000000..6d51773 --- /dev/null +++ b/examples/main.c @@ -0,0 +1,33 @@ +#include "multi_timer.h" + +struct Timer timer1; +struct Timer timer2; + +void timer1_callback() +{ + printf("timer1 timeout!\r\n"); +} + +void timer2_callback() +{ + printf("timer2 timeout!\r\n"); +} + +int main() +{ + timer_init(&timer1, timer1_callback, 1000, 1000); //1s loop + timer_start(&timer1); + + timer_init(&timer2, timer2_callback, 50, 0); //50ms delay + timer_start(&timer2); + + while(1) { + + timer_loop(); + } +} + +void HAL_SYSTICK_Callback(void) +{ + timer_ticks(); //1ms ticks +} \ No newline at end of file diff --git a/multi_timer.c b/multi_timer.c index a7ef772..76e811a 100644 --- a/multi_timer.c +++ b/multi_timer.c @@ -62,7 +62,7 @@ void timer_stop(struct Timer* handle) } /** - * @brief background ticks, timer repeat invoking interval 5ms. + * @brief main loop. * @param None. * @retval None */ @@ -84,7 +84,7 @@ void timer_loop() /** * @brief background ticks, timer repeat invoking interval 1ms. * @param None. - * @retval None + * @retval None. */ void timer_ticks() { diff --git a/multi_timer.h b/multi_timer.h index 223f98a..55cf42c 100644 --- a/multi_timer.h +++ b/multi_timer.h @@ -7,13 +7,12 @@ #define _MULTI_TIMER_H_ #include "stdint.h" -#include "string.h" typedef struct Timer { uint32_t timeout; uint32_t repeat; - void (*timeout_cb)(void); - struct Timer* next; + void (*timeout_cb)(void); + struct Timer* next; }Timer; #ifdef __cplusplus