|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 + ^7 K8 ~# a; f1 F4 s {' \
8 j1 g8 e+ y# _# ]7 O7 v# q7 h在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题6 y5 U8 t- R5 n) r- [8 M W
该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用; }; T: n5 B; Z3 M4 E+ u% C A9 S
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号8 z, i2 \$ I5 q1 z7 ?2 ~
' H4 @0 }, J6 O: r2 T
有如下需求
9 C* V; z. X7 [* I0 fARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
6 m! K9 Q9 R1 U6 d( l- Z0 E; @) C% w6 q% p" P
目前实现过程如下:
) ?% {3 s' o, A1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件; C* L$ C: {' m2 |3 w/ ]
此时DSP通道1触发,则原程序就会结束通道2的阻塞* g- r/ B2 B" p' n* \1 n
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
4 Y' V' t- w. A( r2. 在整个查询的过程中arm一直阻塞,效率很低,* U9 u( `/ ?, o! G
# C! B# Y! q3 V+ {
能不能有如下方式实现?1 ~, `# `- D/ t: z2 |+ q; F
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
7 \/ W8 |* F) W7 }1 r4 ?4 O/ d' N4 D6 S' K6 D" U
$ R) J; S9 i+ O" P" w- g
/ b; J5 t% C* g* Q6 c |
|