关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7853|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 N- h  U3 E9 F/ d
6 M8 V2 F) ^- k7 @3 \
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* J1 |/ {* Y" z6 N1 s/ F  G) l7 m- W/ ~# B! R4 p6 p( D, F, S  F
其他程序段。。。。。) W; u" N+ _# G# [
: V: Y; X- z- l, G$ x9 C
   free(x_d);4 w7 q1 @$ {8 I8 i$ v) D
5 I) E# P( F0 s
使用DSP侧单独调试功能,验证动态申请没有问题,: W% ?9 H2 B! K, A& s& |' @
0 w" B: _2 O: V- f$ b* y% Y8 ]0 Z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 }- p0 a2 a; m  t* Q  u1 ~

* i1 n5 y; w5 B, A- M
7 R5 j% {5 D+ O! b+ |% L+ _2 ]
0 D; ~) P+ K  Z( e: L2 Y
; }/ O2 b1 r  H9 N$ P2 Z$ b8 s; N: {* t) d6 w/ Z% v
2 `: }: t7 W1 g1 }
, f4 g. Q4 S4 L5 A, m  g
8 x+ N) O+ u. T3 Y" d
8 R, J0 T/ C! m

4 m* G' Z8 C# w% ^2 z0 p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 e3 B( _$ S% Z( B1 [9 A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 l' m' h6 ~3 n" [5 l# S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 z0 \6 l2 x$ Q; P% B) t

3 R# N9 f2 n- Y1 F0 I! G/ G+ D是不是需要在DSP.CFG中进行配置1 P6 w# X2 {: s( q& O3 o
我现在的配置为5 [8 v( t! d6 f. _& `
& F2 K4 e) F! [( j- N: H
/*
: E  g' s4 y, Q( C5 j  i4 y+ A *  ======== Operating System Configuration ========1 Y2 ]; C; i7 }
*/" E! v% x0 D/ \* `9 r$ K4 d! E" f) ]

