嵌入式开发者社区

标题: 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端程序起始。
( ?# z; _9 f7 J' w( i    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:5 ^+ \! {5 b6 [  d
  i- m, K- p: q1 _
/*
$ A# m2 e% E% r+ R$ x *  ======== config.bld ========5 D2 Z7 b! u  I" |* [( f& s/ r
*
+ n- X; _! `! p% c- e! ]6 K */& H0 W0 H6 f' E% x
! q6 {3 K: _; n8 P$ y5 Q5 f) n
var Build = xdc.useModule('xdc.bld.BuildEnvironment');: R* E2 W+ F7 A7 g7 m* r

, c/ U9 d$ h0 P# Z/ z/ L/*  Memory Map for ti.platforms.evmOMAPL138
3 K* Y5 N9 @) ] *- G" t. z! ^# {( d
*  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory( @+ P( K5 y4 k* Y( |5 m+ p7 Z8 k
*  ------------------------------------------------------------------------: o( m' C3 `1 F0 f& U
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux: [+ D* s6 ?0 m6 J. g
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)8 H5 R, I' Z4 u  a& i
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
& V+ h' i+ b- m. ]2 w' L  f9 ~' N *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------
/ N, R/ e5 O9 E0 ?2 g4 ] *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
& f& ~' O* v4 A" Z9 G) l/ |. _ *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------$ N5 `! z+ i* P6 q0 S5 a; ~
*  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
" w6 c4 t7 j* n4 Y- j: ?! Q7 U */$ S; o4 I2 @! K$ [7 c- ~7 ]1 Q
7 }4 r% `6 u+ V# w
var SR_0 = {
9 e5 p, N; o  B" }/ q( a8 D5 D        name: "SR_0", space: "data", access: "RWX",# F% i4 b$ _5 {1 I: L0 J
        base: 0xC2000000, len: 0x10000,
+ h0 [( a3 E5 ?5 ]        comment: "SR#0 Memory (64 KB)"
4 v4 u9 B3 W- b0 G( w( e& y4 T    };
& i( R- ^3 S2 g+ r+ A* L
/ e( W/ q" z& I) {# g- L6 mvar SR_1 = {
( j; L/ j! O5 T' j$ i4 U        name: "SR_1", space: "data", access: "RWX",
! H# F* B! r1 E5 C        base: 0xC2010000, len: 0x20000,% {" E2 J6 o/ e' }
        comment: "SR#1 Memory (128 KB)"0 x* m5 ^' Y" y/ `5 f
    };
( V6 ~9 s8 P1 \. _( G* b* y) l% d# h: S. _  e) H" C8 H
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
8 k3 r* ?$ q; G    externalMemoryMap: [
: l$ r9 B$ A7 B$ N/ A' K# n* T        [ SR_0.name, SR_0 ],
* M! V5 d+ i" g. C        [ SR_1.name, SR_1 ],9 W, p% Q* c3 L
        [ "DSP_PROG", {$ `" {- L$ F+ A& r8 `4 j
            name: "DSP_PROG", space: "code/data", access: "RWX",# ]  }1 A9 w. q, C
            base: 0xC2100000, len: 0x1E00000,! m' D: A0 S, w  I
            comment: "DSP Program Memory (31 MB)") s# O( N6 D& o! s: c
        }]
. H# ~" c- {6 P    ],
7 V5 d: W" L7 }0 C: i: v    codeMemory:  "DSP_PROG",/ O6 I3 s. t+ J6 b  d, ^8 K/ U! t2 P6 @
    dataMemory:  "DSP_PROG",6 w' T+ U# g$ n0 V6 S
    stackMemory: "DSP_PROG",+ E3 i1 y% ~4 w" C) A1 L8 r
    l1DMode: "32k",: c' d9 r. e! N
    l1PMode: "32k",
8 T1 c! @# g" n" V8 A) i    l2Mode: "64k"
: I3 [8 M; s9 d. ]2 Z9 ]* x. x};
2 d$ n9 Z$ `8 E" h; E! v% b. c" v- k
/*; a* P# m' i1 h& \* o- i4 m% a+ Y! a
*  ======== ti.targets.elf.C674 ========4 u; H" r' ]: x- F# F5 @0 e
*/0 N$ ^. l& I  Z  m
var C674 = xdc.useModule('ti.targets.elf.C674');
' i% b+ L* Z/ \8 g( EC674.ccOpts.suffix += " -mi10 -mo ";* z3 P2 `/ v" j, Z. r8 S
Build.targets.$add(C674);
$ h7 L2 c( B9 ?# F" C. Z4 N
5 A( R9 \! P0 g8 \6 f; d! }, [; E. H) j" G# C  o& v3 X# b
====================3 w1 u, f2 [6 w* A0 y, A% R
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。9 L8 G4 U, N* z/ i

作者: kevinjoyo    时间: 2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
: F) i" r% X' G/ K+ ~. h; Y2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者: kevinjoyo    时间: 2017-5-22 16:52
/*  Memory Map for ti.platforms.evmOMAPL138  Q( [8 f5 k9 u& N
*
; ]" v( n, A$ o. I+ f8 J" H *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
% p0 }. C% B/ V: t1 W+ E' Q' o$ X *  ------------------------------------------------------------------------0 ?5 d4 w# V- _( i$ c, Q6 m
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux3 s( R& ]" B: y9 l/ ?/ g! v
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)( ^6 c3 B) F6 v' b2 G
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)  Y7 s+ m8 z  p
*  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------$ X) Z) V; W) p: p$ t0 C
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)) v& I8 m. r' c% B. C; O
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------+ p7 l( @5 O. @! s: F
*  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux0 B  W$ p$ m% D) O7 b
*/
! e$ y+ {; r/ w5 A" y如何将 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)
1 I) H4 ]: e8 s合并为一块大的区域作为dsp程序的所有空间) y0 ]1 ^* [9 F. v  T
  N# n9 F( b$ w- m& F. d
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者: kevinjoyo    时间: 2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者: kevinjoyo    时间: 2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。
2 D, d% k4 p3 f' N! c, C0 p$ T
1 A; e. ]5 c5 p& _; M目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者: teddy    时间: 2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
- Q; Q3 p2 H& X- S' I
; U" U% N: _0 c0 Z 40 /*  Memory Map for ti.platforms.evmOMAPL138( ?$ i2 v- s7 L7 j% F0 n
41  *0 j4 `: i+ s1 `7 r0 ~' f- W
42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory5 t) l/ y! }  t0 j1 ]1 |
43  *  ------------------------------------------------------------------------! a1 W5 c/ x7 `3 h) k& {
44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
9 t* ~: u- P& g( {  k4 B& w 45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
) ~8 [8 N# c& v5 `2 B* G! m 46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)! h" e* Z! A2 U9 T: W# O( v
47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data): \5 Y0 J  Z: t8 l8 V6 J
48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)
3 ?6 B% i! R/ V! w 49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
% ?4 i# t; x0 I' x 50  */& \' e3 o$ R5 |, w% G
) G" I2 J5 L5 b
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。- e9 `1 \5 `) |
- P' _; I3 O% q- h6 h% T
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。0 i9 h/ G- M5 w% d, h

4 x6 f4 `0 K" N( Z+ J1 b4 N如果需要分配大容量的内存空间:2 L) t) u" S+ H0 z: _; _
1.改动mem_args参数(u-boot环境变量);
  N- c5 E6 |- p2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者: kevinjoyo    时间: 2017-5-31 15:55
这个问题是和http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
" S5 q4 x+ |, b. E2 a, |% G: e这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
- o8 C: V3 Q( ]5 \) p* Q6 m! Rshare目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
8 J! G* }+ A( h' m# x




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4