嵌入式开发者社区
标题:
OMAPL138arm核跑linux+ipc,dsp核跑sysbios+ipc,重设dsp端程序起始
[打印本页]
作者:
kevinjoyo
时间:
2017-5-22 12:48
标题:
OMAPL138arm核跑linux+ipc,dsp核跑sysbios+ipc,重设dsp端程序起始
OMAPL138arm核跑linux+ipc,dsp核跑sysbios+ipc,如何重设dsp端程序起始。
( ?# z; _9 f7 J' w( i
板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
5 ^+ \! {5 b6 [ d
i- m, K- p: q1 _
/*
$ A# m2 e% E% r+ R$ x
* ======== config.bld ========
5 D2 Z7 b! u I" |* [( f& s/ r
*
+ n- X; _! `! p% c- e! ]6 K
*/
& H0 W0 H6 f' E% x
! q6 {3 K: _; n8 P$ y5 Q5 f) n
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
: R* E2 W+ F7 A7 g7 m* r
, c/ U9 d$ h0 P# Z/ z/ L
/* Memory Map for ti.platforms.evmOMAPL138
3 K* Y5 N9 @) ]
*
- G" t. z! ^# {( d
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
( @+ P( K5 y4 k* Y( |5 m+ p7 Z8 k
* ------------------------------------------------------------------------
: o( m' C3 `1 F0 f& U
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
: [+ D* s6 ?0 m6 J. g
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
8 H5 R, I' Z4 u a& i
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
& V+ h' i+ b- m. ]2 w' L f9 ~' N
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
/ N, R/ e5 O9 E0 ?2 g4 ]
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
& f& ~' O* v4 A" Z9 G) l/ |. _
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
$ N5 `! z+ i* P6 q0 S5 a; ~
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
" w6 c4 t7 j* n4 Y- j: ?! Q7 U
*/
$ S; o4 I2 @! K$ [7 c- ~7 ]1 Q
7 }4 r% `6 u+ V# w
var SR_0 = {
9 e5 p, N; o B" }/ q( a8 D5 D
name: "SR_0", space: "data", access: "RWX",
# F% i4 b$ _5 {1 I: L0 J
base: 0xC2000000, len: 0x10000,
+ h0 [( a3 E5 ?5 ]
comment: "SR#0 Memory (64 KB)"
4 v4 u9 B3 W- b0 G( w( e& y4 T
};
& i( R- ^3 S2 g+ r+ A* L
/ e( W/ q" z& I) {# g- L6 m
var SR_1 = {
( j; L/ j! O5 T' j$ i4 U
name: "SR_1", space: "data", access: "RWX",
! H# F* B! r1 E5 C
base: 0xC2010000, len: 0x20000,
% {" E2 J6 o/ e' }
comment: "SR#1 Memory (128 KB)"
0 x* m5 ^' Y" y/ `5 f
};
( V6 ~9 s8 P1 \. _( G
* b* y) l% d# h: S. _ e) H" C8 H
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
8 k3 r* ?$ q; G
externalMemoryMap: [
: l$ r9 B$ A7 B$ N/ A' K# n* T
[ SR_0.name, SR_0 ],
* M! V5 d+ i" g. C
[ SR_1.name, SR_1 ],
9 W, p% Q* c3 L
[ "DSP_PROG", {
$ `" {- L$ F+ A& r8 `4 j
name: "DSP_PROG", space: "code/data", access: "RWX",
# ] }1 A9 w. q, C
base: 0xC2100000, len: 0x1E00000,
! m' D: A0 S, w I
comment: "DSP Program Memory (31 MB)"
) s# O( N6 D& o! s: c
}]
. H# ~" c- {6 P
],
7 V5 d: W" L7 }0 C: i: v
codeMemory: "DSP_PROG",
/ O6 I3 s. t+ J6 b d, ^8 K/ U! t2 P6 @
dataMemory: "DSP_PROG",
6 w' T+ U# g$ n0 V6 S
stackMemory: "DSP_PROG",
+ E3 i1 y% ~4 w" C) A1 L8 r
l1DMode: "32k",
: c' d9 r. e! N
l1PMode: "32k",
8 T1 c! @# g" n" V8 A) i
l2Mode: "64k"
: I3 [8 M; s9 d. ]2 Z9 ]* x. x
};
2 d$ n9 Z$ `8 E
" h; E! v% b. c" v- k
/*
; a* P# m' i1 h& \* o- i4 m% a+ Y! a
* ======== ti.targets.elf.C674 ========
4 u; H" r' ]: x- F# F5 @0 e
*/
0 N$ ^. l& I Z m
var C674 = xdc.useModule('ti.targets.elf.C674');
' i% b+ L* Z/ \8 g( E
C674.ccOpts.suffix += " -mi10 -mo ";
* z3 P2 `/ v" j, Z. r8 S
Build.targets.$add(C674);
$ h7 L2 c( B9 ?# F" C. Z4 N
5 A( R9 \! P0 g8 \6 f; d! }
, [; E. H) j" G# C o& v3 X# b
====================
3 w1 u, f2 [6 w* A0 y, A% R
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
9 L8 G4 U, N* z/ i
作者:
kevinjoyo
时间:
2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
: F) i" r% X' G/ K+ ~. h; Y
2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者:
kevinjoyo
时间:
2017-5-22 16:52
/* Memory Map for ti.platforms.evmOMAPL138
Q( [8 f5 k9 u& N
*
; ]" v( n, A$ o. I+ f8 J" H
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
% p0 }. C% B/ V: t1 W+ E' Q' o$ X
* ------------------------------------------------------------------------
0 ?5 d4 w# V- _( i$ c, Q6 m
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
3 s( R& ]" B: y9 l/ ?/ g! v
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
( ^6 c3 B) F6 v' b2 G
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
Y7 s+ m8 z p
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
$ X) Z) V; W) p: p$ t0 C
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
) v& I8 m. r' c% B. C; O
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
+ p7 l( @5 O. @! s: F
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
0 B W$ p$ m% D) O7 b
*/
! e$ y+ {; r/ w5 A" y
如何将 C2100_0000 - C2FF_FFFF FF_0000 ( 15 MB)和C380_0000 - C3FF_FFFF 80_0000 ( 8 MB)与C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
1 I) H4 ]: e8 s
合并为一块大的区域作为dsp程序的所有空间
) y0 ]1 ^* [9 F. v T
N# n9 F( b$ w- m& F. d
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者:
kevinjoyo
时间:
2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者:
kevinjoyo
时间:
2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。
2 D, d% k4 p3 f' N! c, C0 p$ T
1 A; e. ]5 c5 p& _; M
目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者:
teddy
时间:
2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
- Q; Q3 p2 H& X- S' I
; U" U% N: _0 c0 Z
40 /* Memory Map for ti.platforms.evmOMAPL138
( ?$ i2 v- s7 L7 j% F0 n
41 *
0 j4 `: i+ s1 `7 r0 ~' f- W
42 * C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
5 t) l/ y! } t0 j1 ]1 |
43 * ------------------------------------------------------------------------
! a1 W5 c/ x7 `3 h) k& {
44 * C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
9 t* ~: u- P& g( { k4 B& w
45 * C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
) ~8 [8 N# c& v5 `2 B* G! m
46 * C201_0000 - C2FF_FFFF FF_0000 ( ~15 MB) SR_1 (ipc)
! h" e* Z! A2 U9 T: W# O( v
47 * C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
: \5 Y0 J Z: t8 l8 V6 J
48 * C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) SR_2 (ipc)
3 ?6 B% i! R/ V! w
49 * C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
% ?4 i# t; x0 I' x
50 */
& \' e3 o$ R5 |, w% G
) G" I2 J5 L5 b
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
- e9 `1 \5 `) |
- P' _; I3 O% q- h6 h% T
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
0 i9 h/ G- M5 w% d, h
4 x6 f4 `0 K" N( Z+ J1 b4 N
如果需要分配大容量的内存空间:
2 L) t) u" S+ H0 z: _; _
1.改动mem_args参数(u-boot环境变量);
N- c5 E6 |- p
2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者:
kevinjoyo
时间:
2017-5-31 15:55
这个问题是和
http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
" S5 q4 x+ |, b. E2 a, |% G: e
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
- o8 C: V3 Q( ]5 \) p* Q6 m! R
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
8 J! G* }+ A( h' m# x
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4