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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8028|回复: 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 F, Q& r6 z  n! G, U2 ]. M3 h
    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:; x, R+ q3 E, p0 i( X6 p+ s
2 H8 H: j& `- ~2 \# N+ ^
/*
% \4 ]) U" [( F2 J) ^+ D) {7 i *  ======== config.bld ========
2 l$ r: f& F5 y, _ *8 ?! m# ^& d' Q. q/ x% I( S7 G7 r
*/
$ k5 H: k- W/ O0 z7 z
) I+ L+ U# q/ T, X, fvar Build = xdc.useModule('xdc.bld.BuildEnvironment');+ |4 g6 P6 I+ k: i$ G: x/ G* s
' y; O8 Z% J1 y% I
/*  Memory Map for ti.platforms.evmOMAPL138
* E( O% J& S; W# N *
: w. d5 a9 [) L9 |: d *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
) z( d. G! K( M5 Z+ U% ^: ]! T *  ------------------------------------------------------------------------
- }, b/ I3 P* c2 k7 O  x *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux# ^1 A9 a* C* f
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
; y1 y9 t* F+ f+ a1 d: K: p *  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
9 |, |5 t- W! c) B% e! J: G7 @$ B5 M *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------2 x& ]3 |! e3 |( V8 ]; ~! n" n) D8 j4 V
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
1 r" J4 r( k; z0 M *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
. [+ c9 R) J9 Y *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
3 N1 o! J; b( A, ?) r+ k" V */
( Y5 Y$ z5 q- ]( K. k* ?' d, n7 ]- a2 P- r
var SR_0 = {0 y9 L1 T- u+ S
        name: "SR_0", space: "data", access: "RWX",. @' }1 P; G* \$ M& H. k/ \
        base: 0xC2000000, len: 0x10000,; c6 e7 V; t5 U
        comment: "SR#0 Memory (64 KB)"' F  K4 r* D% _, [4 [6 p9 \0 t
    };
" |% C8 B% y6 c, o+ A
7 e: V# @9 Q  i' Evar SR_1 = {
1 ~5 \1 ], O+ _8 j+ {        name: "SR_1", space: "data", access: "RWX",
& H: E& g  @4 t        base: 0xC2010000, len: 0x20000,
9 j* _" [. v! l0 F2 R4 Y        comment: "SR#1 Memory (128 KB)"
4 \# b( P; {  L% u    };5 [3 v1 N% Y9 o2 w" m3 ~

, N" V1 M  k$ I. Y0 SBuild.platformTable["ti.platforms.evmOMAPL138:dsp"] = {! S& `9 E0 s) P$ j  r
    externalMemoryMap: [
/ L# U4 b3 i- n. ^+ D        [ SR_0.name, SR_0 ],, C( e4 f6 s5 W: g; @1 S& E
        [ SR_1.name, SR_1 ],
/ N5 b. b8 K7 C* f& C- B2 V6 ^2 @        [ "DSP_PROG", {
& K& V& M* ?7 U5 G            name: "DSP_PROG", space: "code/data", access: "RWX",
# z( C. B0 E9 v% `' ^            base: 0xC2100000, len: 0x1E00000,( H" x8 Q2 `2 e* a% }
            comment: "DSP Program Memory (31 MB)"1 F! K9 G  U+ g0 g0 z
        }]
8 y/ |. G( @  Z. W( V3 R9 s8 s    ],
& i8 J* U4 N  m, g/ ?/ u    codeMemory:  "DSP_PROG",
) E& s/ y7 D1 o1 {8 p, b    dataMemory:  "DSP_PROG",
. u7 ]  C: C$ S2 n- @) I" X    stackMemory: "DSP_PROG",
0 M5 h' K0 f" i* O# {0 G* }    l1DMode: "32k",
% m4 U7 r: R7 ~$ T    l1PMode: "32k",
# O* ?* _) H  c; h1 [8 ]3 j* s    l2Mode: "64k"
  ^" m8 {+ @. a; t+ l};
