OMAPL138arm核跑linux+ipc,dsp核跑sysbios+ipc,重设dsp端程序起始 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6891|回复: 6
打印 上一主题 下一主题

[未解决] OMAPL138arm核跑linux+ipc,dsp核跑sysbios+ipc,重设dsp端程序起始

[复制链接]

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
跳转到指定楼层
楼主
发表于 2017-5-22 12:48:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    OMAPL138arm核跑linux+ipc,dsp核跑sysbios+ipc,如何重设dsp端程序起始。/ A* {3 o- v6 e
    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
* j3 m9 v# P% z; t' ^! V2 u: ~" \2 e7 f
/*
: e" ^/ _7 [& N( e3 c *  ======== config.bld ========  v6 [" O. P$ d* b
*
6 E, W$ W# l3 w- z1 F */
* f* g% Q) M  s3 Q: u$ M8 W4 O4 R; u* E5 W# a# a( q2 i  ^
var Build = xdc.useModule('xdc.bld.BuildEnvironment');' O( U* `  K1 n1 d, O- q
. D6 z; v+ y5 A' ^+ j) {: W2 |
/*  Memory Map for ti.platforms.evmOMAPL1381 h! K/ t8 g9 M$ J
*
: U: S# A" e7 g1 }1 f* X. @  X# o *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
- }) i: V- p2 b% \8 S3 p *  ------------------------------------------------------------------------
) U2 d0 J+ a" s/ s *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
  w  b6 _5 z6 h9 h; p *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)7 b9 Q' F0 W1 o0 C* x
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
) Q0 V" w" T; D" ]2 ~ *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------4 y0 N( I4 `( K  c% N
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)% Y3 m" o0 j: }/ F/ a, H4 u* e
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------# N( r* v* m0 [6 M- y7 k2 [  J
*  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux, Y$ f! f' j8 J% R8 W
*/0 Q% C. C6 F& }' ?1 u. _" u

9 l+ j# O( X/ i( w7 T( zvar SR_0 = {
* ~* b- X: \1 C( ~- D5 R/ c  p# y* y        name: "SR_0", space: "data", access: "RWX",# I- L4 i' n% p, V
        base: 0xC2000000, len: 0x10000,! L. j. t: s4 g" _) M5 _
        comment: "SR#0 Memory (64 KB)") n3 d! i) x+ M/ L8 P. ]
    };
" g- s: s- p6 T# m( ]" i5 C- z3 V4 L* n8 Y
6 m  x6 {2 N- y& T; Y7 Lvar SR_1 = {: |9 ~. B  K+ r( P% b- M: x
        name: "SR_1", space: "data", access: "RWX",- j) l$ k- X: {  X# w
        base: 0xC2010000, len: 0x20000,
+ V6 P) l/ L4 w# s* \7 u        comment: "SR#1 Memory (128 KB)"
6 t4 k% W2 O" \! ?( m    };
1 t- I8 x- }" v2 h  h: c  ~
8 j4 a& x7 h7 ]6 w* D6 S- t9 a* BBuild.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
9 U9 n6 r- `' h; A) g    externalMemoryMap: [" B+ ^! ^* u3 c9 |
        [ SR_0.name, SR_0 ],
0 l, N6 H/ N) F" a        [ SR_1.name, SR_1 ],
, i$ H% F; [( g: o' c! V        [ "DSP_PROG", {" {2 f0 b: i$ c# k' h( k
            name: "DSP_PROG", space: "code/data", access: "RWX",
+ U& r; q) M0 [/ {9 T6 K2 p! C            base: 0xC2100000, len: 0x1E00000,; h. l3 ?/ I1 X2 A
            comment: "DSP Program Memory (31 MB)"9 {* e, C5 O6 H# B  c& S$ W
        }]
0 m0 j7 Y% i6 e; W* V+ d4 u7 |% M    ],$ ?- n% {- a( _# }; Q
    codeMemory:  "DSP_PROG",+ c! O; L# A' N$ _+ {2 i4 G
    dataMemory:  "DSP_PROG",( y4 w# e( }! C
    stackMemory: "DSP_PROG",
2 M1 j) Q* b4 `$ }: T  _7 j    l1DMode: "32k",2 Z( O. ]" M( p* h
    l1PMode: "32k",0 g' q! @* h4 x' \$ m$ T1 {/ Q
    l2Mode: "64k"
* {9 ?9 \7 ~) Q/ c! `# c% ^};
1 p0 _1 i2 |- c+ {* K  d& B6 I. o# O. y# ]( u* l$ M: D
/*$ D9 o( I* j4 \& w8 M
*  ======== ti.targets.elf.C674 ========
# c. R+ R0 L  G! A. L0 P */8 c5 P  K4 _( e* F
var C674 = xdc.useModule('ti.targets.elf.C674');
: L3 X9 D" F4 h: E$ E0 C$ [C674.ccOpts.suffix += " -mi10 -mo ";3 @8 j4 P# d/ @# S
Build.targets.$add(C674);
: n8 T* F& f6 l" A& G( ?1 I: W( M. t, l8 Y) s9 b& w/ @0 z

, @  v" p) z6 y: A0 y& w====================
4 `2 t& G0 U9 i2 c; h0 E9 x原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
! J  _) g4 z/ V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
沙发
 楼主| 发表于 2017-5-22 16:44:41 | 只看该作者
