|
本帖最后由 daoerb 于 2017-6-23 17:07 编辑
* N$ a F0 t9 X! b4 r: W- D! @0 B1 w/ S( _! y, h" j# @6 w6 n! R
在使用IPC双核开发的过程中,使用c674x_irq_events模块,该模块使用有如下问题
$ t% `' j+ \, R5 ?/ ?: o该模块使用函数select进行阻塞调用,等待DSP触发ARM 然后结束调用, o1 D6 U$ E; T/ C: ]7 D. z5 O, m3 H
DSP通过任一通道触发ARM,ARM都将解除阻塞,为了继续监控,ARM必须重新发起阻塞,不然没法接收下一组DSP触发的信号
1 A8 {! I) Z! G. W2 f
3 ^; q) G0 A, C3 I: l' \. Z- N有如下需求
) T! c. a/ q/ N0 P( ~ARM等待指定的通道1或2触发,返回通道2触发状态 通道1触发状态
( ~1 p4 l ^) t- l/ [! i& l
# k/ u6 z4 L+ J9 P目前实现过程如下:* ~& F o$ c, h4 Y5 T2 p
1. 基于原有c674x_irq_events模块实现,如果ARM需要阻塞等待通道2的事件+ h7 C- m9 Z9 k6 D
此时DSP通道1触发,则原程序就会结束通道2的阻塞
' P2 l4 T: Y4 D然后查询触发的通道是不是通道2,然后重新阻塞通道2---------------------------------------------------------# R4 m# j4 H9 m" E& a6 a
2. 在整个查询的过程中arm一直阻塞,效率很低,
6 z4 N4 v* u. f) ]# |( l: s( c& c% A9 y. o
能不能有如下方式实现?
$ ^4 O. O, o% q初始化模块调用后以后相当于有一个监控任务一直在运行,每个周期查询通道1和通道2是否有事件发生,有事件发生,处理事件,没有不处理,ARM做别的事情
1 R# X$ G# z0 M$ a" _; v) B# m% N/ U9 j+ t
: e% a: z5 ^9 M5 m: E& U
7 ~' w h3 t5 k5 m- U( K
|
|