|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
, b# c" D/ x# `: Q" P& D9 i7 ^% }; F' _5 @' z
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题* G1 U9 K& z6 f5 k. [
该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
& P. r Q6 w8 D' J9 k& w; j# VDSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
. c$ x0 p4 T% \4 w; g- f
! B5 q4 L- ~1 I) d8 u# M( \有如下需求! d/ c) m$ y; b5 h3 q* p& i7 e: A
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
9 }6 j; f3 g6 s9 I
7 M) s7 m+ C# b/ F; x目前实现过程如下:- y8 W1 _: j3 j
1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件# s5 j/ f: q3 m; [$ b1 Q
此时DSP通道1触发,则原程序就会结束通道2的阻塞: d3 M4 p. J; t
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------; g* p: |& \; ^/ H. ^) t! n
2. 在整个查询的过程中arm一直阻塞,效率很低,
6 ~) b- J0 o. E; ?4 S( h
0 t8 T9 \1 ?! k- u7 X能不能有如下方式实现?8 R. A X U% [( Y- U; _4 s, C* x4 S
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情! W% k0 S% I: H7 u( f
/ ^8 h+ z: j& d/ {4 A$ A) I7 r$ s4 w* e8 k C9 G
% R" d1 v% A Y' F% u |
|