嵌入式开发者社区

标题: 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端程序起始。
, n5 G: S. p( M& `- L) U) T    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
# r  o5 }* d9 X/ z
% h7 g8 [; ]5 V2 E$ N- J* V/*2 `) I. n- N: N( `
*  ======== config.bld ========
3 V& }' u- @6 z2 v/ S+ N( b7 ^/ S *; D3 V9 F& V& ?5 K; c# }; U3 k
*/( b+ [# L- a. y% t

8 P, l9 x- u  p; }6 M) f) n6 q: }4 S6 Avar Build = xdc.useModule('xdc.bld.BuildEnvironment');5 s# r" `# D! L8 k7 G# J2 d6 T

% Z* u+ U9 y; P; K. k, F- h5 b; f8 {/*  Memory Map for ti.platforms.evmOMAPL138( G, H: y3 t, `" \$ }/ W8 O7 P
*+ G( H+ h( v/ W
*  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
) w+ g* J, f. e1 y; ]. e *  ------------------------------------------------------------------------3 W, [2 i7 Q+ B! N
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux/ Y% {  c( ~& a" W$ y6 S
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
3 A! l3 _; c' s *  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
# u& A- Q* ~) u" o% N *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------& F: k; m! c% \2 h$ t9 ~
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
3 A' {7 j2 I5 }# g *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
# n# l. b" ]. l *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
  [! q* i$ [0 {. H9 Z */
1 x* ]  }* L* g9 l% ]
+ L: B3 c) ~  V# K6 j9 m, L$ T6 Svar SR_0 = {
" Q8 d0 N- o9 Z3 i0 v7 r" a5 F        name: "SR_0", space: "data", access: "RWX",  {; a. }; x/ ~9 D
        base: 0xC2000000, len: 0x10000,. h0 K) ~) H% K6 q
        comment: "SR#0 Memory (64 KB)"
