定時器分為硬體定時器和軟體定時器,硬體定時器個數是硬體特性,與採用的mcu有關,軟體定時器理論可以無限擴充套件,主要受mcu的ram大小限制,易移植到任何平台,本文基於multitimer改寫的軟體定時器,跟multitimer差不多,水平有限,不足之處請諒解!!
以下**在vs中驗證過;
標頭檔案
#ifndef __multi_timer_h__
#define __multi_timer_h__
#define timer_debug
typedef
unsigned
char time_tick_type;
typedef
void
(*timeout_cb_typedef)
(void*)
;typedef
struct timer_typetimer_typedef;
#define timer_mode_single (0)
#define timer_mode_repeat (1)
void
timer_init
(timer_type* handle, time_tick_type timeout, time_tick_type repeat, timeout_cb_typedef cb,
void
* context)
;void
timer_start
(timer_type* handle)
;void
timer_stop
(timer_type* handle)
;int
timer_isrun
(timer_type* handle)
;void
timer_loop
(void);
void
timer_ticks
(void);
#ifdef timer_debug
void
timer_print
(void);
#endif
#endif
c檔案
#include
"multi_timer.h"
static timer_type *s_timer_headnode = nullptr;
static time_tick_type s_timer_tick =0;
void
timer_init
(timer_type *handle, time_tick_type timeout, time_tick_type repeat, timeout_cb_typedef cb,
void
*context)if(
!cb)
handle->timeout = timeout;
handle->repeat = repeat;
handle->timeout_cb = cb;
handle->context = context;
handle->next = nullptr;
}void
timer_start
(timer_type* handle)
if(s_timer_headnode == nullptr)
while
(node->next)
node = node->next;
} handle->next = nullptr;
node->next = handle;
node->tick = s_timer_tick;
}void
timer_stop
(timer_type* handle)
else
return;}
front_node = node;
node = node->next;}}
inttimer_isrun
(timer_type* handle)
node = node->next;
}return0;
}void
timer_loop
(void)if
(node->repeat == timer_mode_single)
//單次}}
}void
timer_ticks
(void
)#ifdef timer_debug
#include
void
timer_print
(void
)printf
("-------------------\r\n");
}#endif
nrf 軟體定時器
52810的軟體定時器建立在乙個rtc的基礎上,使用乙個rtc計時。rtc作為乙個發動機一直在跑。rtc以tick為單位進行中斷觸發,每增加乙個tick就來一次中斷,中斷到來之後就和佇列預期的tick值比較,如果一樣就執行時鐘handler。所有的時鐘都是按照壓入乙個鐘佇列內進行處理。當create...
設計軟體定時器
在mcu晶元內部,往往硬體定時器的數量是非常有限的,而實際工程中卻需要大量的定時器來輔助完成具體的功能,如果乙個函式占用乙個定時器,那麼顯然不夠用,怎麼辦?思路有2種 1 直接將開源嵌入式作業系統的軟體定時器搬來使用 2 自己設計軟體定時器 這裡我只介紹第二種方法,我們知道,硬體定時器是通過對系統時...
簡單軟體定時器
軟體定時器 在嵌入式開發中,定時器是及其常見的,但考慮到晶元外設資源有限,可以自己寫乙個軟體定時器,應用於對計時不是太嚴格的場合,比如led的閃爍,定時處理某一任務等等。該軟體定時器的原理是基於滴答系統時鐘中斷,在中斷中獲得時間基,該時間基可由使用者自由設定。另外有兩種方式可以實現軟體定時處理功能,...