|
C語言寫的定時(shí)器回調(diào)函數(shù),可以移植到任何有定時(shí)器的單片機(jī)上,只要設(shè)置單片機(jī)定時(shí)器1ms中斷,這樣在主循環(huán)中定時(shí)時(shí)間到了就會(huì)調(diào)用相應(yīng)的函數(shù),這樣我們就有了無數(shù)個(gè)軟件定時(shí)器使用,軟件定時(shí)器可以啟動(dòng),停止,一次性的。從別的網(wǎng)站下載的,分享給大家。具體參考附件程序。
單片機(jī)源程序如下:
- /*
- * multi_timer.c
- *
- * Created on: 20161229
- * @Author : 曉宇 <karaxiaoyu@gmail.com>
- * @id : 芯片之家
- * @version :V1.0.0
- */
- #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++;
- }
復(fù)制代碼
所有資料51hei提供下載:
MultiTimer.rar
(2.14 KB, 下載次數(shù): 64)
2018-7-15 16:18 上傳
點(diǎn)擊文件名下載附件
定時(shí)器回掉函數(shù)
|
評(píng)分
-
查看全部評(píng)分
|