1、直接修改config.bld的DSP_PROG,编译出来的文件map起始不是设定的0xC2100000,还是0xC3000000,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
8 G( |  ^" H7 ]* Y% P+ C, R8 ?2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
回复 支持 反对

使用道具 举报

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
板凳
 楼主| 发表于 2017-5-22 16:52:35 | 只看该作者
/*  Memory Map for ti.platforms.evmOMAPL138
0 e# l# F! s5 ?7 }" N *
& o* P2 l2 [0 w1 |2 I' `1 N *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory" J& }' C& m; n
*  ------------------------------------------------------------------------- n8 |: B: O+ @9 O4 V' B: |
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
! g9 d+ B. o. [" ?& X/ [: u *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)5 ]% U7 D; |) X1 }; N2 `
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers); l4 |' K5 z. v6 B
*  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------
* c) f# b% M% t) z# u; r *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
( k$ H- |) `4 H5 A# c0 U *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
0 r; N! l) e  f" p; ~ *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
! I% K) |9 G; Y3 O/ Y" @! s  s. c */
  w7 _, x$ K! u% t如何将 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)
( T1 W+ b, W( f: _2 y" P合并为一块大的区域作为dsp程序的所有空间+ Y' @+ _+ i$ X/ P9 T) }
% T; R. u9 G6 }0 D
现在发现修改平台文件只要用到0xc3000000之前的空间就出现arm和dsp之间的ipc相关都出问题
回复 支持 反对

使用道具 举报

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
地板
 楼主| 发表于 2017-5-23 16:16:08 | 只看该作者
请教这个slaveloader的list map怎么阅读,同时这些内存入口定义在哪里?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
5#
 楼主| 发表于 2017-5-23 16:53:03 | 只看该作者
发现slaveloader的list map就是编译时的map文件显示的地址。( a9 }5 \+ O- s8 G2 N
* D/ J# [, u, r  O5 U
目前将dsp的地址由0xc3000000改为0xc2100000(或0xc2800000)起始,编译之后的程序,arm端和dsp端的ipc建立不起连接,不知道创龙这个还需要修改哪个位置?如果是c300000前面8m和后面c3800000起始的8m一起使用程序没有问题,这是为何?是不是c3000000前面的地址在linux端有什么设置啊?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2017-5-23 17:31:09 | 只看该作者
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
, C. ]0 j  C) H5 s! ]# D- I6 e# e  D* n
40 /*  Memory Map for ti.platforms.evmOMAPL138
* x; d1 W  ]+ c$ V7 D 41  *, P5 w# U+ L* E. M
42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory' K( U3 f8 v: z6 N  C$ }
43  *  ------------------------------------------------------------------------; w8 G# Y9 u5 a5 T' c! @
44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux9 ]$ [* v) t: t
45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
- z% m- x; x2 D$ R  u- f" r8 B 46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)
8 n  k% r- @" L9 v# H 47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)8 n* V- M3 z9 C6 B( e# c4 o
48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)+ N( }" ]1 K2 s4 @# a8 g% ]
49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
; r, G. O2 v* ]/ L 50  */
% Y& F+ X7 x6 [7 e6 ]5 w0 u9 V% }' I# S, @' U# x) l3 q
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。% o( f  Y1 f: g* D

4 l$ p6 i: N" A一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
/ e* x' d8 V/ E. e0 x2 w+ y( S4 A$ O
& _" K) P5 M7 x) x; X如果需要分配大容量的内存空间:
8 m; j6 {' v: ]" x. G3 b/ b& T* r( g1.改动mem_args参数(u-boot环境变量);
: c5 N7 B% M% ?2.改动双核通信工程里面的:shared/config.bld和dsp/Dsp.cfg文件。
回复 支持 反对

使用道具 举报

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
7#
 楼主| 发表于 2017-5-31 15:55:12 | 只看该作者
这个问题是和http://www.51ele.net/forum.php?mod=viewthread&tid=1872&extra=
  @1 [) i' t% P$ E9 {5 n4 t: ]这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
2 {1 O3 [, B& _share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效. ^0 d' ^" ?  U) T& G" i
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-4 10:50 , Processed in 0.042129 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表