嵌入式开发者社区
标题:
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端程序起始。
0 V" [# P% \% |7 D _6 `
板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
; @2 {- i0 K. G1 ?
0 x6 m/ s5 c* H1 |% w* [( V( I A ?
/*
) {% o5 ~; Y9 N2 d4 F
* ======== config.bld ========
/ C. J3 N) H8 E# D S5 z
*
& J& B' f; T; I- I/ T2 t* ]/ y! H6 Q
*/
- G7 b0 j( {/ @1 A: t9 Z
2 G ?, v, y' i* ?
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
2 G3 n9 f0 `+ i; k
' h0 b$ C, X `) V- E
/* Memory Map for ti.platforms.evmOMAPL138
* E- o1 F$ t( s5 q
*
5 w J9 E: x3 s6 v3 o7 [+ `
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
/ S& D8 V1 T" q& n0 t+ H
* ------------------------------------------------------------------------
" X- ]6 d& c) M6 r6 K5 I3 a
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
* i' h7 a* L0 G9 i. h& Y
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
: U& C& H1 F/ l5 s; ?2 [
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
$ q0 k( e ]* b; v0 \2 H
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
- s% F4 n& n" w1 v* ?2 N8 e; ]% j. k
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
7 G0 I3 v C, U/ ]
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
$ b! n3 F2 e. b; y4 \
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
2 Z$ D8 A$ b9 @' y" {
*/
$ v- O/ A+ _) B
/ E6 R( s8 d- c
var SR_0 = {
2 w/ P% x& W) C3 z3 O3 d
name: "SR_0", space: "data", access: "RWX",
/ p& j3 }/ y& F' _
base: 0xC2000000, len: 0x10000,
7 ^! z$ s( c$ [
comment: "SR#0 Memory (64 KB)"
" l" l. i! s: `/ F% s) y, s
};
2 u/ Q# f$ V9 S* L! D
; e/ O9 W) Z( L2 t) ?$ V# ]
var SR_1 = {
& ~8 H. h6 z- C4 q9 p& l
name: "SR_1", space: "data", access: "RWX",
' N; M. h8 [- P2 ] f1 l! s
base: 0xC2010000, len: 0x20000,
$ g4 ^5 n4 k; e/ G- A2 q
comment: "SR#1 Memory (128 KB)"
3 a ?- S; J% C
};
3 ?' M% E- T1 ^# R9 o
9 X$ c8 `; R: V4 ]
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
1 p7 y! U# Z; z+ V
externalMemoryMap: [
4 e# x0 T( g2 O
[ SR_0.name, SR_0 ],
( I% o A6 P t0 D$ z
[ SR_1.name, SR_1 ],
; M) n: K7 w# l( X/ ~7 |
[ "DSP_PROG", {
, |# d' u, a9 c
name: "DSP_PROG", space: "code/data", access: "RWX",
- l6 v9 u7 W, \& [6 ^7 s
base: 0xC2100000, len: 0x1E00000,
4 a$ ]/ Y+ S1 ^2 d* h. U b
comment: "DSP Program Memory (31 MB)"
: I0 Q* n$ W0 B& ^$ o) N
}]
/ R8 M7 {( N+ P ` ~
],
/ j% x l: I; c4 F; {
codeMemory: "DSP_PROG",
8 H8 m! L4 a: R2 D) O* d5 j
dataMemory: "DSP_PROG",
c; b1 B$ L+ } _1 O3 w
stackMemory: "DSP_PROG",
% b/ Q+ @( ~- G5 S
l1DMode: "32k",
t; ~( M# u" L3 T8 j! i- C
l1PMode: "32k",
1 h% x. a, ~ c4 g; U1 e! U$ b* x
l2Mode: "64k"
+ }. O& B3 O! w L
};
0 l: o8 w( @6 U# _7 G- n
* e ]2 R0 S1 C3 [# N* e7 V# x4 ?
/*
) O: w9 g' O9 k5 C
* ======== ti.targets.elf.C674 ========
6 U# Z `3 w& s8 D. {7 P
*/
$ ]+ E0 {/ Z% @+ f% L, H2 s
var C674 = xdc.useModule('ti.targets.elf.C674');
# ^( d- Z8 _& T8 I- v) h
C674.ccOpts.suffix += " -mi10 -mo ";
7 _ F( F2 o- y6 s" }' s4 K
Build.targets.$add(C674);
5 d9 A+ Y' O- R, y7 J
1 d3 X: F# Z7 B4 H
* Y7 Y4 S4 `3 @8 W" g
====================
5 F' \$ e2 p! p+ X' O A0 e
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
. s' t& M& y% W2 r$ e v t# L
作者:
kevinjoyo
时间:
2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
( V4 A3 `- o$ c! s( J, i# E
2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者:
kevinjoyo
时间:
2017-5-22 16:52
/* Memory Map for ti.platforms.evmOMAPL138
$ j) F3 c( g( ^* z
*
/ i! E y- L* h5 B$ u! _7 N0 \
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
( V1 Q i8 N& H& W
* ------------------------------------------------------------------------
( D \; h) F" K! K6 A4 a X
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
- p8 R6 z3 d4 l. L
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
9 a- O% E x" l/ ` T4 u- K. u9 m
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
+ J# e+ t5 k( s- Q3 }' a
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
- O8 l7 t8 ^+ u* {, F' T* k6 B( o ?
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
+ d8 S9 \. Y7 M4 e$ r/ m
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
) w7 [' G' J# ^' s' s
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
2 B8 s% }' G- E- ^9 f4 w
*/
3 z7 o4 Y* g. W) |: T) W) c
如何将 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)
( ?+ @: q( o, E+ _/ l* |. P
合并为一块大的区域作为dsp程序的所有空间
" H& _$ f" Z- F+ ?/ [
5 ]7 X5 K5 l. ]
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者:
kevinjoyo
时间:
2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者:
kevinjoyo
时间:
2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。
% H' K, r5 _- A" e
0 f @+ X$ t' ^! k# f% R# a S
目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者:
teddy
时间:
2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
`: {+ q( z' M: v3 J4 @
) B4 x* Q( ]2 Q) r
40 /* Memory Map for ti.platforms.evmOMAPL138
( _$ v0 C! u( q) \' J3 t
41 *
( e3 a& q& N8 i- y+ [
42 * C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
' \4 G( j4 s9 q2 _
43 * ------------------------------------------------------------------------
p: J& z* v F! d7 X
44 * C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
1 t8 E _; B; c
45 * C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
) t3 n) b& G4 q6 G x
46 * C201_0000 - C2FF_FFFF FF_0000 ( ~15 MB) SR_1 (ipc)
- A2 ~$ s- E$ b H- W7 V2 k
47 * C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
) @+ \6 [& P" H: G; o
48 * C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) SR_2 (ipc)
$ R: k. }( W" L3 ?0 l
49 * C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
* S5 j' T: _7 R/ ~; s2 \
50 */
# e' t: {0 c) }: w$ g
, P' U9 j' h/ _6 P# H; H6 R
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
1 {: S+ y9 H" E) u" `- L! L- e, c
! o4 m! g+ I" e2 ?
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
% J9 `7 y0 P/ f6 h& _7 _
$ a' h5 ~' I; ?+ J2 r
如果需要分配大容量的内存空间:
. W/ [8 q* s2 u
1.改动mem_args参数(u-boot环境变量);
; f+ R6 R( s) }
2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者:
kevinjoyo
时间:
2017-5-31 15:55
这个问题是和
http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
1 y# b7 F6 G/ H6 c
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
0 \7 v/ a/ f" f% a" l$ r) A
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
6 {; `9 m% C& Z, G7 j) S
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4