# ^( ^1 `4 p0 @' n0 D    };5 j8 [+ v& Q3 |9 c
8 h& M! p- R) {. a
var SR_1 = {; M' L5 \& M, t( r; }# [% p' ~
        name: "SR_1", space: "data", access: "RWX",- d% \$ m2 W# P2 R. O9 ^5 D
        base: 0xC2010000, len: 0x20000,; ^2 X$ _* Y9 ?# v( P
        comment: "SR#1 Memory (128 KB)"
* t1 _- J! x  l6 y0 r" x' P* v! T    };0 V7 ?( @- k) x
9 ]& ~- ]6 ~7 b1 M/ J
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {1 w# {7 P4 P# q, Z! i4 `1 V. V
    externalMemoryMap: [
* i# `% R# U( k, w        [ SR_0.name, SR_0 ],' S5 Q( T2 D( n2 y* T  X
        [ SR_1.name, SR_1 ],
9 |/ V/ |, z: i" `! \        [ "DSP_PROG", {
& @/ a( j9 x( z' d' |" p            name: "DSP_PROG", space: "code/data", access: "RWX",; V4 r1 t+ R3 \
            base: 0xC2100000, len: 0x1E00000,
% k5 y0 K, R7 e& e% j            comment: "DSP Program Memory (31 MB)"
/ n" e* t; f6 Z) \        }]
  D( a( Q1 y! [0 U* a9 e9 h4 {    ],! e1 i9 z) {* u$ t+ c
    codeMemory:  "DSP_PROG",
6 g! M7 |2 B9 E/ v, j; y5 u3 I2 B    dataMemory:  "DSP_PROG",3 c* P+ B% D% i" r
    stackMemory: "DSP_PROG",
5 t1 _  a" W' @3 g    l1DMode: "32k",
- p. O3 k8 p+ ?9 M7 n/ l8 v    l1PMode: "32k",, E  E+ g: Z/ w
    l2Mode: "64k"
9 V4 `8 L* _- Q6 T4 A};
. w( {4 _* S* j+ w, g
' s* `& B9 U9 Y- }/*; |2 A% Q0 L  t- b
*  ======== ti.targets.elf.C674 ========; N1 c! D+ {6 ?) m8 `
*/
, u. N* D& i! P3 n# ivar C674 = xdc.useModule('ti.targets.elf.C674');
/ H' ]  T, C8 ?C674.ccOpts.suffix += " -mi10 -mo ";
0 _. n# [! r- QBuild.targets.$add(C674);( R9 F) J) [' Q7 R* w
1 P$ {# f" e7 o* g2 ]6 s% v7 y
# G4 q1 \: R9 v+ {
====================
8 x% I2 S" j/ S- l$ i, l% O: K原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。' Z- ]% U% o* E8 J

作者: kevinjoyo    时间: 2017-5-22 16:44
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?9 H7 D3 t! T& @
2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
作者: kevinjoyo    时间: 2017-5-22 16:52
/*  Memory Map for ti.platforms.evmOMAPL138; {: u- \+ V7 Q( F" U" M3 v
*
" r2 z! l6 |) r) S1 g" X" M0 Y  _8 a *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory- N" T  r/ v  Q8 L8 S/ R
*  ------------------------------------------------------------------------
$ b; w! H* l& i8 I8 n# r* H4 C *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
3 D# g; X  ~; I' _! B* q/ a *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)# k5 {1 Q$ z( M' d( [
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
  W0 B5 A7 ~* R5 W7 P1 x+ J *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------8 w; _' ^0 o: J1 U6 \7 ~% p
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
/ s5 a- s) r/ n *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------# d/ L4 n  R8 Z$ ?, n% \/ T0 I
*  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux6 h; Q2 _) i( ?8 \# W2 G) c8 e  w
*/
5 Z1 t$ G1 s) g7 b9 j如何将 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)3 F% u" B! N  j9 Y" V7 n, L
合并为一块大的区域作为dsp程序的所有空间8 o, D0 W; T) L1 Q. Z& y
; b# k/ P# L- f( e2 |$ K
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
作者: kevinjoyo    时间: 2017-5-23 16:16
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?
作者: kevinjoyo    时间: 2017-5-23 16:53
发现slaveloader的list map就是编译时的map文件显示的地址。* t1 m# }! {2 m4 o: i% f4 A
: O' }, n# [+ n9 I: O
目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
作者: teddy    时间: 2017-5-23 17:31
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
3 D! @0 I. ~9 s- l1 w' G5 m2 o% X6 k$ k! M- K
40 /*  Memory Map for ti.platforms.evmOMAPL138! P; V1 L$ H& O0 q" r  h( h8 b
41  *
! X$ P2 C8 C. b% m' O: ^" J 42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory! }: t; _* g6 c% ]  A6 u
43  *  ------------------------------------------------------------------------7 o  ^5 L  T; p  l% c! [/ I0 Y
44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux: x3 d& v+ ~, q3 y3 R& ^  ]6 |7 t
45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
0 |  e! o5 {3 P/ P! l 46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)
0 s+ z' e7 x1 N+ |( C$ b 47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
% _2 x1 d, @3 J/ V 48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)
  {( {8 ?2 I* i$ a+ k0 c! m$ m 49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
" |0 e2 z0 D$ K 50  */
4 f; ?) e: P% U9 c) `
4 @* l+ p4 U) T/ I0 O如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。( }) r+ I4 t, _0 N- i0 G8 b
, q3 F; K) E- ^7 B5 _0 S
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
' X: i; B3 U' ^
) {# k7 Q6 k0 x& z如果需要分配大容量的内存空间:
% O9 _% e4 Q7 D8 c& E1.改动mem_args参数(u-boot环境变量);
7 \3 ?, y) G0 A1 w0 l+ j# b2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
作者: kevinjoyo    时间: 2017-5-31 15:55
这个问题是和http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
( m# z2 r* X  X4 |5 ~6 Y/ J# y这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。& H" E7 N* B" o, q
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
# ~5 u* Y# k) b- q7 P! V0 F




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