嵌入式开发者社区

标题: 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 \* J& f/ K! H; O$ _( X' @# n    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
8 E& W  j9 Z" k9 C9 A
" F( [0 C- K0 J  N7 }/*3 m% k% L$ P6 L0 E
*  ======== config.bld ========  ?  s  V; [5 P6 M0 T  `1 H: O
*
1 Y  u, [' \" Y2 V */  C# d( i2 J3 F$ d) C5 h* a
/ g& G% q, B; I* L0 w* _* J
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
: ?& ^/ z0 S2 f0 u% A& }# H! u1 j8 A' I* N/ [7 z$ B) N
/*  Memory Map for ti.platforms.evmOMAPL138) a1 l6 e; |! Q! y0 R' O( T0 B. J( A
*4 B+ j# Y( p7 p; S5 j/ t
*  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
6 `: C3 k6 k) C: V7 H3 G+ p *  ------------------------------------------------------------------------
1 {. T5 s$ y; p *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux3 G) q  j  O( g- T3 G' a
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
3 _3 h  q5 x+ S- J1 W# f *  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)% z7 E" c2 y4 I$ T& c
*  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------, v! E1 _5 i# d& H
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
. z) Y6 f% U; L5 |+ V5 q *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------# {" }; e! q9 p4 @" u
*  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux3 [6 v1 B% @$ a; f
*/
) e2 ]/ e& G0 p; I
1 r( G# Z4 G$ x0 F5 e2 J+ ^; Ivar SR_0 = {
# I5 R7 g. t0 m9 B( x4 d$ Z        name: "SR_0", space: "data", access: "RWX",
" e9 z' J9 \" @- r& ~( j- _0 Q3 ~        base: 0xC2000000, len: 0x10000,
8 h, L, |( c; N0 i% g1 Z9 ]        comment: "SR#0 Memory (64 KB)"
  a5 z7 N% g6 |9 k4 g( _    };
; l8 W5 L2 l7 G8 B
+ M5 J* K' E7 [; k; Gvar SR_1 = {
: T7 a: a2 Q, d6 m        name: "SR_1", space: "data", access: "RWX",
% [0 \0 a# F4 o8 L# s9 J8 I: n        base: 0xC2010000, len: 0x20000,3 s7 A/ V& u( ?) m* k9 r' O
        comment: "SR#1 Memory (128 KB)"
" @8 q6 k  z3 ?% ]' t3 H5 \7 z    };& @# V1 q& ]- P! }7 @3 ^& w

) }6 _# L7 l+ W1 C3 QBuild.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
* P5 v: S- H0 a    externalMemoryMap: [
$ ~- ]; M) Q8 r4 d& O3 O        [ SR_0.name, SR_0 ],7 Q0 h- P6 A: Q# U4 ^
        [ SR_1.name, SR_1 ],
