嵌入式开发者社区
标题:
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端程序起始。
H% y: Z6 i4 ]0 [: v0 y# U
板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
# W7 a2 a. Y8 ?8 T: P% P. S; X N
& g: t" ^5 g/ s0 z) _" ^! \- F) ~) m
/*
2 F! P5 K% Q7 `% A& q0 [* }
* ======== config.bld ========
/ ]: p" H; D8 n: J. Y' K
*
/ d6 R3 O2 ^# ]% A5 r
*/
7 }% X% @" f$ J: x1 m' ]
* \/ h, B" v J7 ]
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
% T9 R" w+ b% ~" W5 I' q* c: k
; R _+ j! t+ X7 A$ { p, {
/* Memory Map for ti.platforms.evmOMAPL138
! d( I5 p& r7 ^6 y. |2 z- n: |% M
*
; z) Z3 B5 {4 l" J
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
( h4 \8 e) O% X4 R1 C
* ------------------------------------------------------------------------
% H5 N$ Y- ^. }+ t
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
7 E; V( q2 u, Z0 q' C! Q/ @& ~$ i+ L
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
' `! D4 c* P9 E, p7 O8 [9 U, T4 v
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
( R% V% X( q$ b0 W
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
9 Z. n# H1 K5 g: N i3 l: e
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
/ ~6 g3 u2 D. O) a: ~5 M# O/ R- a
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
. B8 X( ]& D7 X+ C$ x1 z
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
5 \8 n8 X; F' u& r/ @+ v
*/
4 A; g8 M1 ~3 R& g; v1 ^
7 `' |! U3 Y/ z: Q* K
var SR_0 = {
- @- q) m, u7 N0 n# q% s+ p
name: "SR_0", space: "data", access: "RWX",
+ {7 g6 |: T/ s A
base: 0xC2000000, len: 0x10000,
. P4 {& e( Q; k8 W+ I5 }1 A
comment: "SR#0 Memory (64 KB)"
6 ^* b! L& J7 l8 Q9 I9 F
};
6 r# |( A0 w/ U. v2 _1 O
! b! U9 S* U5 W' N- d
var SR_1 = {
$ ~3 D6 M2 B. l- Y5 t" W. m
name: "SR_1", space: "data", access: "RWX",
) Q1 n3 y7 L8 L& H! C7 u' j4 N
base: 0xC2010000, len: 0x20000,
3 G: w, v& j7 G. h. L) b
comment: "SR#1 Memory (128 KB)"
$ D9 Z/ N" b1 j+ [
};
F7 D: H( W* U4 }
3 S" h9 E3 ~' k' l5 E( ]
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
3 v1 B, `. j _" h5 f
externalMemoryMap: [
8 ]8 ?( [2 Y& F% Z
[ SR_0.name, SR_0 ],
c- v2 u% m' n; N6 d0 d
[ SR_1.name, SR_1 ],
/ w. I+ g: n0 c
[ "DSP_PROG", {
4 t/ Y; q7 z2 F! V9 `4 y. j! p1 n
name: "DSP_PROG", space: "code/data", access: "RWX",
2 i8 ?8 ^# R M. a
base: 0xC2100000, len: 0x1E00000,
* w( w8 c: _+ `
comment: "DSP Program Memory (31 MB)"
+ j& |6 m2 a. O9 U$ c$ O; R
}]
- f0 q" i2 Y6 Z0 f8 f
],
2 q& o4 f& m5 {, ?+ b! O) i/ a7 D
codeMemory: "DSP_PROG",
0 U3 D$ K, F- Q+ Q$ T. x
dataMemory: "DSP_PROG",
" K$ Q* i& l4 C. u/ x
stackMemory: "DSP_PROG",
T4 R u: v8 ?' B, g A
l1DMode: "32k",
- s# l3 o3 G% ^
l1PMode: "32k",
; K/ w4 h# ]8 A
l2Mode: "64k"
0 J* d0 {% }& J/ e! x/ v: {
};
- |3 Q" j# g! w* n) y/ a
) E8 @% R: @! m* A/ D" ?, d0 ~
/*
" u) @8 |( |$ b- f
* ======== ti.targets.elf.C674 ========
, R2 e0 ` k% N" H& r; e3 \
*/
H, Q6 d- t- D. g5 e' H
var C674 = xdc.useModule('ti.targets.elf.C674');
' k7 }% B1 ^5 b
C674.ccOpts.suffix += " -mi10 -mo ";
9 n Q6 [$ T6 q. o$ n1 m* C5 y! E
Build.targets.$add(C674);
4 @8 h4 Q" Y+ _2 U6 k( }% m
7 C1 G- \* S2 S, q; y6 P9 _
3 W% j h' ~0 ]% H. H
====================
: z7 V5 ?% b @, U5 m$ R# G8 {4 Y% I. e
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
2 w9 I" U8 E. d6 w7 V
作者:
kevinjoyo
时间:
2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
6 G9 N9 ^1 i$ S5 f& e
2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者:
kevinjoyo
时间:
2017-5-22 16:52
/* Memory Map for ti.platforms.evmOMAPL138
6 [7 j+ t s: r# T: y$ ?2 S
*
0 o: F# V, C6 T1 c. |; C' m% @2 ]. |
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
+ U) }/ \4 M0 X" h* U8 [ i
* ------------------------------------------------------------------------
# a1 O X" i' v7 p9 O
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
. M9 v7 c/ c2 Y+ ?
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
! a1 B8 Y, @- R5 | Q
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
0 w3 \" D* g; F% U
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
: V: _) h- u4 R+ s- {% L
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
% U* K6 ?# J: ]' c
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
$ y3 u3 ]* ~7 g( A
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
- E0 r4 t$ e# ~' t. p( l* N6 j9 Q
*/
! ^, q6 M3 `! ~2 s
如何将 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)
4 |! b0 X* ]! L# K
合并为一块大的区域作为dsp程序的所有空间
2 s. z; B; Z4 |7 N
( O+ z. ^; ^) L* _( ?2 K
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者:
kevinjoyo
时间:
2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者:
kevinjoyo
时间:
2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。
- ]( v1 l* l a3 L' f7 ~
# l! y. [; ?+ W& U' ~1 J
目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者:
teddy
时间:
2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
* a; R2 V0 k' |9 |
; L, j* [) Q: C! v7 |$ ]# b6 G# u. q( ?
40 /* Memory Map for ti.platforms.evmOMAPL138
& B7 k# f( Z6 T/ R5 N/ I2 x) e
41 *
" M: J$ v6 A6 p- N' g2 ?# j: K1 I
42 * C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
3 }. R$ O' {. X. A9 P5 N
43 * ------------------------------------------------------------------------
# e: E, V8 [( h4 q9 [+ E
44 * C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
% T4 H. f* p0 B$ K9 h( X7 N
45 * C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
, }/ Z* a0 q6 _, e* `
46 * C201_0000 - C2FF_FFFF FF_0000 ( ~15 MB) SR_1 (ipc)
& n9 Z% j$ {* n2 m. y1 l: o h
47 * C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
1 j8 k: M F, b4 h, L0 X8 L6 b2 m
48 * C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) SR_2 (ipc)
5 o+ x, t2 L1 }
49 * C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
+ ~# D0 l! b* E$ e4 v
50 */
. O+ ]6 x% T1 W( v; s
+ B" s7 m. m0 [- i
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
+ r& q/ D, b5 U. m: y
! @* }$ [; M- j" B: @1 D
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
1 h( o. g8 ?1 o9 k. _6 O
# U5 S4 |1 ~6 q3 Z
如果需要分配大容量的内存空间:
# r6 l. J/ \" ]" s8 }, w
1.改动mem_args参数(u-boot环境变量);
2 O6 o% H& b: |! D9 H! n3 [
2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者:
kevinjoyo
时间:
2017-5-31 15:55
这个问题是和
http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
- K" P9 U ~9 B* w
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
; u! g, [$ \& `* V e' e
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
& [" w' e) Q3 p4 ~! r/ x; }/ E2 ?
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4