|
|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
9 R h3 o1 @# a/ A8 ~) j$ w/ f0 s) ^; g, a `
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题8 Z5 m# ~* B8 s+ S2 C5 _
该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用; M/ E1 D, k& j; R {- V
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
# X2 D. q0 E. V" r
; Y# Q' v# T/ B# I8 G; X有如下需求
3 |+ ]- v1 s, E! \ Q' dARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
) ^6 ^1 M1 Y. e8 p: z
. x1 B1 m9 p9 u1 U- Y1 |目前实现过程如下:
! w: _/ C% X( s5 f! v. \1 M7 D2 \0 ~1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
7 b7 N Z/ H2 b! H) [: U% R此时DSP通道1触发,则原程序就会结束通道2的阻塞
6 q% c2 A$ ~: f; ?然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------9 t0 P) b( ?& K% C8 x& q
2. 在整个查询的过程中arm一直阻塞,效率很低,$ }0 z1 m( X2 U3 S
; q4 O- ?- n& A/ W2 r% Z
能不能有如下方式实现?
* g* ?* A1 @& X; o" U0 R* O' D初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
& ]' \5 s# L% L9 }7 Q& A8 b
; Z+ s/ F' a8 x8 S2 E- j2 l5 h: F; _' s( P" G$ c
$ I4 v0 p% J! ^* C# `# R
|
|