嵌入式开发者社区
标题:
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端程序起始。
6 q$ e3 ~9 V0 C, S* {
板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
6 U8 d! P$ J% }/ Q
* q5 }% E1 w( [
/*
4 i) Z& u6 I& ? u- ~
* ======== config.bld ========
9 i q4 u3 A* q% Y% k. w" f
*
( D( P3 u+ R" E7 d; f _
*/
% f) U0 Q2 ]& k5 M3 m
7 y. x" T- X8 d
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
& d+ k: z6 i: r1 m- R& H5 P8 _
) H7 g/ `1 |0 M, x
/* Memory Map for ti.platforms.evmOMAPL138
+ H" e1 g/ t+ V U
*
7 c; y- D( f w8 \) b
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
2 ~ R c- E5 I1 t
* ------------------------------------------------------------------------
0 m7 Y" y; Z, C, H
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
) C- e# P( R- x9 `4 _- N* z9 d2 }
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
: j ~; A1 V8 G1 a9 e9 S9 y
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
9 X, M( e! Q5 r& ?0 g- K+ x
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
" R: U3 s7 Z1 n8 N' S
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
1 B6 g2 j( V* |2 ]6 O* g* i
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
5 w' t: _" P- ~: X* r9 a
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
( Y% ?* h% E. P$ b% w
*/
) [/ ?5 {, H; b) H4 t
z+ v" p+ _2 _+ n6 C( t
var SR_0 = {
) y9 X3 `3 q. M, _( \$ `) Z9 G
name: "SR_0", space: "data", access: "RWX",
" y Q, \( q* {5 I3 ~( A: L
base: 0xC2000000, len: 0x10000,
: e8 K. Q" z6 F& R' W
comment: "SR#0 Memory (64 KB)"
) \0 u, E; ]- ^ l. `# [
};
5 X5 Q$ T7 O7 m$ c2 }4 H3 Z
) {; M- A* W# L2 q8 b* N( Z' Y# I
var SR_1 = {
6 D1 F+ |0 T0 Q6 X
name: "SR_1", space: "data", access: "RWX",
* n1 I' @$ F" m0 ^$ Y8 M' J0 S; ?
base: 0xC2010000, len: 0x20000,
$ N4 X1 A1 @! b3 r) O/ S4 H4 I2 P, i
comment: "SR#1 Memory (128 KB)"
! o2 ~! U! S7 [' B7 z
};
# u3 W/ D* ?; B- T0 t8 D% x
4 R# s: `7 O2 E5 W
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
+ w- q. e; E5 l. J' J3 W1 v ^- c5 I
externalMemoryMap: [
/ f0 Q9 `! R) i% O0 M
[ SR_0.name, SR_0 ],
2 o, u! `6 W6 y2 J4 H
[ SR_1.name, SR_1 ],
o2 W# O/ w- l) o' H {
[ "DSP_PROG", {
9 s% u7 i. N+ @7 B- |8 H7 b' u
name: "DSP_PROG", space: "code/data", access: "RWX",
1 e" C: ?9 i2 I! P
base: 0xC2100000, len: 0x1E00000,
4 `* O7 w% S0 o* R% c( {4 ?
comment: "DSP Program Memory (31 MB)"
8 p/ Z6 {4 T/ ]& b# @/ {: U
}]
! U, [8 U# I& w' d" L: e. k! u
],
( @+ f% K8 n' [8 j( w% q" `1 M# j
codeMemory: "DSP_PROG",
1 E; }7 i7 c$ ?
dataMemory: "DSP_PROG",
# k" H& x# s) [. }
stackMemory: "DSP_PROG",
P* ]4 N! Z' h1 \, Q
l1DMode: "32k",
) u4 H$ Y6 Y0 i- x6 g
l1PMode: "32k",
R) c5 ^! v' y/ g" j( P
l2Mode: "64k"
6 o- J Q2 ?0 F3 u$ Z
};
# B! n0 a: x+ z- J9 a& h
( P1 z% I5 e: u# X8 c6 R
/*
9 g7 q: W& R8 A7 J0 M+ G) X
* ======== ti.targets.elf.C674 ========
0 b* W; {5 @7 P/ \% v# o
*/
5 I6 C' E1 f" [
var C674 = xdc.useModule('ti.targets.elf.C674');
. V' c3 p. K* G+ c
C674.ccOpts.suffix += " -mi10 -mo ";
, B. z" C/ U' `
Build.targets.$add(C674);
8 H' g, s( D) l5 c1 e
' _* y- ~+ ]2 q5 y
- o0 O8 `4 O! s+ r2 n
====================
+ S0 E" Z- P6 X K( }1 T
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
8 S3 b! T3 r. Z0 t$ V% z
作者:
kevinjoyo
时间:
2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
# @0 B: G! m& U$ ~1 ]
2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者:
kevinjoyo
时间:
2017-5-22 16:52
/* Memory Map for ti.platforms.evmOMAPL138
2 L, U6 o& Y$ i! e; c- g: ~
*
' ^/ v) f) e# T) w
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
* o+ \# s: X w8 x! X' T; w
* ------------------------------------------------------------------------
( T6 o( ^' S; V* V1 b6 H
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
7 N/ o' T7 p7 G9 X5 R+ N
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
2 m( J% s9 _6 |* y
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
) X+ `3 H2 D# w7 p/ X
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
9 V8 O- _9 c7 k+ Z$ s
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
! L$ y; ?! H2 G
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
; a2 Q5 {: r: g0 p
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
2 w+ k( M( E$ U! w R8 ]+ T# V
*/
5 ~+ @( K& [; P/ S) Z
如何将 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)
6 z3 t# Z m$ S, r( u. I
合并为一块大的区域作为dsp程序的所有空间
, r" z0 l; J5 \( y# q. Z
. Z" G8 v0 Q5 G; d
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者:
kevinjoyo
时间:
2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者:
kevinjoyo
时间:
2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。
* n4 Q+ }2 l9 i m& L8 E
0 j; R# b9 n& w4 W. J' h
目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者:
teddy
时间:
2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
& r9 o, t6 R9 e1 d4 Y
; o9 x8 [; k2 Z) [2 J4 r
40 /* Memory Map for ti.platforms.evmOMAPL138
8 ?- F( J: s4 _5 p) O5 V+ {+ k
41 *
9 H6 |" t5 Z$ g+ k; g
42 * C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
9 i! x; A1 q4 m% k# H& P( s
43 * ------------------------------------------------------------------------
. V( s2 w! {' L5 G3 F; f
44 * C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
3 W, G( E5 k5 `, d
45 * C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
- w/ b% d+ r' H0 `
46 * C201_0000 - C2FF_FFFF FF_0000 ( ~15 MB) SR_1 (ipc)
# C) \( U! K: v. ?1 {4 C# s
47 * C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
/ Q; ~- @6 k- {. K/ G. p
48 * C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) SR_2 (ipc)
( Z& q" \ v+ _6 C' y
49 * C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
, z. Q) q3 F, M8 q+ q/ `( I
50 */
8 m8 R# I/ g0 Z
+ B" C/ d7 ^ O" F( l1 W
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
0 \- {; U5 \3 m+ c/ M% s) E
! _; m# L# F) l- p" ]4 j2 b
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
! @& @5 G+ _& w6 v1 u
( o+ `; H/ e& }+ S: d
如果需要分配大容量的内存空间:
/ m$ s7 O8 d$ l! q; J+ O2 f
1.改动mem_args参数(u-boot环境变量);
& @- H1 S! i3 Z) O% r6 p7 F
2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者:
kevinjoyo
时间:
2017-5-31 15:55
这个问题是和
http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
4 T1 [* m( O! J1 ]: ?9 h
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
' l- i# t4 U% m" }
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
' b6 N% S; W' | [" b& j
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4