. R7 x' M. P# a7 O: S, O        [ "DSP_PROG", {
* q( [" b# R4 v; C) I- j            name: "DSP_PROG", space: "code/data", access: "RWX",1 [/ N; |, q1 b! U
            base: 0xC2100000, len: 0x1E00000,
8 i* I: w( s9 i- C            comment: "DSP Program Memory (31 MB)"
, r" f: q& B; V/ E/ `. s1 @        }]. L/ ?; X7 s- F" k" i) |
    ],- b( L' M# I3 X7 c: W
    codeMemory:  "DSP_PROG",
6 Q) \7 Z9 c8 C/ k3 ~! j& |: R& j/ c    dataMemory:  "DSP_PROG",4 ?. E& \% _1 R( m# W; e. s
    stackMemory: "DSP_PROG",
! }% w& F& y/ Q! ^: M" M: W    l1DMode: "32k",
0 J$ q" x) S; u    l1PMode: "32k",
$ R4 B% A) h8 a/ @8 c* g; w4 y    l2Mode: "64k"
+ [) b1 [5 K8 Q* M  A* B3 m};
1 D* s' I3 b/ P3 G0 j$ j& g
- V1 [1 |% S" c$ a# G3 G/*
+ F# w% f4 L: ^' d5 m7 \( B *  ======== ti.targets.elf.C674 ========7 c' n: @7 Q1 B
*/+ `6 r. e; j* Z$ {
var C674 = xdc.useModule('ti.targets.elf.C674');0 i2 [; E4 g( \* h1 v
C674.ccOpts.suffix += " -mi10 -mo ";
. N* L" h& M6 K& aBuild.targets.$add(C674);. v/ [: x  x7 ?) N* Z2 f  @9 |, R
- D0 E) G9 V$ P6 i
- R( O3 o& U' x$ S7 O
====================6 O; r% X* E. ^3 G
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。. ~# U& o- C: Z1 [

作者: kevinjoyo    时间: 2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
  n  G- h& E4 @5 v5 I  G2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者: kevinjoyo    时间: 2017-5-22 16:52
/*  Memory Map for ti.platforms.evmOMAPL1389 `) b) ?% @  n, _. x- B" W* g" Q
*
, a: Q. A1 p4 b1 X4 U) A5 M *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
" w0 O9 t1 @  o# v$ A" R2 \; p; G! g *  ------------------------------------------------------------------------4 ~5 N: x; p3 r- Q4 c; c0 l# Y
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
7 L( `) T; S7 N2 ~( w+ [ *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
1 |+ Q" p' [7 {4 h& |/ w4 q8 s2 v *  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
; d+ f7 S3 k; N  h  f+ z *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------2 D7 [# X3 x6 U. G
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)! p6 }8 V4 [  O. {2 Z7 g
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
6 @! @" a( W! s' f: M3 _ *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux$ i- G& \) l# t5 w% b7 \
*/& {  y5 P  N- T% A7 }" r9 o2 W
如何将 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 j1 k3 k: ?4 q$ z1 e" m合并为一块大的区域作为dsp程序的所有空间8 g8 ^' f7 ~4 y7 S; G: x

0 V8 S0 x4 h- \  _1 x现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者: kevinjoyo    时间: 2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者: kevinjoyo    时间: 2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。- c" _$ ^& e0 F& q% \" S$ c, r

+ y. E$ h4 L3 C$ \( h/ N9 Q目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者: teddy    时间: 2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
0 }* y+ A* G! V& g
+ ?, u8 Z& J7 S: d7 W 40 /*  Memory Map for ti.platforms.evmOMAPL138
% s7 C2 l. o5 }- a0 J# n. i 41  *) z/ [3 A' ?# |3 o' x: G
42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory. w  |- d4 K/ P; y; i( C
43  *  ------------------------------------------------------------------------! g( V" K2 n. ~; @* U
44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
* m6 q) A& O; N0 R3 T$ B 45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)1 ?# R8 p- s+ e
46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)! {* T. h- i$ P
47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
$ A3 G1 h0 {  r0 ?9 T, \  J 48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)! ^% W* C. `/ _) i* F2 P
49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
) N3 D  S) S$ ^3 | 50  */: ^7 x; w/ U; w) G

. N/ X& a9 f& l! l4 S如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
- w! F; n$ V- D3 }" R
9 Y% f& P; U4 y* {- B一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。% O$ s+ Q7 K5 ^) u! P

" z  m. `8 A1 \) _如果需要分配大容量的内存空间:; t; m4 V9 o5 F& n- Z8 P1 @6 M
1.改动mem_args参数(u-boot环境变量);& x) F0 c7 H' Z" o" I8 @4 e; x
2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者: kevinjoyo    时间: 2017-5-31 15:55
这个问题是和http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
+ o) \, [' R( R( l. P) b这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
( \0 H1 n% s- A. W* Q' [' }. oshare目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
  T7 y! s/ \- J  F8 M1 T! [: v




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