|
|
用来控制挂起时间的。例如你主动调用delay或者阻塞于获取信号量等都会用到这个定时器。截取了一段信号量获取函数中的源码:8 J* w) |0 A$ Q$ ]+ X5 s0 Y* ?
`' P E% c l# Y* W/ L4 }
/ start /' j8 A* p% ]# i; Z% A( S( L& G( |
rt_ipc_list_suspend(&(sem->parent.suspend_thread),
. L+ S" [" r* L( Z$ j: rthread,( c5 f- |& D7 ]( |' u
sem->parent.parent.flag);
3 y/ K: g% U' ~7 _- ~0 |+ J
6 W1 h" s0 k5 B6 I! J/* has waiting time, start thread timer */
& n+ R9 u* x, s% ?& R. K' Dif (time > 0)
1 s3 x, R6 J9 P3 ^" k, N2 ?{
r7 |; G1 d0 D; J. @RT_DEBUG_LOG(RT_DEBUG_IPC, ("set thread:%s to timer list\n",) ?$ G8 l' _$ S( h8 f: p
thread->name));
. |# W9 R e8 m: M, g' i. b' w; m) q/* reset the timeout of thread timer and start it */+ f% C/ ?# K( ~
rt_timer_control(&(thread->thread_timer),% F! I v8 }, E* q/ V2 o/ W
RT_TIMER_CTRL_SET_TIME,
) r- K; |; m* n& r9 A9 J&time);. `& [, a% H0 ?* q" {
rt_timer_start(&(thread->thread_timer));2 j I9 V. _$ a7 R; U7 X& s
}
: a0 g% _) y/ d& j8 K' V# C/* enable interrupt */
B3 N1 `9 S; y: w$ Rrt_hw_interrupt_enable(temp);
! O! B' e) m& X8 O3 ~/* do schedule */
% a3 T/ X! _4 B6 k" Yrt_schedule(); rt_ipc_list_suspend(&(sem->parent.suspend_thread),$ [$ B3 M" B" i6 E( N' w B
thread,8 V+ b1 T w3 t U5 Y; a. g
sem->parent.parent.flag);& F: c7 B! u3 Z- R1 y0 a* Z
/* has waiting time, start thread timer */
y3 W0 a5 b6 d% [if (time > 0)
+ l0 i; q3 l2 B' Q, i [/ p7 ?8 Q{
8 F0 b2 T$ E; k- L+ ?% F4 ^RT_DEBUG_LOG(RT_DEBUG_IPC, ("set thread:%s to timer list\n",& d7 o1 D' t$ h) M9 ~' p. |0 |
thread->name));
1 R# I5 d4 q. M$ u* y5 t |/* reset the timeout of thread timer and start it */
, `, k3 e# a8 z; Srt_timer_control(&(thread->thread_timer),0 v9 \+ m* s0 Y* Q, u; ^9 d
RT_TIMER_CTRL_SET_TIME,
7 A9 N0 @* _: K; j K$ g6 C&time);+ y0 |3 n; L, \5 d3 v9 i
rt_timer_start(&(thread->thread_timer));2 \0 \8 R: M3 q5 i# K3 H* [& w3 w
}& f) F# `" A* p
/* enable interrupt */0 N# D8 u. b9 H; P
rt_hw_interrupt_enable(temp);" [: x* n- O8 s! B; ?/ w* R
/* do schedule */
. e" B) e$ }2 f) mrt_schedule();`. n- l1 i) O7 Q {$ [
|
|