初来乍到,意外弄了一份代码,还挺好用。懂的朋友拿走,废话不多说直接撸代码!- #include "timesysto.h"
% s N i7 f' C/ F" b0 \0 l5 T - 7 \3 O6 U# A, z1 x/ M5 m% T
- struct Timer timer1;+ C6 {& M% c) x7 F9 O/ x
- struct Timer timer2;
0 I: G$ u) @) C - ' d0 y! y: f& N2 k. W
- void timer1_callback()- c6 n# S: ?) H, P$ @
- {6 M4 U1 x0 Q! F* p9 }. R( O" d2 W8 U
- printf("timer1 timeout!\r\n");" y/ X5 i+ m$ B' q/ u+ Q! F J
- }; K& p% L) m! q9 a
- / C& @$ j7 p, S
- void timer2_callback()5 @1 }" z! Z, a' m% Y: u
- {! c0 h) o) ?' z S2 v) h& X
- printf("timer2 timeout!\r\n");
7 w8 z+ \! S% }- E- @3 G. s - }
! m( R( S+ p* W" t
3 @/ k V4 L# ^3 j, V& a- int main()
% _, E6 I8 U4 m t8 |8 g, f - {. _- u& O4 ]! j: g" r9 c: P p- ^7 l
- timer_init(&timer1, timer1_callback, 1000, 1000); //1s loop
7 n, ^4 |( [! }% @ - timer_start(&timer1);
# r0 G! a4 Y1 i7 Q6 b* n -
" b7 f6 d9 `" [+ B2 ~& | - timer_init(&timer2, timer2_callback, 50, 0); //50ms delay
- K# o+ T4 J7 s' \2 G C% e - timer_start(&timer2);
: I; o+ c( h& k/ @) y: f9 d0 q! J - & Y$ B" n8 C# l: ? O& I. h6 v3 m, H% [
- while(1) {
8 O) a6 K3 F9 G: \ ? -
5 ]: j/ ]! x# v3 l+ ~ - timer_loop();
9 D5 Y5 w! Z; }! g' z u' l+ H( ^ - }4 z" V, u& l/ @% T
- }
/ }# }1 E( [+ y- K) z5 k) r: F
复制代码 7 A+ D% j& A; O, Y; ?
. x! h8 I; C& @ |
这个定时器模块在amobbs看过。1 y* p4 }' h8 v( n2 E- H5 [" X
原理就是使用单链把所有用户定时器串联起来!
其实个人觉得应该加多一个尾链比较好!因为每次增加一个定时器,你必须要查询到链的末端才能完成init6 K: s, e. \! u Q4 Q
功能,如果加多一个尾节点,只需要对尾节点的前一个链的末端进行接驳就好了!
谢谢建议,意外收获自阿莫,你说的那个我也有,过段时间发
看好,共用一个
另外一份完善一些的代码你有吗?麻烦发一下,谢谢谢谢