|
|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
# O0 j2 W9 n; j# b+ u5 E) T
! c. a7 u+ _5 h, S& E4 e! x在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
; u5 m* F$ y0 b ^4 ~9 L; e% A该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用' `' v! P) ~3 w
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
( A5 t- D. F, O4 G+ I+ r% U$ R; J- G+ n$ a! h& ~
有如下需求
# W9 H, Z; s9 f t& {$ p" F; qARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
9 K8 a5 F- t# m" P3 ?' O7 z; J g8 W
8 \- \7 h3 a8 J8 i目前实现过程如下:
9 H+ ?$ N& J3 I3 i4 M1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件) v" o/ P. x3 K+ m4 W
此时DSP通道1触发,则原程序就会结束通道2的阻塞
+ O6 N. {/ Z" ~# X/ e+ F然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
, b* M/ e* i& n% D; q2 K# k! m2. 在整个查询的过程中arm一直阻塞,效率很低,5 w' G$ O8 q+ r1 B
- ^, U8 w% _/ m
能不能有如下方式实现?; ~- W2 G5 J( z
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情8 N# s- X$ @4 P
; K# l5 k4 r3 }
$ l' w. |0 i6 N, U
% e+ P. Z( J3 `& f, \% Y ^, y; s |
|