|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
2 P. A* w& C4 ~- ^9 T a5 G& n. w5 K4 c; i/ u% x
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
8 O5 N$ O# h7 c. e. w6 N该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
" j' O/ I! r9 L7 LDSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
. [3 l. O6 f7 [
( i- F$ Y' ~0 R. |1 U+ E有如下需求4 E1 ] [$ [, A- {
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态' | l, s% e8 J5 X2 @+ G
2 h- ?, ~2 G; }1 p2 Y4 P$ q4 T
目前实现过程如下:, j7 e1 I5 \% a$ i. w# C$ b
1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件8 E# m: ~! \0 N, @2 `, S. N2 k
此时DSP通道1触发,则原程序就会结束通道2的阻塞# |3 d/ }6 p' v6 N6 H0 l/ A
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
9 Z, u/ R& @, _; A2. 在整个查询的过程中arm一直阻塞,效率很低,
+ J/ o; n {- A# j* Z$ q, z/ F' K
能不能有如下方式实现?4 \0 D* e- \: C- r3 ^6 |3 e
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
4 j( Q a) O7 e0 y) H8 K, C. S- W- J( B, g( W
l4 s) N" `5 l( D; `1 G1 [+ J. Y6 X* `4 w- l; @. U
|
|