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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 ]( ?) p- S' s* e* W
6 M$ c& ?( R5 y0 c! {% l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ V( d- f) w0 q7 C6 s# ?' [

! }2 E7 a+ ]$ Y& ?其他程序段。。。。。
! q3 B- F4 l. ]7 F( c
) Q$ ~# ?2 k) o. f9 A* L2 |' D   free(x_d);! S" f) w8 }6 t( E1 k, M
  i9 Q; Y* X" V# E; w
使用DSP侧单独调试功能,验证动态申请没有问题,
/ U- x. N2 k& M1 D
) m- A( x- T2 W) T! X: T$ t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 g9 M2 S# Z' f  M- B) a
* E3 f- R! y7 W' \$ b8 u
/ D. n) C9 L- Z% t! [/ g

$ V" P' S$ k0 m& }6 F, |. e) R' ~
, f" S. I1 l' \) a2 g( J
% z; C7 y. O, D/ i' C8 x' w
3 U8 D2 T( h7 K( Z
. I! I9 O6 l4 X
4 R  k/ g+ n- I* ?+ s6 W
! @* `2 }6 [! S' ]% [* |' h3 h& U2 D: ^/ B. _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 j$ R+ ^, a! x$ U! a% L. u我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! M( c! x0 }# E0 E
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. T" o+ B; i2 K; p" O
& F0 E2 X' u3 G# q
是不是需要在DSP.CFG中进行配置. y  j/ x2 W1 z, F( L0 Q
我现在的配置为' C5 U# Y# L% K% y$ X1 j' H
  d$ R" e/ K5 h. s8 @9 r
/*) O' O6 ?- n( ~; |4 A( z& O' g% m0 N
*  ======== Operating System Configuration ========
; u8 T0 E) f. \: y9 H: y4 ] */
. C5 i# {6 f8 t' y. G' ^! I  y6 O
8 q& Y6 C5 w2 X1 @' K/* no rts heap */! B- C% }; E* q' C! |) l4 ]
Program.heap = 0;2 Y+ P1 g$ J# r' G# I8 W
Program.argSize = 100;  /* minimum size */7 j( F& A+ I" q+ d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) i+ @) \* i$ M8 k* U0 R

( G& r  Y  m9 k3 q! @# ]/* create a default heap */
% Q; p1 E* I, j: L) ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 S/ S8 c' r6 i
var heapMemParams = new HeapMem.Params();- U+ w8 R0 T# x; i! w, i
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. p1 f- W# Y9 R2 M9 H6 }8 y7 _- ^
, M+ M8 f2 H! m
var Memory = xdc.useModule('xdc.runtime.Memory');
6 `' I4 Q* H- T* }* |4 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 E* w1 h3 m; x2 a
2 K5 t/ h8 @7 X$ I/* configure System module */0 u5 ]; j) D3 ?* H
var SysMin = xdc.useModule('xdc.runtime.SysMin');' u; W  b- [  ~6 s; I
SysMin.bufSize = 0x1000;
4 v+ |7 p; x, a+ LSysMin.flushAtExit = false;2 U; r8 [1 u3 J) d" \/ W
9 m8 r: o6 Q7 @4 z9 P) s$ E
var System = xdc.useModule('xdc.runtime.System');! X/ }5 P" p/ z; b
System.SupportProxy = SysMin;
0 |" _" O2 q$ A( |1 y5 x0 e
) d3 n1 o! y: T1 }6 |! l/* configure SysBios to use the lower half of Timer 1 */
' y9 L" U. ?2 C( v, @var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ k6 [. A; v# D1 ^2 c+ F* E, c8 a0 gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 s) P1 l$ w. z' }% c: A  yTimer.timerSettings[1].master = true;# `2 q  y& \' A: n) _* r' _
Timer.defaultHalf = Timer.Half_LOWER;
  u; Q% J" N, P4 ~' L" WClock.timerId = 1;  p% {, @; P6 ~0 w9 E
$ Y# _- X+ l- ~! m& _4 k5 N; |+ C

8 w: h0 g1 _: ^7 Q/*2 X$ S! w% W$ W
*  ======== Miscellaneous Configuration ========: k; P( w; ?# }0 V
*/
6 }/ }, }/ \6 y% ~* Z( m
' _- f: p# B) L3 }7 o/* set default diags mask */
3 J% [) m: Q% `5 ?. m, \var Diags = xdc.useModule('xdc.runtime.Diags');4 e( E% u1 ?" v0 @3 u& M" }
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; h, u3 g5 M# X& @& B
8 m9 [+ y2 r1 M2 v3 V0 uDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% ~6 R# L9 k: _) J5 L* E- rDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- T( ?3 z: w3 n) B4 B! k5 Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 B$ m# @1 y6 Y9 M! c+ m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ D0 Z! C" t2 z# @9 `- xDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; U" f' r3 ?9 [7 r& |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' c5 t5 h, z3 O$ ^% S! oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) }$ \& d6 ?: YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 u$ A( e" ]% X1 y2 N/ t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  p% t8 Y! ~" m4 VDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' e* G8 d5 \4 L& P. ?/ b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; g4 g( `- \; r& L" A2 ^; ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 `% H* k: a# X5 F/ s7 oDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) b8 }% A% q& }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 V8 \, G3 I$ Q7 r
' i( p9 Z+ ^! W" x( K
/* override diags mask for selected modules */) T+ v+ n. |: F2 D- A5 i. J
xdc.useModule('xdc.runtime.Main');
% h- j8 l# K! [Diags.setMaskMeta(
! j2 R- ?2 Y; @. h( e    "xdc.runtime.Main",
0 X& F2 v. j" M) c8 k    Diags.ENTRY | Diags.EXIT | Diags.INFO,* @6 i% h! f6 i- F' g
    Diags.RUNTIME_ON' t. h3 |0 K) X9 Q
);+ `" K% V/ R1 E. l' p5 F2 a0 b, E
$ E7 R/ T4 A5 e' U
var Registry = xdc.useModule('xdc.runtime.Registry');
, J: z; s2 y& p9 ^& \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. P1 O/ Y% R" xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 w2 J2 P- ^/ [* i! i" g' ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 s! U7 Y, O. FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;- d& F0 @# U) ]2 p, r8 _

