嵌入式开发者社区

标题: 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" hC674.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 [) ]( V9 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 E1.改动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" tshare目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
, N% r# f# I( {: D




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