|
|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 + }) n8 z& J& q& [, @/ X
3 T" U% y# L1 c0 m+ Y# n/ O w
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
' j! W% s S1 W! C: k; S该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用! M" k7 q5 M( ^: a; X, x/ g4 }6 V
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号+ \1 O. o2 z& j0 I; \
# e: S; D& e! w& B7 M( ~ ]有如下需求" t5 i' b3 w" i+ v
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态! R0 V& }% s8 I% W5 K" j" \, z
N/ f) e# d c( v% g目前实现过程如下:4 {* R9 ~0 @6 |" a5 g
1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件* d% l' q0 F" s" H& l
此时DSP通道1触发,则原程序就会结束通道2的阻塞$ _- F2 A3 x( |" ]7 A0 ^; R
然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
9 ]% `' Y/ }4 B+ s( L6 I, X$ ~! o2. 在整个查询的过程中arm一直阻塞,效率很低,/ S6 ?% Z) c& c) s
# h' s' _1 }7 d- `9 b0 {# B9 m! R+ T
能不能有如下方式实现?
5 A' E( M; @ z- F& v% |初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情) X5 L: r; v: s0 W4 G" x! E# {
Y) }. `$ Q2 { Q
* y/ G( j( o% J7 \3 S& T
) _' ~, r+ o4 G. S |
|