|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
# k' B# S8 Q$ N' _0 K% Y( ^# V: Z# E2 R+ F
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题+ a' s; m. {: G. ^" ?7 C
该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
, I Q: [5 k: R4 Q: H4 cDSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
2 Z3 E: e5 B* C$ i
: S, L$ `* Y9 }) s! P# r有如下需求
1 `$ p/ C5 i7 R4 a" f3 f. Q" e1 ^ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
2 v* N+ s# P% r. q
2 l3 d n2 m, o% r; H目前实现过程如下:! n7 o8 r' k$ w" ]9 L" ?+ }
1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件' @* Z9 r1 R! X7 _- g6 u
此时DSP通道1触发,则原程序就会结束通道2的阻塞
% f6 B$ G: ~+ Y8 D/ e. O M然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------. ?: e# J7 t9 Y( q' r6 {
2. 在整个查询的过程中arm一直阻塞,效率很低,/ k$ s5 D& r, F* M) t
. N/ s3 b: Z( m5 Q. b
能不能有如下方式实现?
p5 j" ^* x6 g+ X8 {初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情( ~$ V4 w& @7 [+ T* \& e" Z
7 j2 K6 ]1 S0 x7 w8 V ? a8 _ \5 P% J* p' n6 M
3 n0 ~6 i: N% y+ G" |$ r0 `' e/ |
|
|