|
|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 : T8 j9 j! Y0 S* h; d9 P# `& E/ o
6 k* K+ u0 [0 `7 I* @7 C' Z: I
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
5 F6 ^! R" d2 {2 ~3 j N该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用7 e8 A) I& k8 ^! a" O" l7 A* l, V
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
& L1 u6 l, w% P& R' Q: O
' `0 E) {* A8 y有如下需求
4 G( h- J4 X) [8 _: k# Y9 mARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
9 J% @& |0 \8 ^5 u7 S4 |% Q- s9 @
: R1 a, \1 |- b目前实现过程如下:
5 z! D, b; m' w& X' X q1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
8 ]7 X% u! R U* o& C6 G( x! H此时DSP通道1触发,则原程序就会结束通道2的阻塞' ?' q5 v, S* B; I; k- O7 a' H0 ^
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------0 Q* l' N3 R. c& [; G
2. 在整个查询的过程中arm一直阻塞,效率很低,
& N4 h. S& U! t& i6 O( `5 M
6 m6 [. n: G H- o/ o( x0 n. E能不能有如下方式实现?
- r) u- M( o5 ]2 U9 Y) F# Y/ _初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
0 M R0 ]+ Z; M: o
5 f: d" x3 N' ]$ d* q* R2 u: L {% k0 y
8 g7 n; ?) x* _1 c# N8 b; w9 V |
|