嵌入式开发者社区
标题:
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端程序起始。
5 W: U R9 ~" u1 n- v
板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
+ v+ {8 `6 o1 D5 p# r
% G) y4 d- i& H$ `: h
/*
' H- s' t" L! A* i5 Z C/ ^
* ======== config.bld ========
+ D2 p& K3 ~+ x+ [4 D% E% {* x. i* Q4 I
*
# N% Y J5 O3 N& `9 @; B
*/
' w* [- N1 k R
% y) `: M4 u; \- S" W
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
* X; u: {9 W% e& F" O! A
" t \) v8 @; T. N0 ]
/* Memory Map for ti.platforms.evmOMAPL138
3 l& j4 C! e! o/ j H
*
( b- G1 o0 k8 a8 B
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
6 g, h; {0 c+ ^) u$ M
* ------------------------------------------------------------------------
# u5 c; U J" V! s
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
' B& [# H* z, h1 j
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
+ _& r$ i) z; S2 g
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
3 c: g: `8 p2 E
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
/ w8 m- B3 f' W& i" O7 J
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
8 b9 b- c, C. k* w
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
& R0 R; A! A k' y2 L- t& f
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
4 o/ Q, X4 L# h8 t* o' m9 [" _) j; C
*/
- l) I3 P& q$ k, _
/ z( a# h5 ^: f
var SR_0 = {
6 `! d7 f( R8 }
name: "SR_0", space: "data", access: "RWX",
5 }+ U! H8 q _# A/ m
base: 0xC2000000, len: 0x10000,
. [9 \7 D( E* A
comment: "SR#0 Memory (64 KB)"
. F, u' d/ v4 p
};
0 Z% N) O" w& N* Y# c9 E7 L& a" ^ M. E
7 i5 G% S) x4 v8 m) e9 @2 b% ~
var SR_1 = {
s, s7 O+ V$ L8 Y/ x
name: "SR_1", space: "data", access: "RWX",
& c2 d7 |; J D
base: 0xC2010000, len: 0x20000,
( a# T8 o5 ^- n1 K' ^# u+ ]
comment: "SR#1 Memory (128 KB)"
% S/ H" b7 k* t2 W$ T3 K: R2 q
};
: h0 b" ]5 }/ `/ b; R8 y1 _
( ?# a* m/ X$ U# |
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
/ M8 ]+ U6 v0 \ J
externalMemoryMap: [
; e: O& g& Y3 `# m6 B+ t: B- m9 x
[ SR_0.name, SR_0 ],
9 B5 c/ M5 d1 W6 i: v/ v
[ SR_1.name, SR_1 ],
# k2 X$ l; {3 [9 V
[ "DSP_PROG", {
. ~# ]" f8 ?6 Y9 O& h- I. U
name: "DSP_PROG", space: "code/data", access: "RWX",
) A0 L" l, g: g+ u( U; F& W5 r6 T
base: 0xC2100000, len: 0x1E00000,
. ?5 a" F, e4 E" Q% @8 H
comment: "DSP Program Memory (31 MB)"
n/ @, A* O. Y* u
}]
: s, u& n+ x2 a# \- k2 }
],
5 O9 x4 o1 L/ o) T4 b( _7 H
codeMemory: "DSP_PROG",
5 n0 H) e; l! l) n
dataMemory: "DSP_PROG",
1 ~1 K- T4 Q4 h
stackMemory: "DSP_PROG",
6 ^; p8 h) j5 ]! v% [1 L
l1DMode: "32k",
7 x/ h' J! E* x
l1PMode: "32k",
/ K/ x7 }6 w% k7 F3 _+ q
l2Mode: "64k"
# r- ^" `4 E* u
};
# ~# r0 j+ p* g, S4 O& Q
% ~) Z# r( M& X5 T
/*
) @# J9 B- G0 R/ T# @0 t
* ======== ti.targets.elf.C674 ========
; t; D. K' N: ]% Z5 J
*/
" T3 C$ ?9 R7 n4 K! t2 c% a
var C674 = xdc.useModule('ti.targets.elf.C674');
" C0 v5 A1 H3 a( z, b4 z+ c2 f# d
C674.ccOpts.suffix += " -mi10 -mo ";
: u' {9 ^5 P( ^7 y! \ D
Build.targets.$add(C674);
( j5 ]3 n1 G! c; Q- x% ~; R
* M6 J/ j. t E4 b( `7 e" h
, d: _3 ?; F& g9 h
====================
8 ?/ ^' s4 O+ s1 \) R, {2 P. f
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
, n, m2 I. R2 ]
作者:
kevinjoyo
时间:
2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
5 p& }! v9 n0 |. d: B3 d. `! ]0 F0 u
2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者:
kevinjoyo
时间:
2017-5-22 16:52
/* Memory Map for ti.platforms.evmOMAPL138
0 T, n3 \) V: U+ V& x/ U
*
' G& F+ P- U7 n O1 [' J6 t% ^
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
+ A. k2 J4 A& P* Z" W5 h4 c
* ------------------------------------------------------------------------
' q+ V* {; G, r w( G
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
" C" O* q. u" r# G( C3 s
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
7 ^* |0 i5 R* H8 X+ h1 M: |1 I% V
* C201_0000 - C202_FFFF 2_0000 ( 128 KB) SR_1 (data buffers)
# _5 N% i, s x: H1 g! f5 F
* C203_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
9 |3 t1 |+ \4 z5 J- }- ?6 E% L
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
+ P0 d* q7 d; r- \) y; V! d( k
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
% ^: { i! z! ^5 Y1 O' ^2 B
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
0 t+ l; P+ y7 N1 d
*/
! a' H3 S0 u6 B% f0 ^. {# q5 ]) |* \
如何将 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)
% a5 a8 T1 C& q5 r( H
合并为一块大的区域作为dsp程序的所有空间
* f- b: y+ N0 J+ C! [$ H0 B. K
9 U% u! s2 X* X8 h
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者:
kevinjoyo
时间:
2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者:
kevinjoyo
时间:
2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。
8 {" Q6 K+ m' S
) L6 P% N: g/ p1 M# J( s9 y' T
目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者:
teddy
时间:
2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
S& A8 b. H: H4 H; {. `8 |# v
O% o# g9 f( s8 T( [8 Q) B6 b4 Q
40 /* Memory Map for ti.platforms.evmOMAPL138
- z* e/ B7 o. L& j3 z' ]
41 *
5 g2 W3 U3 Z4 g% X1 B& g
42 * C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
% x+ {: ]$ Q4 R
43 * ------------------------------------------------------------------------
- c) ]" y5 [6 e# e
44 * C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
( X5 Y7 t" t& P2 I* C1 }' W
45 * C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
- o) w: Y Q4 e: e5 S
46 * C201_0000 - C2FF_FFFF FF_0000 ( ~15 MB) SR_1 (ipc)
/ F3 p6 p% N* m" k8 l2 ?4 d
47 * C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
+ r4 I% K, b# X3 e
48 * C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) SR_2 (ipc)
* v5 |/ Y1 s$ z/ { v+ M( _" C
49 * C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
3 }& ^% A, w" W
50 */
+ u1 N% [! ^/ K' Y
$ [# B, u+ J$ |& V
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
1 |' u# C! i7 s, X
; I+ k6 i5 m. O) V
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
6 m( d' \" C' d5 m/ F7 h# p) I( ~% c }
* G/ G: O% o, U, k
如果需要分配大容量的内存空间:
# k. e7 Z% d7 {( k, `6 e
1.改动mem_args参数(u-boot环境变量);
# d1 H% H. _: {' T8 }9 u0 N7 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=
' H) s0 w- d$ y( C/ P- B1 P
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
0 O0 d, @5 y3 s$ @9 r4 ?& q( A
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
! t+ `2 R' _9 Z/ z9 ?
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4