- d1 k! {6 E. Y2 I2 s2 C
: X, K  r& ~) ?  S/*
: s: ?- |9 }. ?$ A- u+ a *  ======== ti.targets.elf.C674 ========
9 Q; k7 b5 d- c* Z8 |8 R* Q  W */
4 i( B0 E+ r! T7 Xvar C674 = xdc.useModule('ti.targets.elf.C674');7 c& U- W& a" v) ~) \
C674.ccOpts.suffix += " -mi10 -mo ";
) L" g! g  q/ [Build.targets.$add(C674);
* P  W! a, d& e( u* }* F+ o% [4 T2 ?) w6 z/ g0 {
$ h5 b# H) Z  X5 ?
====================7 m4 U) x6 {. m  s9 y
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。5 w- b4 p* ]# @9 z# 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,为什么?删除了这个文件,工程又编译不了,这个文件有何用?
6 {4 E, C( \. p+ |2 x2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
回复 支持 反对

使用道具 举报

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
板凳
 楼主| 发表于 2017-5-22 16:52:35 | 只看该作者
/*  Memory Map for ti.platforms.evmOMAPL138
( ~; B/ V5 x  d2 R *
! R; z9 s" k0 \0 L* \( ]" G+ e *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory0 `4 i- [# G* p
*  ------------------------------------------------------------------------
5 g6 [" s# Y2 L. [7 @ *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux5 m! A, _* x4 y* R% C7 h
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)1 P4 ~( T! S) `' P% c: Z
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
% v& u+ G2 Z, Q) q  O# ]+ M/ j4 T *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------
4 `# h; O  A% ?/ X( X *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
2 s7 O6 |7 B$ a3 v# G *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
9 M% q8 c& X5 B5 x; j' K *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
( d" y( U8 ?* H9 o2 _ */
7 q; Z2 m6 v5 l如何将 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)
" ^; s& ]( i, R! K6 G合并为一块大的区域作为dsp程序的所有空间! D# E6 t; _; G5 w2 e, t

4 u. p3 ?1 \% g' v; k: ]1 _1 s+ j现在发现修改平台文件只要用到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文件显示的地址。
4 q' t5 B& z( U6 N6 ?5 Y% s0 }& v9 A5 T6 Q, F8 e
目前将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 | 只看该作者
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。% G. ^+ f5 T2 M1 Y- R: y4 Z% `7 F
1 p! i1 B/ k8 k! T' @' G! R; I
40 /*  Memory Map for ti.platforms.evmOMAPL138
; }& M6 X3 V" d+ p 41  *
& N4 C2 f6 }& F# P7 |' `1 @ 42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory, }# d" G  j5 c
43  *  ------------------------------------------------------------------------* |4 J- q9 U# ~. E! s+ W
44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux4 i/ y7 P( u5 V+ D8 t
45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)8 r8 Q/ f& @/ S: B! ~; m, m# f  Q
46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)( l/ N1 R4 M2 D5 g, O/ K0 N
47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
: R+ M; o7 m+ n" F; O0 J 48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)- d3 t* }: U% q6 w" i" `& c
49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux9 N1 ^0 W: _9 t& X4 l) D
50  */
7 Q7 K) F9 t# j& J  H9 M/ r! z. V3 Q
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。! Y/ Z/ P; E4 J$ c+ u

7 Q9 t* z* X1 m  h一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
" x* f: S# F* h  A3 A
/ ?4 f4 e, n% q6 `2 S4 }3 v如果需要分配大容量的内存空间:& i7 s/ e* ^( g( C
1.改动mem_args参数(u-boot环境变量);
8 C2 R* M0 ?$ z+ X+ _) C: r2 V2.改动双核通信工程里面的: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=
6 ^: e' [5 O& ^. e0 x这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
  `) L: e4 k" a8 ]share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效! x6 i4 {; q- s( {0 k# S9 n& ^8 i9 d3 r
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 08:22 , Processed in 0.047157 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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