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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! S4 p) I; `# u9 t" V. U, y" ~1 m+ t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 `1 L1 \$ y0 D# W( a# q; m% C7 K* h' W& f7 j, T
其他程序段。。。。。
- _+ [. z# \2 j- {' t
; R& z; |5 P, V, R5 F   free(x_d);
2 l1 r* n# m  [' Z3 a! k
2 b& I& f3 h6 ~* r. R使用DSP侧单独调试功能,验证动态申请没有问题,
. r) ^  @7 p  Q: Z# y% J
$ u3 w$ |- T, d3 u% ]1 \# A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. ^; f8 t( i+ l5 `0 E9 n

" A+ W% Q6 g2 B7 q* L$ h1 ]' \+ J4 p% g. m: v/ k

9 t2 ^6 J+ V5 M1 P5 [) o# k& \1 z+ u6 F. W
5 O$ J2 O; {3 J( m  D* [# W, x
$ ^3 L/ i6 G* |7 g( E. A5 u5 J; p1 w
! }2 y. z9 g7 z0 z) f

! i+ D8 _# _+ ?
- k; |3 z$ A' h( E, C3 r+ y# v+ n: a% m) C- x6 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* c2 j  j& x* ~: l% [6 C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 F3 b7 h# g9 n4 t# s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 y( h0 G- R% Q9 P! x

  p) c2 p! m# Q, a是不是需要在DSP.CFG中进行配置
) ]1 d  Y- `* d1 Z& y9 P我现在的配置为
# }7 d6 D+ L8 ^" X+ I3 u. R
5 T) y% x* s) R( p/ T+ x/*2 [7 _: t% e$ a  u. J4 C4 R
*  ======== Operating System Configuration ========
5 C8 K: S1 x) I* ]0 T! p: {# y4 Z */
' q1 j( \) R/ f; k# O4 f! h7 E
! [5 {8 ]2 z! p' q/* no rts heap */6 J' ^4 _* Q$ O+ k% o! b! d% r
Program.heap = 0;
( H" [, t: W3 D) S0 LProgram.argSize = 100;  /* minimum size */" g! p# |& ^& {1 O3 M2 \" p
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" X9 H  A. m( x/ @3 }5 w
3 U! E% l# D# u# [9 _* ?
/* create a default heap */) [) c" b  d0 Z- n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 ~" V# s' H0 O6 W# lvar heapMemParams = new HeapMem.Params();
' e( l. k5 K( q4 |5 dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& C4 h' W3 B# w0 m/ L$ f5 c+ t0 Z! p

) e' ~, g  @, W8 O% b
var Memory = xdc.useModule('xdc.runtime.Memory');) Q. G! z8 U. R$ [5 O$ P8 L: i5 A, ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: j5 z7 }! ~/ v/ t; C* c

" x1 J3 |. S- K$ q" P/* configure System module */
1 E1 z2 l7 d/ h. \var SysMin = xdc.useModule('xdc.runtime.SysMin');4 a. i$ A7 |% a
SysMin.bufSize = 0x1000;
; r/ F0 ]9 D; O* P7 K' }7 t) D8 zSysMin.flushAtExit = false;
) N) D7 K0 v, V% O2 n  V, G- c( \+ L" O
var System = xdc.useModule('xdc.runtime.System');0 ^, |. l/ c& ?
System.SupportProxy = SysMin;0 ^0 i' g4 K, ^& w0 N5 L; u

: L# @) F/ f1 X9 I8 o3 R3 O/* configure SysBios to use the lower half of Timer 1 */0 A  Q" P4 Y7 t8 f) y) q8 T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 Z  u( t: A) Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');) k! h' T: D* d( ?& h, U
Timer.timerSettings[1].master = true;4 [( F/ ^% S" y
Timer.defaultHalf = Timer.Half_LOWER;
) P" U: U4 `+ J( q# b4 n' ~8 lClock.timerId = 1;9 v9 K$ f; v, \# Y- {
, T  O5 i- t1 ~6 D, b, @; [

+ ^1 F7 R7 W5 p) i9 y; Y4 \/*  F) @% d3 d0 ?. K1 a9 A
*  ======== Miscellaneous Configuration ========  y$ P. z/ ^" v( S) c3 P8 m
*/( [& L' H$ Z; B, O( D8 e

* `, @) K- ^; U8 h/* set default diags mask */
1 D( X7 D  ~  kvar Diags = xdc.useModule('xdc.runtime.Diags');
& S4 `5 ~5 B0 b) Lvar Defaults = xdc.useModule('xdc.runtime.Defaults');
' r( I$ U+ i/ ^6 U) ^1 K0 h7 d7 F: @; o8 Q4 r" _/ a) Y7 O& o" K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( a  g+ r  I- m, {) m, W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% d5 w2 d4 M) d* U9 U" x+ M, WDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' U( B4 J1 g; ODefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 o: m1 h2 ], Y8 [# f
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 Q4 T# T1 h  F9 `: e; @
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 o# v8 p+ P4 I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 A" @* m+ c& p
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 X" u/ y3 S- A6 b/ c5 M8 b6 Q! a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 @, P) v4 C9 ~3 Z. ^; c% @/ qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% P$ C" s9 I; m2 J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 Y: A: u/ [4 o* w5 K3 V5 x9 F! t: IDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 P# O3 M0 A% EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 [8 ]1 T( i# {! Z0 V& N: p- sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 q% @6 ]' B8 g1 K0 O3 `9 G" z% J$ |0 K* S$ S
/* override diags mask for selected modules */
+ U. f$ \8 d$ [+ ?0 a* lxdc.useModule('xdc.runtime.Main');- p0 F1 a. ^* r" h, b0 j/ h$ D8 B
Diags.setMaskMeta(
3 o+ ]& S$ |: c, [  f  k    "xdc.runtime.Main",
5 @8 r; k, c/ g# A! r/ ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" F; o( ]/ F* [9 X" A2 @" Q    Diags.RUNTIME_ON
8 q* s5 ^0 G, P- w; ?& ~) J);! ~- q' `9 ], ]  ?$ p
7 L/ R- \6 D0 s) g0 `, ]3 }
var Registry = xdc.useModule('xdc.runtime.Registry');
: \  x2 `* [+ s# }) |Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 \; U7 \) r: Q: q. wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, e# A3 P5 G4 I+ H7 o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, h9 g+ B! K* k) }8 L- V0 DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 I# P; L/ ~1 L* e6 M1 Z) c8 z/ S& T2 `2 {. }- v8 G: o% G9 Y
/* create a logger instance */
* H6 e, y# v3 u3 q; J/ O& Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. J0 g( x. y$ u1 Xvar loggerBufP = new LoggerBuf.Params();
8 w8 c( f! X. b, Q' ?loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: Q% {; u$ [5 e5 w. J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. @1 t. n$ ^" i& M. a* c
5 t  `$ j2 L1 H* y: t" e: V
var appLogger = LoggerBuf.create(loggerBufP);9 p4 B1 f7 H) r4 P
appLogger.instance.name = "AppLog_Core1";
5 u  D. x. S5 lDefaults.common$.logger = appLogger;: X& F& N% g6 l- T+ x; h& o" D
Memory.defaultHeapSize = 0x8192;    & a& ^- W1 [$ b) l* T& I# j7 B& r
Idle.idleFxns[0] = "&LEDStatus";
5 y5 B6 C8 y# A! a" [5 iCache.initSize.l2Size = Cache.L2Size_32K;
6 i9 O' ^5 u& Q6 }) j
. w9 G; _4 e( O& r. I1 I1 W8 @
回复 支持 反对

使用道具 举报

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 */
1 e# D3 h6 K( T6 [  `. |, Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ f0 g, r* S) n- @" e7 H  Zvar heapMemParams = new HeapMem.Params();: @. t* b& F6 k9 R
heapMemParams.size = 0x4000;
$ X! D/ Z6 [3 q6 p1 Q+ g" t7 t: {5 Q: d5 ]8 f
var Memory = xdc.useModule('xdc.runtime.Memory');6 T! A0 S: Y. L' j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 U, t5 N5 N5 s* N( d* d0 t  b* x# Q5 o
我大约calloc  每次共计大小为5K*16bits,) S" R* w+ a* G; Z
而默认配置才0x4000、需要改大。
- B/ C( n. E& F. i2 ]' }; H
, i: X' P' F  H7 d' A) u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- a- s3 q# K0 L" W8 fProgram.heap = 0;
  n: _2 E' \" T; `; V# N$ QProgram.argSize = 100;  /* minimum size */: H1 p# t  `' L* F2 S% }' g
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 05:57 , Processed in 0.041585 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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