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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# d2 ]; K, j5 t0 u- U; w% N7 t( w+ o- y9 f2 O
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ J9 @9 J7 u3 a% H0 x

% r/ H' W0 n& u) {; K& N其他程序段。。。。。) K+ X( h/ O' n) D$ ?
# c! k* |& C5 E/ P* v8 Q
   free(x_d);- N9 Z3 o5 N$ ^7 v- h
6 Q! \8 T+ H/ @2 v6 B9 r
使用DSP侧单独调试功能,验证动态申请没有问题,1 m' F$ L+ @, s
  J0 C% @' e% w+ u! H: F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 Z/ ?/ j# e, z) L
* q* E0 s9 X8 j+ ~1 K6 g$ f

# [2 P* K; g( y5 [0 c/ X1 j6 q" h6 I7 q8 k% R4 t5 J
2 _2 ?$ e+ V, A  {, T
9 W% u: R/ r- o$ m
% S8 u' ^1 G: E  h9 J: ^8 A
: {+ T3 Y5 W* f- A4 _

% {, I* Y* i/ ?
3 \( ^2 }( X9 S8 q: O  j7 [: d2 V; D4 F, J, F$ a7 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 t0 g8 R" J: g) e! k8 T
Program.heap = 0;0 P- q9 T3 r* G$ z6 i' ^
Program.argSize = 100;  /* minimum size */
" S: k  \  w& q0 G% BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */7 T" O! b6 i: w$ S9 a' @4 c4 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 l/ R/ Y' Z$ `# }( Ivar heapMemParams = new HeapMem.Params();& w* b. h$ p2 _  e) i6 }
heapMemParams.size = 0x4000;
1 Y" y( u3 C6 Q' G+ p
3 `3 W0 ?; \6 L( y5 t2 v9 jvar Memory = xdc.useModule('xdc.runtime.Memory');' ?0 y7 S* \/ Z2 y+ h/ I5 i* R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 z9 i' G( ^) o- Z( ?8 y
# Y. w0 Q& l; E1 Q  o; \# D$ A' A
我大约calloc  每次共计大小为5K*16bits,
0 ^: d0 S- T% ]7 V而默认配置才0x4000、需要改大。
& ?" Z. F' S3 z
1 N, b2 v6 {/ ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: |8 G5 O4 t- Y% q! Y' T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 a8 w! O1 g& d0 c3 H( o* U4 f; [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% ~1 u5 z" }4 m+ t3 i' |3 Y/ }
* O% u% W% N2 G+ E% {" @
是不是需要在DSP.CFG中进行配置; m% i. s3 G9 y+ }; @5 Z
我现在的配置为0 K3 Z; H; x3 r: R
8 J( |0 k) z9 ?2 Y5 m
/*- d) [2 |2 f# W
*  ======== Operating System Configuration ========
/ q/ C6 Q# s& u) T */8 I0 d3 s# v* C# F( ~; W

1 W! ?" d. {4 p6 z$ m$ [' V/* no rts heap */" v4 ?3 s8 H( o+ V! N4 j# ~5 c
Program.heap = 0;
* L8 \' T, f4 b0 S7 o. _7 K- ]Program.argSize = 100;  /* minimum size */2 A/ \, \0 ~+ \' D
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( H: [1 e0 A) F) r
% G+ L2 ?, H( [; l. `$ h8 `/* create a default heap */' F+ `- O. W, |. i. r7 D, h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. k$ P. P" L3 Y, J1 |  |( z0 T# ?: }
var heapMemParams = new HeapMem.Params();* g" f. u& V' S, w( ^7 v* C' f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 a2 b5 v; S$ ^
* y4 M# [% z. ^2 ^
var Memory = xdc.useModule('xdc.runtime.Memory');
# v  U9 p) ^. R5 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" Z, ~0 y  Y& \, @7 }8 \4 I
6 w: |- n% v! P9 H2 S
/* configure System module */
, x& ?$ L7 z! Q4 Mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
* [2 a- F7 G9 X0 c# ZSysMin.bufSize = 0x1000;
# j7 h& o! \) H) b6 C* KSysMin.flushAtExit = false;
! `- M  T7 T. I! B0 i% h0 G8 e2 F8 e. q2 H' k
var System = xdc.useModule('xdc.runtime.System');0 j, }- l* d! z$ }! f
System.SupportProxy = SysMin;2 Q2 [- s$ _5 o4 ?
# T  ~' [: i8 L8 _+ c% ?
/* configure SysBios to use the lower half of Timer 1 */
+ [8 x  R& f/ Y- B" I9 [, ^0 nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! @7 w  s* s$ j) e) |
var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 V5 i  q4 h: A  F; T$ m
Timer.timerSettings[1].master = true;
& a) T8 P- n! m& ~' JTimer.defaultHalf = Timer.Half_LOWER;
; x$ B- q: I( n7 h1 w. [: GClock.timerId = 1;
+ T2 T" C+ u* v6 A" O2 S  N9 l; E/ G/ M4 s1 a
# m0 n# f$ M& P' z; [
/*/ D9 Y$ H9 M  U7 k; k
*  ======== Miscellaneous Configuration ========) T/ P" H7 z1 E/ d6 v- D5 R1 ^
*/
# ^" z: ^: n& I# e& x' \, P" v2 b9 w0 P: ]- r: t
/* set default diags mask */
! L& j0 g( R+ x+ mvar Diags = xdc.useModule('xdc.runtime.Diags');
8 p4 L2 ~( x( ]8 p- z2 q/ dvar Defaults = xdc.useModule('xdc.runtime.Defaults');
* u3 P. j6 i# L- h/ k5 u' c8 W' r; Q: j6 j& a9 D2 `( g8 l. M  V3 i0 [( E% T8 @2 o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  k, ?$ f' x4 |' E, h" ^3 oDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 B# U9 b% [/ F" Y+ p) S  L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ h; W" b5 h8 ^2 uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 ~1 Z# o0 Q3 {/ q5 Z( L+ x, ?+ \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 k& L% R) J: ]5 m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 P1 @% v2 @( L, w
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 a3 q0 g3 ]" N& X. K* ?' @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 d: o4 a$ X- k  }+ r8 X6 oDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 v% U( O2 j; t. k6 A$ L. z* t, Z7 dDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ u9 }8 Y. L" \4 Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. p+ H( y0 J% K# s  v1 x% qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. Q4 I8 _  X$ ]2 S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 A# j! h( H3 k+ Q: {. lDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  L4 D9 K1 L* f+ C% I  Y; c2 p5 B4 ~

  }% e% F; _, Q* w, O/* override diags mask for selected modules */
* X' Q+ K+ V5 Mxdc.useModule('xdc.runtime.Main');
& |$ y+ N1 g" M* b- }, ?/ }Diags.setMaskMeta(! X$ r7 W$ u. @  }, Q1 j7 X' \
    "xdc.runtime.Main",
1 D. b* y. q( Q  B3 \. s2 S    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* j/ ]1 j% L# A3 J+ I3 `# e3 I    Diags.RUNTIME_ON/ v* x9 m2 Z: ^7 w7 h
);
1 D: ~& d! a  g" l/ l% t! R$ {0 T+ a' `& j) M! P2 u9 F" ^) A
var Registry = xdc.useModule('xdc.runtime.Registry');
3 T$ A  @5 _5 p: h. oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 v2 R3 b  z: R+ ]% V  s6 W/ DRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 V& C* t4 ?% S2 KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 F% q8 |% Q5 n+ A) ^: sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( ?5 ]# ?( i, M# I8 A' f# K3 s' i$ a! q. H" v% ^& |
/* create a logger instance */
7 d" K, D- ^; c5 jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 \6 `% f9 F! a; L/ g9 z! R
var loggerBufP = new LoggerBuf.Params();. S( M" i3 `8 |: J; X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; p3 ^* q  z/ iloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 S1 Y9 t4 E' Z0 L. {" V
4 x7 R# f6 R; g3 b5 ?' f; b# }var appLogger = LoggerBuf.create(loggerBufP);
7 S; t2 u6 @# [0 xappLogger.instance.name = "AppLog_Core1";
2 l9 J; E8 D9 o& l8 T0 ]Defaults.common$.logger = appLogger;
  ]1 X- X  U9 I9 |# WMemory.defaultHeapSize = 0x8192;    $ g" Z5 k9 }9 N7 g+ u: z) y) B: B! ^" }1 s* s
Idle.idleFxns[0] = "&LEDStatus";3 c7 q" y* I9 z# \& p4 c
Cache.initSize.l2Size = Cache.L2Size_32K;/ V# k( y  l; A& u3 K3 A2 ]5 F2 _

3 R+ a3 l" Z6 A
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 01:27 , Processed in 0.042855 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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