|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
0 B% R% F9 ?0 ^- ]3 u6 J8 V- J% ]$ a- K* n
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题+ t' x3 I. m" L8 I) q
该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
( P3 A% d! O' a3 {DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
* F5 @4 C% M9 R t# t R% S; n0 _5 O j, o+ s0 A
有如下需求$ L: M8 g" P1 c# h1 A
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态0 B# ^6 O" r) t# c$ y4 B
% ]" Q' |3 X! Y- D3 ?9 J- N
目前实现过程如下:
3 W1 j) `* b1 U; U/ E: e5 e: j! t1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件- q( S8 t4 k) U3 X
此时DSP通道1触发,则原程序就会结束通道2的阻塞. I' y' O3 k6 \" s' S! A
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
7 K. D0 _# v+ @. `9 B+ m9 o6 v2. 在整个查询的过程中arm一直阻塞,效率很低,3 J1 R6 z2 H* z- x/ f" E A
) | M, F' X& q( k9 r
能不能有如下方式实现?8 Z3 \$ e" y H% H0 z* `0 `
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情0 ?' j; Z7 q1 d2 N3 G
9 Q$ p: G9 x& K, h" @# K, \
- p0 B0 X& c! S% d( }" c+ F
' m$ J0 A$ d7 u: N$ w
|
|