5 u) M" C# m- l( }- t; n/* no rts heap */8 ^0 v. z. ^+ M; o
Program.heap = 0;
" o6 ?8 F3 p2 p+ R) T& G& N" AProgram.argSize = 100;  /* minimum size */( z0 M  j' _/ |2 `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) u; C$ R3 V5 @/ B8 U5 l, G& ~3 l* W* `
9 y! k# f7 Z+ k" h7 ]. g3 x4 K
/* create a default heap */
6 H6 d- i* {# _4 P8 I" J% o! avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 k& f" z5 D  o% Evar heapMemParams = new HeapMem.Params();
3 `! Z+ d2 }4 ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& _$ v9 x0 f5 M; W+ K3 I
# ~% a' n) J: G8 c! n
var Memory = xdc.useModule('xdc.runtime.Memory');2 W  n( V$ t" v. L, ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 I# p  I$ H$ C3 y
/ e+ I9 I/ ~! m! c5 O! ]6 F: ]/* configure System module */3 ?$ Y/ S  y& H6 Y
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 T& H' _8 R1 H" k7 I  v1 }6 f) ]SysMin.bufSize = 0x1000;
6 T5 [1 ]4 N7 ~4 A# xSysMin.flushAtExit = false;
! R( q5 j0 g0 U' i/ q2 R8 ^8 U" C+ [: P3 d
var System = xdc.useModule('xdc.runtime.System');  C+ N! s2 [) Z" k' p) K! \- }) I
System.SupportProxy = SysMin;
  n: K% E0 z; U/ a( z: a0 r
, u% V7 D. h  c1 e$ \( f8 |6 o* }. v/* configure SysBios to use the lower half of Timer 1 */) l' E/ @5 e* O- N, W1 s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 b& {5 S  T  Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');" M- {( G* b0 g) L6 U$ s
Timer.timerSettings[1].master = true;9 b6 Q4 k9 F- E0 |  }$ O
Timer.defaultHalf = Timer.Half_LOWER;* y' z; |5 B( u7 X& T
Clock.timerId = 1;
" @' a: ?  y) L, {) v7 h5 a) Z5 F8 \; }
; x: o$ q2 T- H" F( E& {  r2 B
/*5 l* d+ D: a9 n6 H
*  ======== Miscellaneous Configuration ========
$ w9 I* [; u& c/ B; A6 O# M */4 n- L7 f& X" v8 B, K
6 ^7 w- e( i: F% Q
/* set default diags mask */' q+ s! F! ]1 I# m. ]- ~8 X
var Diags = xdc.useModule('xdc.runtime.Diags');
9 g5 s. l3 ?; A8 cvar Defaults = xdc.useModule('xdc.runtime.Defaults');5 s: A! `; }! V  `9 w! k9 E

* @5 c2 _. ~/ {/ W7 x6 \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! s6 P2 @" g6 V  p9 n$ h
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) ^, g" {3 r( T) L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 J5 ]4 ~: f5 X; i" `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 x1 _0 o4 ~! i* P7 A0 F5 ]5 Z  x7 N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* }" `4 h7 n% `! C' ADefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 J2 F! D: g* Y" r
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ p" X2 r, }; m1 E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 ~4 b# ?4 b0 X  }* x( O1 C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' N( K3 i! F3 }Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" d- a& I6 {: C! L- F/ y  ^" XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 l! `. }7 }  \; z1 a, S. m/ L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* J3 V5 t$ H7 A: B( P; zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 Z9 P& g, S( N0 g3 x
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" g# f( V9 f/ z
3 G) |7 o( S6 |: b/* override diags mask for selected modules */% ~' k  u* W6 H5 K0 U! O) z
xdc.useModule('xdc.runtime.Main');8 M- @( [, D" F8 a$ g
Diags.setMaskMeta(
  T8 M& @* g6 M0 U% C    "xdc.runtime.Main",9 `9 X1 U7 B. N2 M6 a: d
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; K( H: g% ~9 Y2 P4 k    Diags.RUNTIME_ON. Z" T; B' s4 X; C, p4 @- a' F5 u2 J
);
3 q* b  M) ^0 H( ?; K$ C; ?" H
1 M3 D1 {: g4 V4 k: d8 v1 R" ?var Registry = xdc.useModule('xdc.runtime.Registry');7 |: N! F" s; V7 n7 Z0 f
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: u" a1 d7 Z5 ]) j) y1 ^+ D; URegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 o1 g" Y; K( j% u+ F7 I6 `% j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" C. q# ]$ [# L* w6 qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  ~8 R9 n% n" }
4 D% {2 P3 \  u7 z% |; ?; s/* create a logger instance */
5 L. G9 @) ]0 lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  }0 B4 ], I6 j! p9 h4 K, F, tvar loggerBufP = new LoggerBuf.Params();
# t5 z. e  o( E1 W' RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 P& h) {$ T7 d
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& J' g% Q; N% D5 b$ \
9 ^* w& O. {' C6 B( ?5 k3 s0 I
var appLogger = LoggerBuf.create(loggerBufP);
( w: S- t; Q& n1 l* Q, u* SappLogger.instance.name = "AppLog_Core1";9 W( x, v9 l% ^3 Z4 B
Defaults.common$.logger = appLogger;6 M& F1 a  X% A3 W6 b) d
Memory.defaultHeapSize = 0x8192;   
/ w, D, H( L/ }/ T# Q7 p, x1 _3 t! }  fIdle.idleFxns[0] = "&LEDStatus";; {8 `) i" X" X$ a
Cache.initSize.l2Size = Cache.L2Size_32K;( k1 {2 M7 S  k  V/ A

* h. Y& W4 [9 p' l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
& `# f5 J! M) A/ d, uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  C; s: V/ {3 }& r! L
var heapMemParams = new HeapMem.Params();
. p& c6 L0 c' p' {( gheapMemParams.size = 0x4000;3 M) Q0 ~; w; n3 l; d: t, S
5 \7 p8 O$ T0 x2 ^( G; b) a
var Memory = xdc.useModule('xdc.runtime.Memory');
5 y4 A/ @% Z) J! v6 a" SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 }- Y: u. j) C( _) q1 B% ^& |6 G9 w5 Q! l$ P6 o
我大约calloc  每次共计大小为5K*16bits,0 l- C, s7 j# ?) w( v; j3 u
而默认配置才0x4000、需要改大。
7 z5 q" R* j0 t+ N# z4 ^9 B$ G, H+ ?* Z) h4 O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! ^& Z  O& R7 c2 r4 dProgram.heap = 0;0 z  q& }" K2 ?9 L5 H1 X2 |
Program.argSize = 100;  /* minimum size */$ ?; T4 Q- ]% S# A
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-2 13:01 , Processed in 0.041594 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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