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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* X; X4 @: A1 ?5 `' z
" U; l! f4 @1 U8 D" P  [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ |) G' }5 Q, Z& f& O) z! E8 h+ _( Y
其他程序段。。。。。! f: `$ _3 T+ P2 R

5 a5 a) }+ y: f( w$ s   free(x_d);" }& I3 v% Y: r5 c
: B. e2 P5 Q* t3 Y- T
使用DSP侧单独调试功能,验证动态申请没有问题,  D# X9 z  t# ?3 @  Q

! e6 L  s) j7 W3 }: R" ]" W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 ], I% d% {( N; ?# F
' b1 y5 t2 E8 b  c6 C
( k' v  g! E; `" ]8 D

5 q. w8 T5 Z& F# b/ {1 w2 N* g9 {9 I* q3 y/ j. t

, E% k, E" |% z8 |9 S
0 f2 S4 r+ \  B& d8 b  M4 O$ c& `

. T! C8 F/ o8 L( _7 r; f0 m8 b  K" L: n# h( C/ [6 l7 U! t  t1 `; b2 G" }

( u7 E8 |9 x; y4 P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 h/ P  l( W7 d+ c
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 |: M( S4 n% i
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ l7 F$ u+ U! N9 r0 w7 o

( Q; m( [1 D5 y+ Q是不是需要在DSP.CFG中进行配置
6 ~: Z% l$ U9 B: l我现在的配置为3 W( C( f: j9 q) Q

' V- s" }# ^" @% h4 a! G% J! M/*
9 y; v3 r2 Y+ q6 N3 F1 W! b5 I8 r *  ======== Operating System Configuration ========: O' V2 e& ]' q5 j; f2 y5 @( \
*/, }) ^# T+ M5 a( k  R- D/ J
! z, T4 Q! G- f; c
/* no rts heap */' C1 {* t3 K/ o; Y
Program.heap = 0;5 w- Y; A$ n9 q3 e% c" L3 D
Program.argSize = 100;  /* minimum size */1 t$ m7 e2 w$ e( t" m+ h3 ^
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 v( M1 V: |: c- ~- y
6 Y3 f2 w; h* M/ ^3 {/ T' T
/* create a default heap */
1 ~& ~9 s# ~8 e0 U" O5 S. m0 h5 pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. Y9 g$ P* U: w& Gvar heapMemParams = new HeapMem.Params();
. O. p2 C. L6 _2 ]heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ U. W( y3 a/ r+ ]+ U

, g7 c8 o. z' _' u
var Memory = xdc.useModule('xdc.runtime.Memory');
$ O( D! ?0 ~: H+ G3 |4 G% O8 VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 m. x; `1 |1 g$ ^; H
+ |9 q' a( G/ X% s( r( @7 C. G5 n/* configure System module */1 M6 T" p0 |9 L& {
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 `- T; @7 `7 `( YSysMin.bufSize = 0x1000;5 J) B8 s( a: m. w; y( P8 a
SysMin.flushAtExit = false;
# f. ]5 L5 C; t8 C0 \
& v) y8 |9 A! V8 Dvar System = xdc.useModule('xdc.runtime.System');
' d) ]: Z5 c4 G1 J5 {3 H! USystem.SupportProxy = SysMin;
0 D' m% b9 Y* N( v$ V5 M# I2 l% g) {" A0 Y5 q3 @8 F/ h
/* configure SysBios to use the lower half of Timer 1 */! s7 o8 x$ g  n4 H) Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 ]9 i  C: v3 q( o3 [: I. g
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ n6 [( N9 O7 h- l: V
Timer.timerSettings[1].master = true;
. j5 Q5 v% e$ f% a. Q6 ^) W) ^- cTimer.defaultHalf = Timer.Half_LOWER;
6 V: F/ A$ @: R% h. UClock.timerId = 1;0 U+ j- R3 _4 V$ x, \) H5 p6 L# m5 `
0 A* D* Z. W8 E3 H! |; u' a
0 V7 y( P' g; b% z5 y9 z
/*
, M$ U( _$ O. P( h3 B/ F *  ======== Miscellaneous Configuration ========
. z% c" w$ |3 x6 O  Y */9 b; q* d' r$ X' \* N2 H

! Q: u/ e" W5 \- `1 B- P8 _  s/* set default diags mask */
' X( |+ N3 D) h3 \var Diags = xdc.useModule('xdc.runtime.Diags');
& \& h* x+ n/ k4 o0 f, Uvar Defaults = xdc.useModule('xdc.runtime.Defaults');
" }$ Y" |1 q: Y# l8 e. E' W
  O. ?3 u7 p4 C8 G; }, wDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 a1 o1 K0 B6 ]% U$ P
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 W& ]! _% S) E7 ]; J& C/ ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; g; L7 Q1 W% O9 k" f( RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( K! g! }: D5 j- }  yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 B8 o" r% B, \- `( x7 J, F4 kDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  U0 t0 X8 x; G: ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. E) I6 |. m% t1 k$ ~- o; z0 @; e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 O, y0 u/ e: R, CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ J& o/ l- u% O) E" l* H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 Q4 e: W. J' D" g2 S7 a7 [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" s" |) o  u' A5 p7 r4 dDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 J' ~$ ]& e5 I' c, ~
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 W3 T9 m6 F, R  iDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' m. x' @% g- v
$ {, T' D3 ~8 ^& K* t  }! \
/* override diags mask for selected modules */- r8 }. _" y7 e
xdc.useModule('xdc.runtime.Main');8 i+ L/ \3 [4 C/ v; E
Diags.setMaskMeta($ z6 n- L. r, w7 G
    "xdc.runtime.Main",6 Z+ g% o& \- t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 a1 W# |4 v) H2 l3 [2 M$ ~    Diags.RUNTIME_ON
$ M5 z. @& C$ X3 w5 E6 B. n);
% |" }( i' H0 p; g
+ V- l3 I8 |. C- t" q( [0 m; Lvar Registry = xdc.useModule('xdc.runtime.Registry');
. v2 k( _+ P. L# {  Q8 bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 b% f" A* f8 MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. G( @5 E+ I. b$ ?9 Y- U
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 ^7 c& |7 J' A7 ~
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 {+ t, h  y( ~7 ^8 _, S7 v4 c) v& V* X0 ~: [6 ]
/* create a logger instance */
6 _' _- V* ~& F/ V3 t. u$ h5 xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 ^- b/ u, _% g  k' M# W( Q
var loggerBufP = new LoggerBuf.Params();( e3 b5 V+ L) N: d
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 E3 H: x7 n# s5 }9 Z+ ?8 D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;: s. S& h0 M, E1 y: y2 c8 F

6 k+ k: ?' k, O% @1 `. @6 R$ y2 @var appLogger = LoggerBuf.create(loggerBufP);
) [: S% ?- ]' z5 s. c; j6 q7 [appLogger.instance.name = "AppLog_Core1";
  s0 s: p% P) B7 `' c# y4 HDefaults.common$.logger = appLogger;- }$ |! l4 k8 [8 W' h
Memory.defaultHeapSize = 0x8192;   
6 z0 F5 n$ ~: k, |Idle.idleFxns[0] = "&LEDStatus";
, [7 d0 w( g& Z6 M' |Cache.initSize.l2Size = Cache.L2Size_32K;  n3 A+ @' A' M. X+ x6 m- J9 n3 D; J

; N% H% V4 L1 S' [5 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 */3 F. e* G3 W2 c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& x* }$ U, y% ]4 ]& |var heapMemParams = new HeapMem.Params();( O# T& G' V& G9 n) a( N; X$ \# n
heapMemParams.size = 0x4000;
3 M4 N& j  q# ?) p
4 T/ O6 q. ?3 x, B% mvar Memory = xdc.useModule('xdc.runtime.Memory');
. @: K. d$ ]# C) ^* z* I3 HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  H# \1 R* c2 b) K0 Q: k0 B5 i$ I% I' f+ K+ @
我大约calloc  每次共计大小为5K*16bits,3 X2 l& L7 h0 h$ X
而默认配置才0x4000、需要改大。! [/ }: V1 ~! X
. Z) ]& S9 z3 B  d6 U# ~  @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 D1 u, x$ ^$ WProgram.heap = 0;" Z+ K7 a3 C3 Q) [6 w
Program.argSize = 100;  /* minimum size */7 G2 v5 d1 X7 u( r: n, V4 \
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 23:47 , Processed in 0.040957 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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