|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
disable_irq与disable_irq_nosync使用场景
6 B) P) l3 l+ w" o
! r, K, h! k: Q3 j Linux设备驱动,关于中断屏蔽有两个接口:disable_irq和disable_irq_nosync,该两接口使用场景如下:
3 a7 B' A1 O9 c8 d0 E, Y% C/ u2 F! [& Q; o% C" N( @7 ~
1、disable_irq:在非中断处理函数中使用,会阻塞;
# G( J6 q& \; m! Q' e
) ~% ~$ z- E* Y$ I 2、disable_irq_nosync:在中断处理函数中使用,不会阻塞;用于屏蔽相应中断;
$ E$ r: X/ ~' X! t7 y9 d2 {0 F4 i4 c$ \' q' q4 _. o2 r
一、为什么要屏蔽中断?
, q* {! t8 k5 D: |# Z7 I, h+ u" O9 [/ K
使能中断后,一旦触发中断,系统会进入中断处理函数;如果下一个中断触发的时候,前一个中断处理函数已经完成,这是理想状态,不会发生异常;如果前一个中断处理函数还未完成,那么就会导致中断嵌套。为了不出现中断嵌套,必须在中断处理函数中屏蔽中断,待中断处理完成后,再主动使能中断。7 h9 N! x& G6 ~: Y2 V# o
( T. t( \( S9 C, Q* ^; }5 ?3 e/ X二、disable_irq不能放在中断处理函数中1 A( |3 c) j# B1 B. x3 E" z y
9 C% E' Z6 W. K; V7 h
# }1 ~2 J1 \" Q. c9 \& r8 V
y# I: w2 i l3 G. H- s4 e, ~
) E/ R8 f/ m. [1 w& q- {/ G% q' x6 K$ P1 v+ G' w
& X- z1 r0 V2 ?' ?# }1 {/ _ |
|