嵌入式开发者社区

标题: 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端程序起始。
6 q$ e3 ~9 V0 C, S* {    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
6 U8 d! P$ J% }/ Q
* q5 }% E1 w( [/*
4 i) Z& u6 I& ?  u- ~ *  ======== config.bld ========
9 i  q4 u3 A* q% Y% k. w" f *( D( P3 u+ R" E7 d; f  _
*/
% f) U0 Q2 ]& k5 M3 m7 y. x" T- X8 d
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
& d+ k: z6 i: r1 m- R& H5 P8 _) H7 g/ `1 |0 M, x
/*  Memory Map for ti.platforms.evmOMAPL138+ H" e1 g/ t+ V  U
*7 c; y- D( f  w8 \) b
*  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory2 ~  R  c- E5 I1 t
*  ------------------------------------------------------------------------0 m7 Y" y; Z, C, H
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux) C- e# P( R- x9 `4 _- N* z9 d2 }
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc): j  ~; A1 V8 G1 a9 e9 S9 y
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
9 X, M( e! Q5 r& ?0 g- K+ x *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------" R: U3 s7 Z1 n8 N' S
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
1 B6 g2 j( V* |2 ]6 O* g* i *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
5 w' t: _" P- ~: X* r9 a *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux( Y% ?* h% E. P$ b% w
*/
) [/ ?5 {, H; b) H4 t
  z+ v" p+ _2 _+ n6 C( tvar SR_0 = {
) y9 X3 `3 q. M, _( \$ `) Z9 G        name: "SR_0", space: "data", access: "RWX",
" y  Q, \( q* {5 I3 ~( A: L        base: 0xC2000000, len: 0x10000,: e8 K. Q" z6 F& R' W
        comment: "SR#0 Memory (64 KB)"
) \0 u, E; ]- ^  l. `# [    };5 X5 Q$ T7 O7 m$ c2 }4 H3 Z

) {; M- A* W# L2 q8 b* N( Z' Y# Ivar SR_1 = {
6 D1 F+ |0 T0 Q6 X        name: "SR_1", space: "data", access: "RWX",
* n1 I' @$ F" m0 ^$ Y8 M' J0 S; ?        base: 0xC2010000, len: 0x20000,$ N4 X1 A1 @! b3 r) O/ S4 H4 I2 P, i
        comment: "SR#1 Memory (128 KB)"! o2 ~! U! S7 [' B7 z
    };# u3 W/ D* ?; B- T0 t8 D% x

4 R# s: `7 O2 E5 WBuild.platformTable["ti.platforms.evmOMAPL138:dsp"] = {+ w- q. e; E5 l. J' J3 W1 v  ^- c5 I
    externalMemoryMap: [
/ f0 Q9 `! R) i% O0 M        [ SR_0.name, SR_0 ],2 o, u! `6 W6 y2 J4 H
        [ SR_1.name, SR_1 ],
  o2 W# O/ w- l) o' H  {        [ "DSP_PROG", {9 s% u7 i. N+ @7 B- |8 H7 b' u
            name: "DSP_PROG", space: "code/data", access: "RWX",
1 e" C: ?9 i2 I! P            base: 0xC2100000, len: 0x1E00000,
4 `* O7 w% S0 o* R% c( {4 ?            comment: "DSP Program Memory (31 MB)"8 p/ Z6 {4 T/ ]& b# @/ {: U
        }]
! U, [8 U# I& w' d" L: e. k! u    ],( @+ f% K8 n' [8 j( w% q" `1 M# j
    codeMemory:  "DSP_PROG",
1 E; }7 i7 c$ ?    dataMemory:  "DSP_PROG",
# k" H& x# s) [. }    stackMemory: "DSP_PROG",
  P* ]4 N! Z' h1 \, Q    l1DMode: "32k",) u4 H$ Y6 Y0 i- x6 g
    l1PMode: "32k",  R) c5 ^! v' y/ g" j( P
    l2Mode: "64k"6 o- J  Q2 ?0 F3 u$ Z
};# B! n0 a: x+ z- J9 a& h
( P1 z% I5 e: u# X8 c6 R
/*
9 g7 q: W& R8 A7 J0 M+ G) X *  ======== ti.targets.elf.C674 ========0 b* W; {5 @7 P/ \% v# o
*/
5 I6 C' E1 f" [var C674 = xdc.useModule('ti.targets.elf.C674');. V' c3 p. K* G+ c
C674.ccOpts.suffix += " -mi10 -mo ";, B. z" C/ U' `
Build.targets.$add(C674);
8 H' g, s( D) l5 c1 e
' _* y- ~+ ]2 q5 y
- o0 O8 `4 O! s+ r2 n====================
+ S0 E" Z- P6 X  K( }1 T原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。8 S3 b! T3 r. Z0 t$ V% z

作者: kevinjoyo    时间: 2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
# @0 B: G! m& U$ ~1 ]2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者: kevinjoyo    时间: 2017-5-22 16:52
/*  Memory Map for ti.platforms.evmOMAPL1382 L, U6 o& Y$ i! e; c- g: ~
*' ^/ v) f) e# T) w
*  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory* o+ \# s: X  w8 x! X' T; w
*  ------------------------------------------------------------------------( T6 o( ^' S; V* V1 b6 H
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux7 N/ o' T7 p7 G9 X5 R+ N
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)2 m( J% s9 _6 |* y
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)) X+ `3 H2 D# w7 p/ X
*  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------9 V8 O- _9 c7 k+ Z$ s
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)! L$ y; ?! H2 G
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------; a2 Q5 {: r: g0 p
*  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux2 w+ k( M( E$ U! w  R8 ]+ T# V
*/
5 ~+ @( K& [; P/ S) Z如何将 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 z3 t# Z  m$ S, r( u. I
合并为一块大的区域作为dsp程序的所有空间, r" z0 l; J5 \( y# q. Z

. Z" G8 v0 Q5 G; d现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者: kevinjoyo    时间: 2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者: kevinjoyo    时间: 2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。* n4 Q+ }2 l9 i  m& L8 E

0 j; R# b9 n& w4 W. J' h目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者: teddy    时间: 2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。& r9 o, t6 R9 e1 d4 Y
; o9 x8 [; k2 Z) [2 J4 r
40 /*  Memory Map for ti.platforms.evmOMAPL138
8 ?- F( J: s4 _5 p) O5 V+ {+ k 41  *9 H6 |" t5 Z$ g+ k; g
42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory9 i! x; A1 q4 m% k# H& P( s
43  *  ------------------------------------------------------------------------
. V( s2 w! {' L5 G3 F; f 44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
3 W, G( E5 k5 `, d 45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)- w/ b% d+ r' H0 `
46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)# C) \( U! K: v. ?1 {4 C# s
47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
/ Q; ~- @6 k- {. K/ G. p 48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)( Z& q" \  v+ _6 C' y
49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux, z. Q) q3 F, M8 q+ q/ `( I
50  */
8 m8 R# I/ g0 Z+ B" C/ d7 ^  O" F( l1 W
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
0 \- {; U5 \3 m+ c/ M% s) E! _; m# L# F) l- p" ]4 j2 b
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。! @& @5 G+ _& w6 v1 u
( o+ `; H/ e& }+ S: d
如果需要分配大容量的内存空间:/ m$ s7 O8 d$ l! q; J+ O2 f
1.改动mem_args参数(u-boot环境变量);& @- H1 S! i3 Z) O% r6 p7 F
2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者: kevinjoyo    时间: 2017-5-31 15:55
这个问题是和http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=4 T1 [* m( O! J1 ]: ?9 h
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。' l- i# t4 U% m" }
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
' b6 N% S; W' |  [" b& j




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