# `  ]" }6 ~, e' ~( c6 R8 }7 g9 s/ E/* create a logger instance */
3 O/ D. o3 Y. H* zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' T" i) t9 [: p6 o6 ]  Q% O
var loggerBufP = new LoggerBuf.Params();
( C5 {/ U4 W9 N% a6 u4 X- u1 {6 _; UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 g) a3 P0 ^' o5 u7 QloggerBufP.bufType = LoggerBuf.BufType_FIXED;, V& ^$ O7 x  L+ I: a" _% g$ O5 L
' l9 W% C3 N3 K  W1 l! X
var appLogger = LoggerBuf.create(loggerBufP);
  C/ [% [% _! r4 A+ H, O( Q& [appLogger.instance.name = "AppLog_Core1";: q3 ]/ w2 m$ e% s) O
Defaults.common$.logger = appLogger;: }' Y% @$ S- T& t+ N& r& S8 Y6 l! h
Memory.defaultHeapSize = 0x8192;   
; C+ k2 Y, `! v& [% GIdle.idleFxns[0] = "&LEDStatus";
7 ^  p: x  o2 d7 K5 V$ U+ a1 o8 rCache.initSize.l2Size = Cache.L2Size_32K;7 a* }' Q, ^  }

+ D! g! ]4 M' N8 |2 p! D8 i
回复 支持 反对

使用道具 举报

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 */
4 F% Q4 i+ M2 a9 n. B; svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# m7 L' {3 ~/ Z! @var heapMemParams = new HeapMem.Params();0 V& e7 N! e; F& ]2 s7 a- \
heapMemParams.size = 0x4000;! m# [5 g% t' K+ `: {
# @! @3 K/ f8 C2 o8 W
var Memory = xdc.useModule('xdc.runtime.Memory');
1 R1 k6 f! A' h2 z( ~3 _. NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 M9 a6 g! t) X/ Q4 a( ?$ P
) h4 _' N2 R  Y2 ?' |) ?
我大约calloc  每次共计大小为5K*16bits,/ p- m' \: B! t: k8 y$ s% N* m
而默认配置才0x4000、需要改大。- Q% C) v! V. I6 k) v0 k8 Y

, h( n- G0 t4 D9 b) E) w/ D) T' f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: Z1 q5 o2 X/ p6 c( d
Program.heap = 0;
/ O: F8 U0 Y- L, ]  @Program.argSize = 100;  /* minimum size */" b7 H$ W& l$ V1 j) N9 p
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 20:32 , Processed in 0.042418 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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