|
|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
4 o+ n8 _& j" I' m9 {# M8 x% T6 d( ^$ j5 J
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
& Q# @" a# Z1 ?' ?" }4 K8 C0 X3 Q- X+ U+ Q该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
( ~4 V2 [0 J: b/ Q9 SDSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号9 n- m1 s" s G7 @
0 z0 d& F: e$ w K; ^有如下需求% @3 p# U5 R7 o9 W* a6 H
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态7 m# ]9 }4 l6 B: ?
2 D- @3 r; @( r( c& {9 W4 ]
目前实现过程如下:! W( z7 e! }! P
1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
( p4 |9 h9 b$ V/ ~此时DSP通道1触发,则原程序就会结束通道2的阻塞
- R- I$ n+ }# Y7 `然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------. d; M( |: l) x' Y* P- ?
2. 在整个查询的过程中arm一直阻塞,效率很低,3 w, a8 w0 J( _, j, o z2 }9 N' I
4 [; u' |) i; w, Q) K' ?- w+ j
能不能有如下方式实现?1 w8 }* X4 x8 E* e; R! E
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
4 H1 j- _% x+ w: K& c/ F( m7 d# n4 ~! s3 E" c4 J' v
) b s5 P' a i- \* R3 k! y/ q
- y6 i9 H* ~4 i9 t: i$ X& I
|
|