|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 7 }& I1 l7 ?. a/ y9 }& r1 r+ z
2 ^+ }- J1 m8 s) V }在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题5 C- @: B* b5 D. P
该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用; r" Y8 }4 x3 ]% H
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
" }2 u2 R$ P7 e2 O6 | b$ X% S' x6 d8 X7 Y/ ]4 U& S
有如下需求
* m' f/ j2 O) Z/ u& gARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
! u! i" T: g- G8 B% o$ M5 x4 u y: ~9 H
目前实现过程如下:
1 w. S0 h! G* d- q1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件" B* {% w9 E; ~
此时DSP通道1触发,则原程序就会结束通道2的阻塞
( `& v5 s1 ^% Z6 b# p- w8 c9 S然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
' c/ c Q# |# Q7 G1 p/ ^2. 在整个查询的过程中arm一直阻塞,效率很低,0 Q2 a0 {5 A# P2 V: l- W+ \* P
- P1 `8 A" X* c
能不能有如下方式实现?- q6 A; K @3 s7 m6 b2 K& l
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情* P! N' ?) A6 e4 h* V* Z+ o6 d6 z
1 f9 d7 B- {5 _) j' A' I
6 Q4 [# \- \+ ]9 }4 B) w% J0 A/ L/ E4 @8 T- |
|
|