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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9038|回复: 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端程序起始。
- _( H' o) l! B/ |; P    板件使用的是创龙的核心板,linux系统是创龙提供的系统,dsp端程序使用的是例程hello为蓝本重新生成的rtsc工程,使用c++,其中的bld文件如下:
  s5 v9 Y% c' v# i) M" ~! }+ I4 r( f7 d( z! X
/*. k: X" R: J0 z
*  ======== config.bld ========/ K8 |6 ~) n7 ~' m" I& U
*: \: H: w0 P- n4 _: M5 j
*/1 W& M4 ^( B$ G2 {; W$ O/ q0 \
& U' x- l3 O$ s: t+ w
var Build = xdc.useModule('xdc.bld.BuildEnvironment');: V; g1 v1 Y7 [2 e" R0 i
# _3 s% ]0 A7 _
/*  Memory Map for ti.platforms.evmOMAPL138
/ x2 V+ ]' L4 A5 { *
7 O0 T; y" n+ R  B0 c- Y. g *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory* u0 A4 f/ z$ v% |
*  ------------------------------------------------------------------------
% ?, e0 j7 n& w- d *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
. C  G7 J" D0 B* e *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)2 q" Q0 D: J% D3 I+ k* p
*  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)
1 o: e. g- I% h5 [, p *  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------* P) x. T0 V, j7 s" w% f
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)" E$ B4 Z! M: T% {# U
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------
+ @: n/ c8 o1 {$ B; e8 A *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
# ]! W; F) P& \, j! t; m8 | */) b, F9 U0 q! I" D' ^; a
. P' S4 s1 T0 x3 b( @- x
var SR_0 = {- x' f0 v8 }- o8 S
        name: "SR_0", space: "data", access: "RWX",
' v8 z; C& G8 O7 U        base: 0xC2000000, len: 0x10000,
. Y; L+ t  U3 y4 P; m- d        comment: "SR#0 Memory (64 KB)"
  T+ Q* ?' S& G; [    };
9 y" P8 N/ j/ f8 M1 G$ n$ {" q( K5 W# N- P
var SR_1 = {2 n5 K5 T5 b/ I6 ?# ?8 {" C4 {
        name: "SR_1", space: "data", access: "RWX",/ H* `2 m3 |6 S5 x* P/ |. c
        base: 0xC2010000, len: 0x20000,6 S( e3 P- R' \1 O/ h; v5 `) n
        comment: "SR#1 Memory (128 KB)"
% K6 m) [8 ^" I& M    };7 {- d0 O) M0 r8 r! ^# V1 Q

+ S# ]' ?0 _4 h; x0 JBuild.platformTable["ti.platforms.evmOMAPL138:dsp"] = {
* u: p( t3 n* W$ q3 r: g* o1 a( X    externalMemoryMap: [; a9 p+ W( Z: g4 U/ m
        [ SR_0.name, SR_0 ],
0 b7 o7 a6 S0 f3 {6 Y4 M        [ SR_1.name, SR_1 ],# |* K! v* Q, s% h
        [ "DSP_PROG", {) o! B, D, q( y% f) g. r
            name: "DSP_PROG", space: "code/data", access: "RWX",
6 v9 u# u; v8 h' C. `5 s            base: 0xC2100000, len: 0x1E00000,/ E& r  x$ r' G2 L% }0 u
            comment: "DSP Program Memory (31 MB)"0 ?% O+ G9 w) K! D. U
        }]: `' n( Q, u% Z8 Y
    ],! l. A5 g  d# C9 U
    codeMemory:  "DSP_PROG",
/ t6 l/ X, f0 {& f" S9 L& b    dataMemory:  "DSP_PROG",( K7 T8 Y; _4 ]7 d6 V& P
    stackMemory: "DSP_PROG",
. G  C, p, t( ~4 ~: v  L    l1DMode: "32k",
# v- k2 D" T" ^  g    l1PMode: "32k",
  X! i5 K% b, r3 q! A    l2Mode: "64k"5 o2 O; r+ w6 o
};: L; L! ~/ B0 E) J( w

* c+ P; y. L( h6 P/ T! Z/*1 G  `9 X' J  K; r. i9 z
*  ======== ti.targets.elf.C674 ========; z! o( x' m; R/ x. V0 N- K
*/3 t5 C& h& L3 T+ j$ Z, j! {$ m# F8 t9 x
var C674 = xdc.useModule('ti.targets.elf.C674');
0 i# w5 k/ @$ Q+ _, kC674.ccOpts.suffix += " -mi10 -mo ";
6 N2 U+ p- p  q1 z4 UBuild.targets.$add(C674);  d! N+ q$ i$ r2 w
6 i6 a0 L/ b9 P: [) y' r/ N

9 x. \% u  w) e5 @! N====================7 Q/ s8 l+ B/ ~+ k
原来DSP_PROG是0xC3000000起始,8MB长度的,现在因为需要一个比较大的缓存20MB以上,所以改成0xC2100000起始,31MB,但是编译之后,好像dsp启动不起来。重新修改了rtsc的platform的DSP_PROG的起始为0xC2100000长度31MB,程序还没有修改,还是原来的代码也没有增加缓存相关代码,只是调整程序空间起始和长度。不知道还需要修改哪些地方。
9 N  B& K) D- H! V; a
分享到:  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 N: T, l9 i  L4 C- g1 a9 B) h2、修改platform文件为0xC2100000,编译是对的,但是运行的时候,发现IPC出异常了,arm端连接不上dsp创建的ipc,请问还需要修改哪里才能正常工作
回复 支持 反对

使用道具 举报

9

主题

35

帖子

155

积分

注册会员

Rank: 2

积分
155
板凳
 楼主| 发表于 2017-5-22 16:52:35 | 只看该作者
/*  Memory Map for ti.platforms.evmOMAPL1386 G& W& a* |7 ^+ ^3 L
*
  E, V6 G4 S6 R1 I- {% Y* V& ^ *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
) }7 K' o2 \/ j8 a: C$ v. d0 C *  ------------------------------------------------------------------------
6 m, K$ x, f& c *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
% E+ C: m! g- [" {: N+ T- F *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)
- g1 @+ |( A( w/ I0 A *  C201_0000 - C202_FFFF     2_0000  ( 128 KB) SR_1 (data buffers)! ]$ v- w" P+ d: T  Q/ P; T' N
*  C203_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) --------& k! s: [1 R2 ]6 E) `
*  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)+ Z# ]8 Z' N2 J7 G8 U* s% y+ `  m
*  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) --------# ^' [; V/ r0 Z3 A% ~3 q( }3 X+ ~
*  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux$ F: s) w  O; V
*/8 i3 f7 u2 w! Y( S
如何将 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)5 ~" q8 |* `* E' x, g" k. |0 r
合并为一块大的区域作为dsp程序的所有空间4 p7 y9 l9 b( P) ^
/ K+ E9 j1 `/ p+ U  s, V6 a2 q
现在发现修改平台文件只要用到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文件显示的地址。
: G2 H7 y' D6 p8 C) Z8 m0 k4 w2 j! c; }) q) k8 w0 w" \/ T4 p
目前将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 | 只看该作者
这个贴子信息量挺大的,不过总的来说是围绕双核共享内存空间定义来说。% Y! X' |# j$ E# }. C! U6 n, O
4 U7 ^; ^, f! ~
40 /*  Memory Map for ti.platforms.evmOMAPL138, T2 e7 q  O2 {0 F( h$ [
41  *' ^  d" L( f1 [* c2 S/ u
42  *  C000_0000 - C7FF_FFFF   800_0000  ( 128 MB) External Memory
0 b5 [& w0 p4 h% { 43  *  ------------------------------------------------------------------------* c7 D* r) K0 C
44  *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB) Linux
! T$ E8 l6 _, {3 a6 B1 m& Z2 C9 V- X 45  *  C200_0000 - C200_FFFF     1_0000  (  64 KB) SR_0 (ipc)8 h/ q4 q6 Y' c
46  *  C201_0000 - C2FF_FFFF    FF_0000  ( ~15 MB) SR_1 (ipc)" l5 n8 ^: v: B, H( h3 ?# g
47  *  C300_0000 - C37F_FFFF    80_0000  (   8 MB) DSP_PROG (code, data)$ R( ]: i( D, w9 P3 w
48  *  C380_0000 - C3FF_FFFF    80_0000  (   8 MB) SR_2 (ipc)
  w# Y; S; O5 ~( P/ Y8 O1 a- {# j 49  *  C400_0000 - C7FF_FFFF   400_0000  (  64 MB) Linux
# n* ]. s$ G# j- N7 {9 q 50  */; D' w: y  B1 [4 m
' J9 z) F5 N+ o& y! _( o7 k& ~
如上图,SR_1~SR_2都可以给用户自己使用。SR_0是ipc的基础组件支持,一般不用自己拿来用。
! ~: E$ u2 q8 ~$ s. S
% Z3 I. q' j$ ~/ O. Z一般dsp不需要20MB这么大的缓存,尽量程序里面使用动态内存分配来使用内存,而不用静态数组。可以减少内存的占用。
5 K% P4 q9 s; E1 D' x' N( r# `) w* X( w2 ]' H- M- L
如果需要分配大容量的内存空间:
3 M2 ~' @! k6 m& R1.改动mem_args参数(u-boot环境变量);% C+ M+ `9 B: @. p5 N9 b
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=
$ L$ W* Q0 m. S& H这个问题相关的,因为arm和dsp之间暂时没有找到快速响应的方法,只能在dsp端开辟大缓存暂存数据,以达到快速响应的目的。# }( S  Q9 r" c/ A# R2 Y" s# D
share目录下的bld文件可以删除吗(删除了,工程会编译报找不到这个文件),好像修改这个文件又是没有用处的,只有修改平台文件才有效- G, v9 e) A8 ?7 k5 }
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-6 02:18 , Processed in 0.041491 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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