|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
& z0 \4 q0 l; `: p9 o, \5 S1 P5 D) P1 q* T3 ]- x9 |
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
* C* n/ S0 t$ x; w, k+ J; ~该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用# j' q+ O# a5 }0 w$ p
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号$ T. [$ R1 W! h2 o* L- {
& c7 W1 p3 E" g. Y有如下需求; i/ G3 }2 \ V! {
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态! P# J, B v2 d
/ z) Q* [4 |0 y Z) j. @. P8 _+ ?
目前实现过程如下:
+ ?$ _5 N6 H, R1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件* |" ]# n4 x8 C/ K) w" @2 v7 q
此时DSP通道1触发,则原程序就会结束通道2的阻塞$ R% `# h; ]4 S+ ?. G: f7 q$ o
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
0 D! R1 |% g$ R6 K, U- T- I3 _2. 在整个查询的过程中arm一直阻塞,效率很低,3 G$ f" Y. g6 G9 s5 y- g
- \; |4 w/ P6 V0 ^; f
能不能有如下方式实现?. n; u9 e* p' H9 K/ |- S" B
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情4 p) n% J+ |7 l+ F% z; [9 K
5 r+ h- x& p7 I/ O, c! L' y/ p) s; O6 d+ `6 f Z0 g3 ~; j( Z5 B
4 k5 F, U/ A$ q( M" F |
|