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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. ]: O; V2 O; U5 r% m7 B4 r: q# D: [4 `
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" L, V& Z$ b& K6 Y5 ]
, \$ D) Y# f6 v& \& H( O其他程序段。。。。。
9 X* H; D' s6 {, j 8 x. J  X' _+ ~( Z. _% r1 R7 q
   free(x_d);
) j/ B' N& l  f0 U
  e4 r* @/ ?# W. Z' ^使用DSP侧单独调试功能,验证动态申请没有问题,
1 k) h  t4 C8 a; M
6 v& W. k5 v! A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' L% F1 u2 L' C9 S2 t0 z7 h
- R, s% l# W/ X# E$ M- J
0 Q8 @1 @7 P, O' U' B

# n' K% k' i0 N4 i- _( z8 ~* e0 h" }9 v; t2 a
2 V, r2 w& E/ X, B0 [  U& N$ C
' v6 _! d7 s% h$ M1 W

# m) i# V! y! q( S5 F
# X* F8 X" o& D% L: {
% A- M1 J5 J' e9 V$ G! V, v$ M. K( m* m4 n3 J7 |6 @: ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% V6 ^  S; T! P% x" d, \
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# @8 I  \/ k* c6 H3 i
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& M% q* |; i9 ~8 y' J% T0 r
) h% E$ O4 I' U& o
是不是需要在DSP.CFG中进行配置# E5 \* s5 M. y/ }2 o
我现在的配置为' K- z% w1 F- R% E4 F" X% e

