嵌入式开发者社区
标题:
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端程序起始。
' b! h( }* Z/ o( [' h
板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
. J0 M. G' i; z
0 i6 X' F2 R. E* \# Q+ m
/*
. a8 s$ Q) d& q: A# d9 |( m% z
* ======== config.bld ========
2 g$ T$ J- k' t. l& d
*
/ z$ b6 K' D2 H0 ~6 ?
*/
. O7 p8 B$ a( O$ }4 ^" k
" _7 e. } m, d1 h- ?# |
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
" ? K/ J. L5 S
: ]: e0 A) k/ e" b
/* Memory Map for ti.platforms.evmOMAPL138
2 T+ E) ]! G m( ~8 @7 ]
*
: s6 E7 Y3 X/ W' r5 P5 \ h
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
1 X0 |2 Q) H+ |0 W& Z6 ^& O
* ------------------------------------------------------------------------
1 q) g3 v5 M' L/ S/ U& ^
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
/ U! {% o5 a- B: t% j; E4 o6 Y! V
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
$ y3 S+ v J# v J2 U' R5 n( j
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
M- _! B% u! }; b5 E0 L+ t
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
( |% T: t# s2 ?7 p% u
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
6 ]6 L0 X) \' P+ ]7 {
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
, a' o/ e- X" b
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
: H) k8 U+ f" M+ r A
*/
" J! J, {( k+ ~- L# k7 a6 H% h
- g% ~6 h% z* n
var SR_0 = {
8 K& j4 d* y2 x* w! F ?, E; j
name: "SR_0", space: "data", access: "RWX",
3 [2 J/ W u% d x `
base: 0xC2000000, len: 0x10000,
. c! A" L3 W8 N, o7 m! w0 d
comment: "SR#0 Memory (64 KB)"
7 t, t* [! }0 z' d+ ^+ z
};
! L s, u ^4 [; L4 u4 E- k
/ u) s3 f& n3 i, `1 H7 f4 i
var SR_1 = {
1 v6 P/ }1 o5 X: l
name: "SR_1", space: "data", access: "RWX",
. x X5 i, {* [3 M
base: 0xC2010000, len: 0x20000,
0 K) |5 e1 s: r1 o# C, S
comment: "SR#1 Memory (128 KB)"
# d3 [ F: `8 o7 c' |: }
};
, j5 B3 q8 |4 y6 K# b" F }
( x7 D& F( M. ~' Y4 ~* @: _) b
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
* @: X: ^# v% K2 n4 C u
externalMemoryMap: [
; X9 J" ]& _3 [3 T3 _0 K
[ SR_0.name, SR_0 ],
& ]" w+ q2 m% p. y1 R5 ]5 P, Y
[ SR_1.name, SR_1 ],
% L4 w) p, R5 Y' [1 ~& L* k
[ "DSP_PROG", {
. L& d# W6 f" G/ B6 z
name: "DSP_PROG", space: "code/data", access: "RWX",
7 y# L6 t6 | x8 M' w) K
base: 0xC2100000, len: 0x1E00000,
0 I& l2 l, K: h/ R5 T7 z& A
comment: "DSP Program Memory (31 MB)"
+ a: P; f) R- T% T j) o# q
}]
3 T3 F& [$ `& |1 l7 i
],
: F% V$ D' r3 A( W- m
codeMemory: "DSP_PROG",
, C/ b f O( N( a- g% M! c8 s
dataMemory: "DSP_PROG",
$ g! ]6 p& c9 r% `- b% t- i
stackMemory: "DSP_PROG",
9 K0 C) H1 A5 F/ F8 ]: S9 D3 ~. T
l1DMode: "32k",
# z! ]2 q2 @4 ^" A( v
l1PMode: "32k",
! p; ]2 l7 L' t
l2Mode: "64k"
; t, o9 g. O6 P! d- B6 T, j
};
! H" t, y' M8 G! ]. _4 k- F9 U
4 l! ]/ J! [: t' F: [, A
/*
! e0 h- m7 ~/ E% b! g& J4 M
* ======== ti.targets.elf.C674 ========
. ]1 G* F" W8 x9 I
*/
, h- v' W0 A0 Z: S0 ^
var C674 = xdc.useModule('ti.targets.elf.C674');
% T9 D4 @7 _* _: ^0 u+ |& b3 Q" h
C674.ccOpts.suffix += " -mi10 -mo ";
$ o6 H* a+ _) \5 C* [4 a
Build.targets.$add(C674);
$ } ~8 {% s3 n. e8 M* [
# z, y( J" R( J! U. w! j8 a
' z, v) V& ?# ~4 b% F- ^9 i! g
====================
- y6 k% F( V: i7 H4 t3 W
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
: L& ^! n4 Q3 L# j8 _3 ^
作者:
kevinjoyo
时间:
2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
- G7 C$ f- V5 P0 @, d
2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者:
kevinjoyo
时间:
2017-5-22 16:52
/* Memory Map for ti.platforms.evmOMAPL138
7 G0 z" ^% T$ U0 ^+ n
*
* w* T. l2 ~0 b
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
$ E+ M' v! [+ `# e1 k) c
* ------------------------------------------------------------------------
; x$ H% ?0 J, F/ K6 F: T3 n$ ~& J
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
4 L" e0 g( U- b8 U! T9 \+ S/ v
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
4 }1 Y( ^+ j: o# ^
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
# t* A" q1 j+ Q4 [6 t
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
3 [0 [9 v7 C0 R. d& ]& C, X5 h! I
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
7 C4 d" |& n! q* g
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
% o1 T, _9 U* e# ?9 `! m, f0 p
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
X4 u& p& N+ F9 z$ l0 \
*/
; U7 E0 U a$ K# W5 Q+ U! n
如何将 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 c' F% M# X* p3 p" Q
合并为一块大的区域作为dsp程序的所有空间
# [: w0 K7 a' B2 \" }
+ F# r& O! s+ H' X# _, L
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者:
kevinjoyo
时间:
2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者:
kevinjoyo
时间:
2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。
% g% w1 Q% I; l' H' L
- {. u ^6 u) v8 w# r* L
目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者:
teddy
时间:
2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
2 f! {3 H6 b! i( M
) ]6 p! A% _3 [) z( A- d# ?4 a
40 /* Memory Map for ti.platforms.evmOMAPL138
6 j% \/ A2 |5 v, w4 y9 V
41 *
5 Z* z9 Z/ v( f4 J
42 * C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
9 q) f7 l% E, T' Y
43 * ------------------------------------------------------------------------
3 l! c m7 I4 f, O2 q$ w1 I
44 * C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
4 c( z+ ~( \1 o" {) a; Q5 _! ~
45 * C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
% a! b; U& w$ E# Q
46 * C201_0000 - C2FF_FFFF FF_0000 ( ~15 MB) SR_1 (ipc)
; E6 @- z3 J+ _
47 * C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
) r4 \2 X+ `+ c* ]8 o
48 * C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) SR_2 (ipc)
+ d$ k" y! B3 v' J& W6 A1 C! o- b
49 * C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
* c5 ~. t, S/ i" b2 }! ]( e% o
50 */
# `, U8 H2 p, @ b; \) R
- ^. x+ _$ j' h; r
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
0 u$ M% R2 k2 \ z0 [) ]( V
9 f, W0 S) |' _8 Z% e
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
9 Z, g* W% \: @6 b8 `- W p
8 M* K2 l: a5 [9 t8 }
如果需要分配大容量的内存空间:
! _3 i/ a6 A2 G5 E
1.改动mem_args参数(u-boot环境变量);
, j5 D: Z0 w c5 E
2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者:
kevinjoyo
时间:
2017-5-31 15:55
这个问题是和
http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
, j; [3 k0 I: Z! i3 y* b `" A; {7 G
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
0 n8 A U. g- Q4 _* i" t
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
, N% r# f# I( {: D
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4