|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑 % j5 h9 C* p/ T2 {& f" j
\" K+ N% ]# f: s在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题" z: O$ ~7 h/ E
该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用
1 b+ Q5 f5 _+ S/ q' D5 O6 x3 C% wDSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
1 ^/ I! T# L8 ^! L N# ~8 f4 U( N- S% q; B ~
有如下需求. q; E2 D3 \3 t3 ]# G8 |
ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态: _0 {3 ?8 x6 H v. e: R4 X( |
/ w4 |5 x5 U7 K$ w1 u2 _目前实现过程如下:) ~, o/ l c/ z: r2 {3 s- j- A# q
1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件
/ w! Y$ ?) K) `9 o' ~7 |6 c此时DSP通道1触发,则原程序就会结束通道2的阻塞
. g! ]: L$ q* g( H' |5 l然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------
# E& q& L; q' V6 T( N/ V6 b6 X2. 在整个查询的过程中arm一直阻塞,效率很低,
# M$ e+ A) k1 c, N1 p c
! F& n1 M# T/ ?% j( v8 M5 |能不能有如下方式实现?5 d8 N+ j; [# o$ ^& h- x s
初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
1 V( T# w( _4 _- P) H: ~* F
4 c6 Y/ T' v# X {$ F6 c a7 M. u: A: X7 {8 w/ N0 ]
/ h# K& ]% F8 w3 t9 ^ |
|