1 i/ X; {. ^+ N" R1 {, {  E/*
: T; `* V: ]3 \+ e- F7 Z) n% v! | *  ======== Operating System Configuration ========
& v2 n6 r" D$ M4 M9 ^* i* W. R3 ? */, _( ]- ?" I3 ?1 G& m8 o7 c
6 o$ Z) {7 T2 a$ w' X: }  Y; I
/* no rts heap */
! u  }  j4 K" E1 I1 H# rProgram.heap = 0;4 ~7 S" z5 @3 K
Program.argSize = 100;  /* minimum size */
3 M5 c% K( i& ]Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 w7 q! o* h: g* L% V" k6 J5 l& A9 q2 y

6 R/ }2 }. C* {# u6 j/* create a default heap */
3 Y1 @- N  s% P- Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 X, E' Q  l) l% U) @var heapMemParams = new HeapMem.Params();
" \% _$ ^  _8 x! cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 O  \- {8 e. j% W2 T
7 q$ ]. [! A4 M% c* [
var Memory = xdc.useModule('xdc.runtime.Memory');
6 F6 j9 J" s  X- s7 nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( }/ G7 K: M  X* `
) q, b! S- V& q  T) c% ]( d6 S$ A! m/* configure System module */# I2 S/ C8 I, V: m! Z3 V
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, V& E9 i) m" ySysMin.bufSize = 0x1000;8 E5 E0 a) n: c
SysMin.flushAtExit = false;0 _. x# W4 _5 t! B8 }7 \5 E. l
2 h$ h0 t8 J( N. H
var System = xdc.useModule('xdc.runtime.System');
% S6 C$ i% W6 Y  d8 c( [  _9 YSystem.SupportProxy = SysMin;
( M9 ]' F) m6 f) G' n9 a0 \
+ M7 w) r+ l1 N( o' d9 }/* configure SysBios to use the lower half of Timer 1 */9 L# C2 w( }6 s! Q4 ^8 q8 c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 q( \% h8 @0 P5 A0 T- t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; S, T! a1 w& p# n! |- O1 N  YTimer.timerSettings[1].master = true;9 k# n& E" \9 q6 z% S7 F2 N
Timer.defaultHalf = Timer.Half_LOWER;& |2 X% ~8 S4 P; e  Y1 G% b
Clock.timerId = 1;
; K( f4 n; l& p  r4 ~2 D' K: s: L: V0 a8 @. `
% s" s3 u  b: p& i+ Z, Q* x- w
/*
$ V& b+ S# F+ z& O, d% r6 b *  ======== Miscellaneous Configuration ========
* e9 @5 f( N  P4 g) V5 U */8 M8 u' [6 k& i8 f4 d8 N
) a; \2 V. f( z
/* set default diags mask */
8 K2 E# T4 ^3 f1 B. E. m4 H7 u/ J( {var Diags = xdc.useModule('xdc.runtime.Diags');- M) b. B& s, S* ^% ]6 ]6 Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');0 i! k1 V. r- ^6 M8 G0 V9 C
0 T  p* v4 ~" N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! d- h* {: ?( q; p6 A
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 M- q; E# o, t& w/ |; Q" f) t
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" q: W# ]/ ]( D* ]8 G
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 w8 T5 b1 i' |9 \( A5 F- ]Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) J2 V/ S: v* w/ z( R+ V4 B
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; P% b' i5 b, B7 g* v5 y' I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( r3 n8 ~1 Q# h; T$ Q8 }& UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' a& u1 G5 a) F3 L6 I3 |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- h- a/ j( C% K% S# C& i" S9 w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, v; S+ O# b# g* X: YDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) w# v2 _, x, t$ }3 k9 r
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: w  b  _! m9 a7 Q! |8 I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- z" Y+ l( _5 F" JDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ f1 W+ S% o, o9 i& I
, {( _: ?6 m7 v" q* _$ x' x/* override diags mask for selected modules */
" \! G* a8 Y8 m) }/ s: q' D& ~xdc.useModule('xdc.runtime.Main');
) V. V5 a5 a$ t+ `# q: [: NDiags.setMaskMeta(
- A; ]) l+ [8 p5 i$ p( h    "xdc.runtime.Main",
! B2 m. x0 g* [; [    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; N; L- o) c5 F. v$ r8 W* |* t+ S# ^1 `    Diags.RUNTIME_ON, f. P' @3 ~, [+ \4 o5 q
);
/ g. y& G7 m1 ]1 M( R
' @1 j% s6 ~* ]" @* Yvar Registry = xdc.useModule('xdc.runtime.Registry');- Z" t1 B' k! R+ _# {  v% w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  D6 O5 ?$ X0 ]7 t2 U0 iRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 U/ W$ @) X1 h! ~& ]( x+ V( c1 hRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. n1 B  X6 H5 U/ }
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ N. g1 n1 l0 l. g4 n: ~
+ r; e9 N# G4 R5 l1 D
/* create a logger instance */
. |5 z' l! T+ j) y1 y0 ~5 gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 k4 t* B+ f( J6 p/ p" r
var loggerBufP = new LoggerBuf.Params();
2 ^6 {3 s$ _+ t- T, E: AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 m- M+ H: M8 f: R7 c; ^- w( CloggerBufP.bufType = LoggerBuf.BufType_FIXED;
& Q9 d' k0 O0 d7 x; |1 o* y( `' R6 n3 |! f
var appLogger = LoggerBuf.create(loggerBufP);( f) B0 }$ @5 [( q/ A+ ?" O- m
appLogger.instance.name = "AppLog_Core1";0 K& @9 L0 g7 I- h( {% p
Defaults.common$.logger = appLogger;0 e; a- j# u8 t$ z. c$ j
Memory.defaultHeapSize = 0x8192;   
% x, W- g/ D, {4 R0 S6 pIdle.idleFxns[0] = "&LEDStatus";8 m) b6 V9 H, D8 `# u& z0 i$ c) p8 H
Cache.initSize.l2Size = Cache.L2Size_32K;" D( ]5 a% c: u

. g5 C# K/ p. H
回复 支持 反对

使用道具 举报

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 */
; t* `; s* J2 T  t  n$ k" }/ k/ Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, S- U& N& i4 j  vvar heapMemParams = new HeapMem.Params();
5 G7 v2 ]1 i# nheapMemParams.size = 0x4000;
: _- e; j: w+ {9 f) s( M0 p" \% w3 `
var Memory = xdc.useModule('xdc.runtime.Memory');; b- C# i$ }4 ?+ h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 U: }" i) `/ M9 I8 T3 k
0 Z# z8 V4 [! G, {7 O
我大约calloc  每次共计大小为5K*16bits,
. b% R6 o1 }+ `4 F而默认配置才0x4000、需要改大。
8 m) m* m; j7 m, M: B$ U0 t( F, @% |" G" i) G9 V5 I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 \) |* z& j3 z9 e0 ^  }; ?Program.heap = 0;
+ q& n- @* Q0 x. Y: c6 g& f2 lProgram.argSize = 100;  /* minimum size */0 i, R( r' e+ o- N4 V5 S
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-6 03:06 , Processed in 0.041555 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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