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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6885|回复: 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端程序起始。+ |8 _2 [, O3 Y! h1 b$ H
    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
) [6 |4 l/ D! f1 M1 \, o! I
+ u2 f  W7 Y  J% p- p2 C) _. o6 M/*
0 Z( r" m# G+ F, A0 p5 R$ D *  ======== config.bld ========
. H- [4 R) E& }  e2 @ *
6 s  R) R& K/ `% J: l */
+ W4 q9 p3 G% Y3 {# A" M4 D3 P" ~* H. ?3 _; o- }# G
var Build = xdc.useModule('xdc.bld.BuildEnvironment');; I7 t5 i! t5 K+ V3 A

9 w6 g$ G. Y4 y/*  Memory Map for ti.platforms.evmOMAPL1389 @) @/ Q( f6 D9 E" y/ q- x" k
*
  O  h, x6 |' T9 C *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
7 l& D' C+ L. [8 f4 j *  ------------------------------------------------------------------------/ D6 b1 ^4 P. X9 g; ]
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux7 l0 y# n( X6 r) a' T: d+ Y
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
" P1 w# B  K0 u *  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
+ k1 q0 K4 I. Q- ~: m, h' x *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------9 x9 e% A' E( a  w
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)! |7 v$ @  j; j- h# B: R- m' A
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
$ G8 K8 K; |; L% u *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux6 V0 w' ?. M# q/ A  r
*/
# x1 e2 H- s; W& a/ G
/ m6 ]) K+ h7 Y% x4 kvar SR_0 = {
4 m: C  d) d0 g# m! B$ m* y  V" W        name: "SR_0", space: "data", access: "RWX",
5 S! j2 U% x/ i/ q5 r) ^4 C        base: 0xC2000000, len: 0x10000,/ A' C4 L: c& T3 h' Q
        comment: "SR#0 Memory (64 KB)"
* |4 V0 `: I" h5 K! J  a    };
9 j# K. x) j4 @3 p) o: E- T0 x/ W4 [
var SR_1 = {
9 s% b) t$ g+ _4 s! q* ]! t4 y        name: "SR_1", space: "data", access: "RWX",9 u- @1 U) o  t+ o" z7 X. y
        base: 0xC2010000, len: 0x20000,
& u2 z5 W: e$ b; g' y% i* D        comment: "SR#1 Memory (128 KB)"
0 [, L7 H% Q! F    };
! b- }" `, u' F- Q# N) j
7 Y6 h) z- @' k2 _8 N( Q1 N2 fBuild.platformTable["ti.platforms.evmOMAPL138:dsp"] = {2 h4 Y, k. u7 f0 y% ?
    externalMemoryMap: [
  K# i* Z, l. \- N. _, A        [ SR_0.name, SR_0 ],
5 a" c# O& {% n7 V$ u0 d. O. F        [ SR_1.name, SR_1 ],) c) u4 y- g: ~- s- u4 T3 B( [, A
        [ "DSP_PROG", {
+ _; k7 P* c1 L) l2 @2 M            name: "DSP_PROG", space: "code/data", access: "RWX",
6 o& a! G7 K& c            base: 0xC2100000, len: 0x1E00000,
4 m; P+ U  c8 N- T" k            comment: "DSP Program Memory (31 MB)"7 j# H/ `8 y* x/ G* O" t
        }]6 |4 v+ l; x- q) W+ |. n
    ],% W6 b& b9 N. Z8 {
    codeMemory:  "DSP_PROG",
7 M4 T6 `' f/ v* P! Z    dataMemory:  "DSP_PROG",
% h) B% O: J& O- I, N    stackMemory: "DSP_PROG",
1 f! E0 e, p9 U7 t( v% V" \    l1DMode: "32k",
/ ?/ w" x5 s, h- d7 L    l1PMode: "32k",
0 c' F' \% f( z    l2Mode: "64k"  y" m9 P6 B) k# c& t! r8 c
};
& X$ c0 I( O0 ]1 }- z
* |1 Z. d  ]2 {0 u  }/*
- ~" K/ M7 Z( H/ v: e *  ======== ti.targets.elf.C674 ========) [, k; W% x; V  G% l1 A: S
*/
' b: h" G  h3 r$ u- dvar C674 = xdc.useModule('ti.targets.elf.C674');
8 i7 @: ^3 @- c; h9 p1 JC674.ccOpts.suffix += " -mi10 -mo ";6 x+ K5 s* E! `1 R* A. ^
Build.targets.$add(C674);
7 J" Q: ?8 `+ b9 g/ g- G8 L
& c7 S7 G  n% q5 H
" \+ k# {4 d! R$ [====================/ C' d1 c' I& n4 Z# e4 S; A
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
1 X+ b# `& `) U, Y
分享到:  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 \# ^2 A6 v% e+ g; s& F) ~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& \( f& H( T  W9 u
*7 v! `. G& s* t( g  ]4 f4 P
*  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory0 l# A- u( F( F9 G
*  ------------------------------------------------------------------------6 X3 b6 @+ M7 l( R6 f
*  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux7 S* d( k0 n; K( B9 f. W' \
*  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)9 V: @, M- V7 o7 C: [0 e. y
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
9 ?* A5 a4 H( j5 M" k; Y *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------( y: i1 M8 m7 r, p- o4 u/ j
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)
' S0 O6 r# d7 B3 p' @2 l *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
  R: g! Q7 J  `, Y, w; t1 K3 z *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux% y, p; F- F7 u/ p
*/
2 P2 c: r* |) u1 W3 [如何将 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)
+ m# b7 O/ n' r. b7 b$ [合并为一块大的区域作为dsp程序的所有空间
# `9 _0 z3 a. R/ ^0 q+ U, }
% k* N3 v1 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文件显示的地址。( I( `# `( r' z% R, o8 j

2 n" u$ C! Z4 }( N目前将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 | 只看该作者
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。
+ z' \1 y8 z# k" J+ e: H* S
: }: A& A4 i0 Z& q( p 40 /*  Memory Map for ti.platforms.evmOMAPL138
& |8 m. A' K) C8 j8 p 41  *4 p7 q- L& f/ g' _) U; E& K
42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
+ \0 \' c: F5 i, q 43  *  ------------------------------------------------------------------------
: n% i- B/ A7 m9 t2 v$ K  k 44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
$ _  z2 z: s1 q3 ^* m3 {0 k 45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
# N1 ?" A0 i  w7 f6 q& C 46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)+ v2 s# q( f) d5 j8 c
47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)! b' t7 g% [+ a8 b, X9 i7 j( P
48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)
. W0 v5 [- [/ T2 Q 49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
4 f3 [2 `9 f: R* O0 L' L  U! s 50  */4 ]3 ?) q) U3 _, m5 P1 S

5 p6 c; r8 b; M, H5 t' i如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
! L( d: N) v9 a7 u; K" P8 s& l" N7 G9 h) H2 m0 @
一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。7 c8 I7 r" f+ s& m" |  r5 M
. Z4 t5 u' O! n4 c+ x; A% Y  s. S
如果需要分配大容量的内存空间:
$ V. ~% q1 Q$ i! V/ j6 H: n" L1.改动mem_args参数(u-boot环境变量);
9 G3 Q) r8 Q+ q1 Z! q% B( @' v" l, y2.改动双核通信工程里面的: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=5 U! F. _2 W3 {: i) G, n& q
这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。
* \+ Z( L6 M2 O. @: Q6 j' eshare目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效
$ F8 Q: |& l' Z% k
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 05:07 , Processed in 0.042017 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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