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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

- L7 ?+ P2 H! f2 ^+ w7 L    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- ^5 P% x8 S% R* T1 z
9 g7 Y9 \) g- I
其他程序段。。。。。; B" X* i& |, x8 u, j6 i: y

) j5 j2 X# B) @) j) c   free(x_d);
* S1 l. f5 S/ d: g& u; O$ O- ^( |9 g0 z& V
使用DSP侧单独调试功能,验证动态申请没有问题,
& u% Y. l% F0 H3 v0 y
% I: C1 m0 w$ M1 ]- _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ Q2 ?! _" s/ p2 g+ I

1 q; f) k, j! P; W/ U, f; v4 Q
) c9 d. b- ~5 `
/ L5 j% U' l1 I) L* V7 o$ {, ~+ d7 }. ~3 B. v7 M1 p
2 F( V  U& B; K- h+ k9 k' d0 c0 o2 a
$ C( t0 }1 y1 c  V6 ^! o

  ?7 [7 f$ ]6 `8 q- p0 ]$ p2 Z- @- S. J6 d( S! t6 |9 F

1 ^/ U# P% y8 S+ m' N% e
( C$ l3 `' W. a2 A5 v0 O5 B- {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 e2 V9 R) j3 ?) b& @0 ^
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; O) D* U5 S6 \$ [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) e. T- `) b% M% V, O

) b2 x- t; x1 t! X) ~* I, q8 Q是不是需要在DSP.CFG中进行配置
* M# \6 V3 x2 s8 h0 l$ ^3 G: v$ y我现在的配置为
# X1 a" f0 z8 t6 N' A) d! G: y9 g$ P0 l8 r6 {! ]) o1 U" z
/*& ^' c* H2 l2 V4 |& `
*  ======== Operating System Configuration ========
0 ~" h. e0 r8 A$ o! I6 X/ ?  @  v */6 V* N: s4 ^4 i/ E
! _  {; m9 i  e
/* no rts heap */" J4 K% S5 }+ }- a; T& |9 b/ B
Program.heap = 0;' W. t4 R' v  U/ ^. X: }, |
Program.argSize = 100;  /* minimum size */
; B- t) D5 b" ]* [+ OProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 [. R2 _( |$ y3 ?7 L+ M. C

