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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8260|回复: 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端程序起始。9 S) w& {1 R3 b" S
    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:5 D% j+ y0 q5 |: n& i5 h; c# _
8 ~% j1 y  w/ A. }- y  |: A
/*
, H. y3 ]2 s6 L/ {$ |# } *  ======== config.bld ========, z% |$ h& _0 H) Y' b
*
: f) |9 K% e$ y; { */2 d8 e" T8 I+ N" @; h- A
4 L/ I+ u) o" o
var Build = xdc.useModule('xdc.bld.BuildEnvironment');
* @. X' r0 I+ t9 D
  B. H/ ^. {& Y( r! g0 g/*  Memory Map for ti.platforms.evmOMAPL138
8 x3 i& Z# O# v/ ~ *1 [7 F* N7 w; o& P$ n! j4 V
*  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory/ j  M, O2 L0 S2 I" }
*  ------------------------------------------------------------------------7 k6 [, [1 \7 V
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux/ i0 K3 O. Z7 I6 H' R! f% S6 W# e/ ^
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
# L" i9 V' P) @. [  V: m% J *  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)8 e+ W8 J, x3 @  f, j
*  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------
9 b" c  n6 N- r *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)2 j+ t% q/ f+ {* a3 C& N
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
$ z% z6 s" _: Q7 v: ]# t *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
# J$ J7 v' ?' m! n  c */* w6 M$ \  |) {0 J1 V

" R3 s4 e9 _- h4 R; J' Y; ivar SR_0 = {
' E0 @" n# }$ |  U2 v7 [( @        name: "SR_0", space: "data", access: "RWX",
9 V' O4 a6 F6 Z. X1 D* L9 G: x        base: 0xC2000000, len: 0x10000,) U9 Y) l8 S9 e" R' b
        comment: "SR#0 Memory (64 KB)") r! N. y2 n$ f8 z9 N) M
    };
2 s0 ]9 m) p7 h* e  e' s! Z+ [1 m& y. Z0 t* J! S4 Q, l4 ?
var SR_1 = {7 _( U% o+ i& v4 _, O. a8 O! Y+ j
        name: "SR_1", space: "data", access: "RWX",
8 H9 E+ V# ?. J' e% V6 ~        base: 0xC2010000, len: 0x20000,
) e* C* z2 m9 O) p% D        comment: "SR#1 Memory (128 KB)"/ Y5 b( l, Q  L/ M; }7 ?8 S
    };
0 `/ L- {2 M$ ^7 E! X- S3 ]) m0 X0 z6 ?/ A# B+ Y. g
Build.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
4 P2 X5 l7 s  |' h; @7 P% w    externalMemoryMap: [
, l1 k% d, r2 O: g+ S        [ SR_0.name, SR_0 ],
, f0 |& o$ `5 s2 }$ B        [ SR_1.name, SR_1 ],/ N6 @2 G% p# i6 \; b
        [ "DSP_PROG", {
: Z* d6 h# P, N5 J% ?            name: "DSP_PROG", space: "code/data", access: "RWX"," `4 z. }2 P4 M% u/ N8 M
            base: 0xC2100000, len: 0x1E00000,  |7 w3 a: p  s, v) [
            comment: "DSP Program Memory (31 MB)"
- D( t8 ?8 D' D9 M+ i2 u        }]
8 _7 F5 {, D  V3 h    ],  Y8 Z8 b8 A% e" R: f" M
    codeMemory:  "DSP_PROG",2 E( @5 d; A$ _0 o  `
    dataMemory:  "DSP_PROG",
% [, m, f0 S! J    stackMemory: "DSP_PROG",% m( i. _7 _% M
    l1DMode: "32k",: g$ C5 H/ C& r) R$ u) t8 m6 k
    l1PMode: "32k",* c: Z  d3 o  W3 `% {  K) M. U
    l2Mode: "64k"9 S% T1 L% B1 g& s8 E. S
};
2 F- t! `4 M5 c& h  w  m7 ?, y: F2 h! o- a8 q9 |
/*! @. c4 J7 s8 N- ^
*  ======== ti.targets.elf.C674 ========
2 l7 S3 I1 x. { */
: u4 l- p3 S6 w/ V8 Q7 ^3 uvar C674 = xdc.useModule('ti.targets.elf.C674');+ p0 |. G3 Y: a" Z
C674.ccOpts.suffix += " -mi10 -mo ";& U* r9 Z' S6 L3 n+ V/ o
Build.targets.$add(C674);9 s% _# }6 s1 z/ E7 U6 i

3 R' i7 Q% j1 ]
( n1 t( c" Z/ R7 c+ B, j9 ~9 }$ o====================
! X0 N3 w& A6 g% e原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。8 }+ F6 O4 _4 ~+ r" h3 u
分享到:  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,为什么?删除了这个文件,工程又编译不了,这个文件有何用?, p; U  c4 w+ E; \5 i+ |, |
2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
回复 支持 反对

使用道具 举报

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
板凳
 楼主| 发表于 2017-5-22 16:52:35 | 只看该作者
/*  Memory Map for ti.platforms.evmOMAPL1389 I- R7 @; e* W' a/ b7 p
*
: r: V% ^4 l0 B2 U: T$ b3 N  a *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
: W7 a1 X; n, M7 O% ]7 o0 f' T4 v8 ^8 f! k *  ------------------------------------------------------------------------0 K9 I; H8 |2 O% |
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux' R. C% o6 U( x. y2 {
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc); Z% H* N5 h& m: B3 |, {
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers); z' l; ^' |- A9 Q
*  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------* g# l# y+ v% E& s( n
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data), E1 e. U, V( `* u
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------8 U" J- w" N  B2 Y2 m/ |, f
*  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux4 |) T7 ~. n& k' K1 e
*/6 d" c* A) G1 a
如何将 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)
/ @+ z; E6 O; n" I合并为一块大的区域作为dsp程序的所有空间
" N" D3 w* c. o
8 R4 J) ?$ N- G% `5 s现在发现修改平台文件只要用到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文件显示的地址。% |; w7 ]$ n& Z
# o7 ?5 T0 A! I
目前将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 | 只看该作者
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
( T' C! `) H+ W9 c3 U
8 B4 M) E  X! B' e. @ 40 /*  Memory Map for ti.platforms.evmOMAPL138
! j2 K0 t1 W* Q1 F; I 41  *9 l* E8 n: C3 ^
42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
$ `% D+ R7 U& @) q) ] 43  *  ------------------------------------------------------------------------
/ O# m  G( E4 V' o# z 44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux$ K$ b" o  K( I3 D$ M/ [5 f
45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)4 |/ c6 s% k! I
46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)
6 i. r  ]) }# {. ~2 X 47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
2 E* A8 p* D5 w3 i1 `8 [. r4 ~7 Q. Q* @( v 48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)
5 y' Q  `  B+ @) B. X# Y9 q( } 49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux4 Q5 `) G8 J' P* c  u
50  */+ B. n6 s1 n; s( u6 X

  W8 T+ O( v+ s如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
7 P: ]1 ~; s( A' h$ v
  e6 d! Z& m1 v; ^一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
, Y9 |: T+ p; z- w, `
. L0 f2 X5 ?7 `8 G9 S3 h) a( i8 F如果需要分配大容量的内存空间:9 }& O, S1 s5 c+ N
1.改动mem_args参数(u-boot环境变量);9 }# z1 s8 G6 x) g
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 [. X' W. Q1 q5 t
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。& t/ c. v7 j' o% j
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
" v- P5 u9 r) v4 L& D6 y$ d
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 05:51 , Processed in 0.040852 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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