TI-IPC(Inter-Processor Communication)组件提供与处理器硬件无关的API,可用于多核处理器核间通信、同一处理器进程间通信和设备间通信。TI-IPC支持MessageQ、Notify和SharedRegion等常用的IPC模块,支持Shared Memory、Multicore Navigator和SRIO三种传输方式。
基于RTOS的多核IPC通信案例位于产品资料“4-软件资料\Demo\DSP_Demo\RTOS-demos\”路径下。案例目录说明如下表,其中bin目录存放程序可执行文件,project目录存放案例工程源文件。 表 1
| | |
| | |
| | |
| | |
driver | | |
system | | |
.ccsproject/.cproject/.project | | ; g% z4 m$ c2 y' J: p: T4 s1 Y7 Z
|
* K# d A U# G$ L& b' |
本文档案例程序默认使用DSP端主频为1GHz的核心板,通过TL-XDS200仿真器加载运行进行操作效果演示。请通过Micro USB线将调试串口与PC机进行连接,打开串口调试终端SecureCRT并正确连接DSP端调试串口。
3 P* h& c. r2 l
1 shmIpcBenchmark案例1.1 案例说明案例功能:C66xx_0核心向C66xx_1核心发送消息后,C66xx_1核心将收到的消息回传至C66xx_0核心。底层通过IPC的Shared Memory共享内存方式实现核间通信。
编辑
搜图
2 p6 x: d2 G' g
6 ]( J2 h1 [* K- O, S$ P; e& ^2 N- M5 U6 ^
图 1
$ G4 F1 `, L) F* m8 ~& F1.2 案例测试将程序可执行文件分别加载至C66xx_0~C66xx_1核心后,再依次运行C66xx_0和C66xx_1核心程序,DSP端串口调试终端将会分别打印C66xx_0核心向C66xx_1核心发送单个消息的往返延迟(由C66xx_0核心统计),以及C66xx_0核心以突发方式将所有消息发送至C66xx_1核心的数据吞吐量(由C66xx_1核心统计)。
. d8 i8 v5 X3 E$ p( j" `7 ]编辑
搜图
# T- U/ e4 {' e) C# s8 w+ ~
; h8 D. n4 l! A( J8 ?& f
; b+ o% H" s+ x7 I- X$ M图 2
- |( M( J" B. \" d编辑
搜图
/ C! L# @3 h, N4 ~% d1 \; L- o: B; e6 J i, m$ D( p Q
8 p7 h9 k4 W1 t# Y6 F
图 3
4 R7 T% U4 G G' R8 ?1.3 关键代码(1) 初始化C66xx_0核心,并等待C66xx_1核心初始化完成与连接成功。
* _! T/ h4 u; z' V2 @ A编辑
搜图
& N" |1 M4 P1 ~$ `$ o: S# j; M
, U; K$ C& @( b5 M8 f9 {! Q) J3 I
图 4
(2) C66xx_0与C66xx_1核心分别创建MessageQ。 V) |) L; f3 f8 S
, {5 ~. Y9 e, p) y0 j( [5 J编辑
搜图
( ^7 o! f" ^6 k$ p1 ]4 ~( ~1 V, K3 }5 P
* y/ P( M, X' u
图 5
(3) 动态创建任务shmIpcBenchmark。
( h f2 i( x. v
0 i" Q% B8 y9 r6 r2 P+ K编辑
搜图
* S/ `2 P; w/ X5 s+ e8 t
1 Y- s$ }$ g. G4 `( O3 l) U* V7 l' D3 P7 F/ i
请点击输入图片描述(最多18字)
图 6
- L' m; l c7 g, F(4) 注册HEAP_ID,并分别打开另一核心的MessageQ。
4 m6 o( {: K8 f' ~编辑
搜图
0 N0 t8 w! p& [ o4 L' j. d: y' N, V! I$ h {- c
2 s5 I" h% q q* d
图 7
(5) 测试C66xx_0核心至C66xx_1核心的消息传输往返延迟。( }6 ]3 g) \! T' E4 f
+ [, |9 v; r1 ~7 _# p
编辑
搜图
) O8 ^1 a( ^$ O4 F$ Y
$ i1 _" n7 Y; t6 v) O4 a% O
/ W( J8 B6 m3 ?& I* M图 8
(6) C66xx_0核心以突发方式将所有消息发送到C66xx_1核心,C66xx_1核心接收所有消息并统计数据吞吐量。/ C$ m0 b2 y. O" x/ L' T3 J
7 }/ J* k3 Q% k% p% c, q+ \
编辑
搜图
% l; b% f# X/ D6 P
0 A ?' Q8 W2 C0 [) A1 R
( s5 y: u0 L4 o# M图 9
' H# E) w. r6 l- \, L8 B# \编辑
搜图
8 n/ y1 M, x5 e: t7 V( r$ S# ~7 ~- v _4 P
4 A+ L, y: B! \8 {8 b3 z% U
图 10
(7) 通过宏定义NUM_MSGS_TO_PREALLOC设置突发模式下的Message发送数量,并同步修改Program.global.shmSize的值大于(NUM_MSGS_TO_PREALLOC x 128)。$ F1 }* X; U0 I# P n7 Z! H9 ^- ]
( T/ N% R @( Z1 d5 X1 n4 Z编辑
搜图
' K( k4 o% _5 c0 C7 Q- {6 }, b8 o; u0 r7 E
. v/ S$ H N0 A- m
图 11
* a b. z7 u; b! }9 r# \$ S- O
编辑
搜图
1 ^6 g" Y, R4 e$ v) P
9 W* h( D* X* E9 P* H
0 p8 L, `4 D6 b2 a8 T W, [图 12 project\shmIpcBenchmark.cfg
2 qmssIpcBenchmark案例2.1 案例说明案例功能:C66xx_0核心向C66xx_1核心发送消息后,C66xx_1核心将收到的消息回传至C66xx_0核心。底层通过IPC的Multicore Navigator(QMSS多核导航)方式实现核间通信。
编辑
搜图
# g* Z' B+ P+ {1 g/ Q
# V. E! }# `5 T6 \& ]/ O% N
& {' A5 N7 ]5 m( ?1 |( \: b$ ? v4 }
图 13
将程序可执行文件分别加载至C66xx_0~C66xx_1核心后,再依次运行C66xx_0和C66xx_1核心程序,DSP端串口调试终端将会分别打印C66xx_0核心向C66xx_1核心发送单个消息的往返延迟,以及C66xx_0核心以突发方式将所有消息发送至C66xx_1核心的数据吞吐量。' {& a0 B, ? [9 B
编辑
搜图
5 w5 }9 f) l5 `
% e: f) A/ D( f: y5 ~! q
% F' @! W0 m) Y q7 i
图 14
8 ~9 \; }" X$ z4 v7 L! w# S编辑
搜图
$ Q" c% C8 Y: q# X
6 {3 t5 G" K! x! x9 H' P& n8 y# V
( P& Q U2 b1 R3 R- b. H% g
图 15
2.3 关键代码(1) 动态创建任务qmssIpcBenchmark。
3 B: S. p/ [" @) [ L: P Q编辑
搜图
6 i0 B. I7 s, T# n$ {$ M# o
( Z3 D& j" t/ K8 ]3 U
3 c' w" J! Q5 s请点击输入图片描述(最多18字)
编辑
搜图
) B9 p) w* l& M4 Z: S! p
- U2 Q9 C: ?. i T3 P. g
! ?! a2 R5 f. A5 A \1 _) d图 16
(2) 初始化C66xx_0核心,并等待C66xx_1核心初始化完成与连接成功。& F/ O2 S& c' {6 m( f+ C5 |0 \
5 s3 r* W6 a) M8 m7 h编辑
搜图
) ^: C# O- B, r
( q: M; _& I; b4 j( o. s( t g0 q; W0 h
图 17
(3) C66xx_0与C66xx_1核心分别创建MessageQ。' S' N P8 v3 h. @" u" n
编辑
搜图
6 n. Z( m1 J e7 k8 F. ~* R0 |+ l/ b
b$ a) b5 U0 ]2 Q( `+ w
7 A# d2 O" j7 H" S图 18
(4) 注册HEAP_ID,并分别打开另一核心的MessageQ。0 v3 t0 u& o, m
# b8 G' D$ n, Q0 r$ _
编辑
搜图
. F! e4 q. G# V) ^' `/ P+ D. I$ l* q; ^7 U# n& J$ M
' T& U; w/ O9 x
图 19
(5) 测试C66xx_0核心至C66xx_1核心的消息传输往返延迟。
$ x7 y3 N& T3 T6 D- I. n
: C! x. X O2 ^: v7 v
编辑
搜图
- K2 `* S8 V Q1 v& O6 ?- a* L
. k/ ]$ k j, {% Y U图片重复,建议替换或删除×
/ K0 ~5 X7 m; S- t! {" s5 {' G# b* X2 e& ], D0 ]7 T @- U8 }
: N3 _2 \1 A6 s! L) D9 {* B
% G+ W. j u2 D% X请点击输入图片描述(最多18字)
编辑
搜图
2 m( x% i; @9 `1 x3 u# _
4 c! v( z) N. p! a; A/ C0 e; E$ u
$ n# H k0 h4 s' E9 [- |+ N图 20
8 [# F+ C1 a; V( G编辑
搜图
0 r, S2 E) a$ f }% e4 W+ v: H
$ o6 H' }; y- Z& g0 i$ u) h, C; V
5 w C0 A# ~" x" L# {% A# Z
图 21
: T: d$ S- M3 X0 L, ~6 I5 ^7 ]0 i
(6) C66xx_0核心以突发方式将所有消息发送到C66xx_1核心,C66xx_1核心接收所有消息并统计数据吞吐量。
5 |! ^( R0 J+ [1 a y6 \# l% {; H$ ?7 ~$ T编辑
搜图
! t2 b9 _" o9 L, n9 z; V1 D* y
6 M$ m3 `& J4 ~/ P' N8 z4 P: C( p2 [3 |
图 22
2 ^/ J; B' r4 I. U1 n% v编辑
搜图
; R: G7 V, h# r' B( M9 M K9 Z6 W7 |
2 Z; e- L7 Z; y* w/ \: s图 23
, {' _4 }6 a2 \; X/ f0 S1 |编辑
搜图
# T: @7 R {: S1 K
+ c1 V7 ^8 N# [( e( @/ A: F
+ F. r) `) l& i1 [% X8 T图 24
(7) 通过宏定义NUM_MSGS_TO_PREALLOC设置突发模式下的Message发送数量,并同步修改Program.global.shmSize的值大于(NUM_MSGS_TO_PREALLOC x 128)。
~. a) f" I# O' z/ a% S
编辑
搜图
5 _3 g q9 M/ f9 n& D! N3 G X
( q9 n/ b' \ W& H7 u. `8 `) |图片重复,建议替换或删除×" l6 V6 q) `1 n2 h0 X4 B( V: D. N8 Y
4 U6 i F6 m# \5 v# r$ V, k$ o# f1 }
/ P5 G8 i0 @9 k. q8 ~5 c8 L* z
图 25
0 A! O7 H3 j ^& e6 j8 M* f" C
编辑
搜图
* O$ u/ F/ P% Q1 |( b' Z7 \" l' C
5 }9 H! a! H1 Q6 h) X
. |" ~8 ]/ Q9 L3 }( @( L图 26 project\qmssIpcBenchmark.cfg
) ?. [6 q& U. l
3 srioIpcBenchmark案例3.1 案例说明案例功能:C66xx_0核心向C66xx_1核心发送消息后,C66xx_1核心将收到的消息回传至C66xx_0核心。底层通过IPC的SRIO方式实现核间通信。
, A' j5 S6 y# B% A. H, b5 T
编辑
搜图
% F3 k7 e7 u: F& W; V# s2 I5 c1 S
# ^5 Z+ K; s! H/ D
9 y: E7 M" D S6 |, ?图 27
3.2 案例测试将程序可执行文件分别加载至C66xx_0~C66xx_1核心后,再依次运行C66xx_0和C66xx_1核心程序,DSP端串口调试终端将会分别打印C66xx_0核心向C66xx_1核心发送单个消息的往返延迟,以及C66xx_0核心以突发方式将所有消息发送至C66xx_1核心的数据吞吐量。
编辑
搜图
5 Q" S7 r* s* J9 ?5 B1 Y
9 ?# v: N3 h0 m- F& H
% Z0 x0 t! f7 R- k图 28
. I4 E G1 K! `' D' i+ c编辑
搜图
# ~% F) w3 R# {
" Q( U& _+ x+ k+ K1 O1 |2 E
6 G0 K S7 F- t0 C图 29
3.3 关键代码(1) 初始化C66xx_0核心,并等待C66xx_1核心初始化完成与连接成功。
编辑
搜图
8 T. A4 }% k6 W1 j' K. L
! x- t {# Z n/ v: t9 m- O2 q) v0 ~: H ]
图 30
(2) C66xx_0与C66xx_1核心分别创建MessageQ。
; s8 |+ t" i* R6 x! J$ G
+ a' s3 N- p. `8 ]( I
编辑
搜图
+ a, I" k+ _; ^1 |
" M; T# X+ t# ?. @7 N6 D2 @% G; D8 o* c
图 31
(3) 动态创建任务srioIpcBenchmark。
编辑
搜图
) V, V% y& |: F- X' f# s6 C M/ ^
; }6 ?% a a% H0 p0 O3 E* w图 32
(4) 注册HEAP_ID,并分别打开另一核心的MessageQ。
编辑
搜图
# T+ o; m7 R$ D5 G+ ]0 }! V/ a0 H. K& y* A4 N! ]8 X
8 J. n, ` f1 f$ }& M$ v$ `9 Z* {图 33
(5) 测试C66xx_0核心至C66xx_1核心的消息传输往返延迟。0 r M% K) B0 }- A7 b2 W
; h0 F& @1 F5 W7 J$ w) v" P编辑
搜图
0 j1 E, |4 q* }( J$ w+ t2 R# ^2 f( j$ p" t# |9 [# s
! J5 e w2 n% j. u
图 34
9 \& Q2 |* k) w* x0 r+ c编辑
搜图
" y- I4 C0 l! ]- V* ~/ S9 q
- Y$ x4 p2 K8 E, Z: c% t
" C6 D1 R3 U! w. T$ K- h3 a: g/ Q图 35
(6) C66xx_0核心以突发方式将所有消息发送到C66xx_1核心,C66xx_1核心接收所有消息并统计数据吞吐量。7 w$ S, b* s5 Z { t# U) [4 P
8 w. c. E+ _7 o1 v- {- O
编辑
搜图
, E8 z* v+ g A+ q( d3 N2 c
0 U- ^$ P5 Z* _
8 Z3 _) t# p; u$ v# q( c4 z. H
图 36
编辑
搜图
* Y* l# K; y# M) S/ H* w0 D& {" T* Z! A$ x+ R5 [- z/ s* C
% f+ a9 P5 ]! n( {图 37
编辑
搜图
& m) G( j; A9 \$ }% R A; B& b% a9 K. ]! P N; X6 ]& j: w& k9 T0 x- _4 G
. Q, W3 P( h, k* @" Q0 |2 u
图 38
编辑
搜图
+ K6 F& M1 c7 w: i! \
; f/ d# {, ^* ?8 S' }, i* ^5 Y% x ^
" E3 t# c$ |" i5 j图 39
(7) 通过宏定义NUM_MSGS_TO_PREALLOC设置突发模式下的Message发送数量,并同步修改Program.global.shmSize的值大于(NUM_MSGS_TO_PREALLOC x 128)。
编辑
搜图
$ u+ `$ B+ N0 R/ W% R0 B H7 x5 V: d5 H5 e2 i, O5 o
6 q/ D b8 \4 k# s: L图 40
+ B7 f* e9 Z0 H# c$ R* }8 H- o编辑
搜图
" d5 G" r5 ]! C7 `! Q' l; h& J- t) y
' A- D" e" ]4 y0 V/ X/ `( l& w( Q- W7 a! N
图 41
- L+ w. ~( B/ a4 |! r7 v7 c
) E% n- z# Y( R/ M( {
o) ^ E5 x- R: U4 s欢迎各位嵌入式工程师点击下方链接或扫码二维码获取产品资料。
% U3 o+ i: P9 T, Z, w1 O
http://site.tronlong.com/pfdownload
. f. ]" F( S" o2 n备注:如需购买评估板+模块,请与我司联系。案例源码需购买方提供。
. k( G9 V9 A& K& S
( ]6 Q+ e4 E/ r9 h5 [' N" m
更多帮助创龙总机:020-8998-6280
技术热线:020-3893-9734
创龙官网:www.tronlong.com
技术论坛:www.51ele.net
线上商城:https://tronlong.taobao.com
2 Q3 R3 o& `9 P6 U; z ]6 Z; m5 |" K, h
1 I% W4 w7 W+ R/ |! V. u