軟體定時器基於MultiTimer改寫

2021-10-10 16:35:40 字數 2372 閱讀 9557

定時器分為硬體定時器和軟體定時器,硬體定時器個數是硬體特性,與採用的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的閃爍,定時處理某一任務等等。該軟體定時器的原理是基於滴答系統時鐘中斷,在中斷中獲得時間基,該時間基可由使用者自由設定。另外有兩種方式可以實現軟體定時處理功能,...