1 `0 y/ C7 `! Z# t- P! S$ n! t+ @/ P/* create a default heap */
% f7 b% p  j9 Q" L  a, ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, T% J7 T7 v3 H  m- Ovar heapMemParams = new HeapMem.Params();
4 s( `7 m; T; Z' DheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 |  x8 Z' g7 h5 N# f1 [" Y2 w& W+ d
var Memory = xdc.useModule('xdc.runtime.Memory');3 a' K: d$ m5 r. A8 u. |7 |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) G" ]0 v/ B: J1 ^- Q4 i6 B  c- ?. u! ~% t7 O6 M& t
/* configure System module */
2 V5 O, T/ f9 a, X! U8 I9 L. fvar SysMin = xdc.useModule('xdc.runtime.SysMin');% C! X& }0 d4 D. [8 H' J: x
SysMin.bufSize = 0x1000;# h$ G! L* R0 m4 f7 D9 m
SysMin.flushAtExit = false;. ~) P- ]  o: u" i' J! |+ R
# S, j! {* B( l) k
var System = xdc.useModule('xdc.runtime.System');, z3 r* I/ E* o5 [
System.SupportProxy = SysMin;
0 i( A* Q4 E3 T' M( h8 {0 ?9 b2 i! G5 y) ^; h7 [$ m& K
/* configure SysBios to use the lower half of Timer 1 */
* n$ v2 |# e) }$ F+ H8 S& Lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# v! {" ~) w3 a; Y3 A/ {var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: Y, r  ^4 o4 O( j. f# G/ ITimer.timerSettings[1].master = true;
  M+ z1 ^: I3 zTimer.defaultHalf = Timer.Half_LOWER;6 ^' K5 P+ e1 R
Clock.timerId = 1;
2 k3 G7 v' ^2 Q/ M9 L  g6 g9 G8 B3 |7 x
* F( _$ i4 n- F4 J
. d. p7 g( @0 Z; g& O& `' J/*
3 O4 v0 Z8 h0 j& T *  ======== Miscellaneous Configuration ========1 C5 |6 p1 Y& h. b2 X/ d4 t
*/
: W4 z, ~5 U0 b* r5 h! b' F0 h$ t( J+ f1 P) H
/* set default diags mask */
# v% M3 q6 K1 W. r3 G6 e' n) C' kvar Diags = xdc.useModule('xdc.runtime.Diags');+ D, T1 Z# k! _; ]; _
var Defaults = xdc.useModule('xdc.runtime.Defaults');; L$ t& y$ a' Z7 J

$ ~7 }; _* M- wDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ F9 y; Z, T; B1 G/ R* ADefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 Y, D; e2 I0 U- o8 z8 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 k* H# B" r- m/ b# Z8 r, b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 `1 Y# M# U3 {* q7 F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& X3 n- p* r1 F$ [
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 ^7 S5 R. a1 Z& J
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 w' r2 J3 j3 _$ G4 \% ^" ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: `' W9 u6 k; |% f: D& p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! h% t( m: M! }2 T1 {Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' E/ a& n" L0 X2 @( t: Z! PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* [; t, b3 A0 E8 r2 Z; H5 JDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 `8 O5 x( f5 p5 K5 L* kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 J5 R& M: p+ J7 s+ Y9 ^Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  O1 X* p) Q1 Q1 @- Q, X5 H
" ]4 E1 U- q/ p9 `6 W5 J7 H# ~/* override diags mask for selected modules */) M+ U6 q- {% |, M) N- ^* N
xdc.useModule('xdc.runtime.Main');
8 ]( z( ?) w2 V9 n# R5 bDiags.setMaskMeta(4 A3 N9 N: a& X* [0 L; j
    "xdc.runtime.Main",
' {, U  |  r) U' p* g    Diags.ENTRY | Diags.EXIT | Diags.INFO,( P0 ~2 q. D9 X, D1 U
    Diags.RUNTIME_ON- Q9 @) _- R6 U6 Y1 |" t  n. E
);5 R9 o0 W* o" ~- ?
$ e3 d6 j/ |/ X
var Registry = xdc.useModule('xdc.runtime.Registry');
* Z; |+ J3 d+ G, WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" g5 n( T4 c! H, [) B
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, w0 ?! K+ @) y  @) `$ ^9 |# _9 f
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' M& \3 t, t0 _  Y% @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 d% L0 l1 i& i; ?% Y; O/ P, U5 G1 K% j6 {+ U9 M
/* create a logger instance */$ B; [, K4 c/ i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! g$ k9 q1 a# j" p) h; |( Svar loggerBufP = new LoggerBuf.Params();$ m  ~) M6 j, t: j
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' _1 Y7 B& y% `1 Z1 m* b, q& B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  R0 B/ ^' b1 `( Q6 `* S, p4 @8 P0 q
var appLogger = LoggerBuf.create(loggerBufP);' ^- H! p" T. u3 E
appLogger.instance.name = "AppLog_Core1";
  h2 ?. C5 Q% @# V! _Defaults.common$.logger = appLogger;3 g) S6 A- G& S+ q: O
Memory.defaultHeapSize = 0x8192;   
) z& ~: q) Z! r1 p9 s/ Y5 BIdle.idleFxns[0] = "&LEDStatus";; a, m* k/ r  J( u7 V
Cache.initSize.l2Size = Cache.L2Size_32K;
; b! z: b/ E$ v, f8 E5 H
0 A/ y. M$ |5 h3 v- P  S* e
回复 支持 反对

使用道具 举报

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 b& c* M9 U! }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ J: s+ Z6 @5 G) ]var heapMemParams = new HeapMem.Params();" _9 I$ D0 ^) C4 N! p- ^  v# W  G
heapMemParams.size = 0x4000;4 r" \+ W! b  Y1 W* U

5 \; T0 p7 |8 h! \- p4 R9 H  Jvar Memory = xdc.useModule('xdc.runtime.Memory');
5 O3 I- J2 a+ C9 v/ {+ t* jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" a7 O* O" A% a9 v% r& F2 s
& W% Q5 d# @( u, D$ W% G我大约calloc  每次共计大小为5K*16bits,# k' r  M1 p. p( ?
而默认配置才0x4000、需要改大。
3 Q! L  b# F' V& Z; Q3 n; h) m; P+ Q9 s4 G+ x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 F0 t( P+ v# J+ U
Program.heap = 0;
) }9 |4 Y* p+ W0 c( z( pProgram.argSize = 100;  /* minimum size */
3 w" {) x4 D0 @  s8 _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-1 16:00 , Processed in 0.046829 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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