嵌入式开发者社区

标题: 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) Linux5 \8 n8 X; F' u& r/ @+ v
*/4 A; g8 M1 ~3 R& g; v1 ^

7 `' |! U3 Y/ z: Q* Kvar 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' Hvar C674 = xdc.useModule('ti.targets.elf.C674');
' k7 }% B1 ^5 bC674.ccOpts.suffix += " -mi10 -mo ";
9 n  Q6 [$ T6 q. o$ n1 m* C5 y! EBuild.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& e2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者: kevinjoyo    时间: 2017-5-22 16:52
/*  Memory Map for ti.platforms.evmOMAPL1386 [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' eshare目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效& [" w' e) Q3 p4 ~! r/ x; }/ E2 ?





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