|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 * p% t& F# @. d) |: }2 R6 e& ~- c4 O; `0 t
# M5 a! r$ \+ O. e; p& r1 G在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
+ R T7 Z* a9 T( r0 w, f+ o: O" Y该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用+ h/ M4 I$ g' e4 e/ ]2 ~# O" x' Y+ E
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
/ b5 Z% V( R1 k6 l, a( X: D6 N$ p7 Q
. `/ n2 J5 Q9 |2 l; x有如下需求/ e: Y! z# ]1 @) c. k$ l
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态: C# C1 z1 ?/ R/ N8 [" t
: D' n `/ @ X( `
目前实现过程如下:
' R8 R- I2 \ J# W5 T, R5 \1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
, z9 \' {3 U4 g7 \' H此时DSP通道1触发,则原程序就会结束通道2的阻塞" y" h3 } q( v
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------; F& g; j0 o7 E6 I0 l
2. 在整个查询的过程中arm一直阻塞,效率很低,6 j2 h s6 z8 e: c! L( e' A0 a
: W4 r2 A) ~$ Z$ U9 E1 B) Z8 @8 X- h能不能有如下方式实现?
' b4 c. ]" [2 M初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
* f% T. X& m S- o$ |3 G6 `% O. e5 v7 F+ K/ Z8 _* G
; }% o) s5 X0 r. y% y3 ?* A% m- y, F k# P9 p& V6 N) e
|
|