嵌入式开发者社区

标题: 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) Linux2 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 KBuild.targets.$add(C674);
5 d9 A+ Y' O- R, y7 J1 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) Linux2 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) Linux1 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) Ashare目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效6 {; `9 m% C& Z, G7 j) S





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