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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* C& u: v$ v1 B

9 b! z0 O  s2 E  `, X- R1 Q+ |* x# [4 [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: d( W2 r& W8 }1 `  x% Z5 \: P' N

3 ~( x7 o7 y3 |& I$ r其他程序段。。。。。5 ]4 X/ R, J& \5 j. V# n
1 D6 G7 n% E" g2 ]. a
   free(x_d);
  h$ Y. p; _. ?4 [
: H8 I: H( [# {0 R% m" b使用DSP侧单独调试功能,验证动态申请没有问题,) |0 S7 L2 o+ O$ L
! s; X0 n. ]) N# ^9 T6 C6 }
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) U# Y- \& Q; u5 O8 ~& [* D' K

1 f6 `; Z1 i& o+ s/ Q: q% a1 o0 g1 P! h' ~' Q

! r4 m1 X% }# m+ a9 x6 P7 I9 e) W0 \0 y8 X5 Q

9 G! |. w' D9 z% Y0 c# b
7 |2 f& l% c8 M) ~: B) c% }% s$ o' b0 m+ e8 r% r
! f: ]: `4 X: P2 B/ K
; ^% k- t& e9 u0 \7 g$ `8 r

3 d7 B) F5 L. @. ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 a1 i6 Q. f1 T+ d8 G( p' D2 K
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 |1 V8 A7 D2 Y1 W: S# M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, s( O) y; |! M3 E( T- K. _$ s
( J) o$ l$ \: y' W/ u: F6 E( @
是不是需要在DSP.CFG中进行配置9 w6 M- @* f2 M: N9 H! m
我现在的配置为$ o; v* V/ R) p, E* ^
1 s2 W* I9 y3 c1 r8 y) h
/*7 F+ G9 P: U0 F6 @/ z- P+ ^
*  ======== Operating System Configuration ========
- _2 s* D. x7 A6 G2 c# \; v */
, v. c9 @3 R  S) n- z$ d- C8 s  h0 @! N9 ?( _& ^6 P) |: F4 H' C
/* no rts heap */  d# `' Q9 O9 X, Z% I, ?% V
Program.heap = 0;( ?# }9 a5 g7 J1 D  s6 R: D
Program.argSize = 100;  /* minimum size */
4 Z( M2 ?$ D7 p1 f8 y" O' HProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% m" h6 D* E5 P* A
' n0 P2 h# |' R' A1 a
/* create a default heap */3 S: {. V/ l2 L9 ^$ w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% U4 E9 b; E8 u: _
var heapMemParams = new HeapMem.Params();3 Z, M( E" M% X  q; h$ L; G5 G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, [% G5 ~5 Y; x$ T$ D* c' Z; w3 l! B, t  e) o' ?$ N: R- [+ U+ C
var Memory = xdc.useModule('xdc.runtime.Memory');
/ L& x: S" D* c' IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 i9 }) u7 R# b5 `/ a( w  n
. l1 L, d& m. o5 E, q/* configure System module */
4 q# b1 m/ X* H2 Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');
3 g/ c" d) T% K# J" ^6 lSysMin.bufSize = 0x1000;
( i- b/ n; ]- t+ JSysMin.flushAtExit = false;( p. [9 O* H. z4 H: l* f
0 M5 m- U" v/ b! ?
var System = xdc.useModule('xdc.runtime.System');! Z, v, Q4 O5 i# \+ @2 O
System.SupportProxy = SysMin;
$ q8 [4 s" v& G% v
  j4 p8 }) r: n, T1 a) s( P( ~/* configure SysBios to use the lower half of Timer 1 */
! t# e7 g) |# \var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 p2 d; R6 Y& i( E% x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');& S  c4 k) l: B
Timer.timerSettings[1].master = true;( E3 g# ^3 L4 u! G& ~" P/ g) B& D
Timer.defaultHalf = Timer.Half_LOWER;3 T0 N7 F# Z5 p' B8 I
Clock.timerId = 1;
6 b+ j  X$ s. k0 T' u3 ~: r
$ l; L0 H; K9 o2 |  j4 r; x. X# x! q! p( h+ k
/*
+ i& J- y2 F+ g *  ======== Miscellaneous Configuration ========5 _! U+ z- k' h" J5 ?
*/' D3 i+ I7 B: ]; P" s% X
- b- w/ N/ ~$ W% F
/* set default diags mask */. ]- E, X3 K! G( Y* f
var Diags = xdc.useModule('xdc.runtime.Diags');4 D3 c/ y' g6 ^' b. f
var Defaults = xdc.useModule('xdc.runtime.Defaults');
( F( W, W+ j7 U, m" R; z
) w: @) Z+ r% i/ n: _& uDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 ~8 @' h& m0 D+ d5 g* x
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, Y! l# V4 V& O4 Q- Z# PDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- E+ ?8 p- x2 i7 U. ^
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// D/ W$ g" h/ x' {
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& Q' f) i, q" Y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 R' [% l, v( yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% n! S0 g" @2 ?- m/ v9 v  i* z$ a( m& |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* r) W, b  P, M: @( ?6 V/ k8 iDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 T- s' T" m/ o$ T5 ~
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 t! t% S4 T' v0 UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- v' ?' I6 T$ NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# E$ K9 N% i7 c$ ?+ y. X6 PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 E: ^! d) [, \8 g, N9 c  p
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ w+ s$ v2 G7 Y' ?4 x0 c
8 l: L& ]) }* L/* override diags mask for selected modules */
# a& \" z4 _9 ^/ q; c: axdc.useModule('xdc.runtime.Main');
+ P( H7 [" @  w% a! A& c) jDiags.setMaskMeta(
" e2 ~4 D% ?& [- y6 E  e: M( L    "xdc.runtime.Main",
; n+ i7 b0 J. a; g    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 Q* P  g7 w. f( j
    Diags.RUNTIME_ON; {: m  G' |. E# l/ g5 g
);6 e6 z  g9 C% i/ Q( X

1 [' F. X$ Q4 A* v9 m' w8 d) v; ivar Registry = xdc.useModule('xdc.runtime.Registry');
7 l+ Z# Z$ |$ TRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- R. K8 ^) u& k1 n# i4 F
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( ~( {. v! V$ zRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, n7 t6 R: @4 F( r! z0 URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 B0 `  C5 p1 Z. P# s+ E+ B! j
, _5 X/ U, u8 B' Y4 q: t' O- ?# n$ G7 ^/* create a logger instance */
" F* i  P2 |! g+ Q$ Q, }1 Hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 o6 Y% ?$ c. P% F0 D+ r- x
var loggerBufP = new LoggerBuf.Params();2 F& Q; c9 \/ h8 Q8 S/ x
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! u9 ?( Q& g! j  u5 P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& V: d8 ^5 Y& d; y0 v% ^  F) d
' K/ P' h/ S7 ^- z1 p, F
var appLogger = LoggerBuf.create(loggerBufP);
6 b" I) l" A; XappLogger.instance.name = "AppLog_Core1";8 x/ z  Z3 v  o& G* p& [# z5 o
Defaults.common$.logger = appLogger;
' M. Y2 S' d. Y+ C5 K; dMemory.defaultHeapSize = 0x8192;    1 n$ B0 F, l- Y$ a9 H8 ^
Idle.idleFxns[0] = "&LEDStatus";( e4 W1 V. ]' X
Cache.initSize.l2Size = Cache.L2Size_32K;
- R0 b* x* s8 l( a3 [5 S& ^. ?( p8 h; F0 S2 e* r% N0 Y# I6 C
回复 支持 反对

使用道具 举报

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 */+ J* p0 a! v. j# j8 r  s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; Q) }2 G1 Q; r& s+ G! o& G
var heapMemParams = new HeapMem.Params();; F4 ^! R: Z& d- C  g
heapMemParams.size = 0x4000;
+ N" O* w' ?% I2 v2 N3 T5 T8 G& _
) w1 ^, m# B6 d$ L7 [* Qvar Memory = xdc.useModule('xdc.runtime.Memory');
8 @0 _8 P- {% c1 t5 r, ]6 OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: V$ c' x, a' `1 ]4 y

# R4 j1 b$ [" y* H8 D# ?我大约calloc  每次共计大小为5K*16bits,
' g) o5 P2 O" I# w* M; d4 [6 `而默认配置才0x4000、需要改大。* R& @9 e. e, M. J6 l

6 a" Y0 h8 F/ v' q  h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& J5 Z0 r# B# S- k/ `! RProgram.heap = 0;) v/ s! h( {2 f* T' @1 j/ g; M+ }5 s
Program.argSize = 100;  /* minimum size */
% [$ d' m) G3 [: r/ `4 MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-24 09:23 , Processed in 0.043241 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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