|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 , _9 ^+ D' X- J, L e
3 `1 `; r8 f/ q5 U9 x: ]2 ^在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题1 [4 C: X& U6 Q: W6 E1 J# Z W
该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
, v% U* s0 K, E. ~. m, ?+ X0 A; LDSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
* r( k! ^1 l. k1 d% l Q7 P+ a* H) x
有如下需求
4 \. E* {# m9 dARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
6 ?5 x4 }. `% d8 V3 y6 b1 |( s! i9 i* y/ n8 S/ n: D% m+ g5 W
目前实现过程如下: Z6 X- B7 v( K$ E7 {! }' N
1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
) Z$ m, @2 _7 \1 Z2 l+ Z8 d& B此时DSP通道1触发,则原程序就会结束通道2的阻塞
; u* {3 r/ }4 |+ B然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
$ K0 `3 K. W& X9 |0 ]0 A, T+ l2. 在整个查询的过程中arm一直阻塞,效率很低,
. s/ a j8 {0 [# F. s/ @' w; S' G) k- r8 t7 B, S$ P H# p
能不能有如下方式实现?
; U0 V' y; h' U E" l初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情( D1 O+ X4 ]( f- x" q- B
; X% y. p. i6 m' d2 G* i% A
% }* Z! v! ]! L: t6 C2 R# F5 L/ t) _) G+ A
/ Y" ~( f) R( v6 l |
|