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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! Y4 E1 J& @+ O4 J# s5 B1 V
& ]1 U) R) ?, ?& |    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ z. N! @* f/ }0 c
! j, F. k. o  A: l! F% `2 v
其他程序段。。。。。% Y5 ?$ A$ u- L5 y: K

) l& c1 O, H. L' K5 G3 W   free(x_d);
# A0 J1 j1 B- L+ @9 S$ P( `, B* e( l: d
使用DSP侧单独调试功能,验证动态申请没有问题,
# z" }8 N% g" V( C6 g) }8 J, S* U( `5 D8 I2 k  J" H8 g. M! W" q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* G0 S9 @1 R3 B' F1 p7 p$ L1 P

; t* U3 _+ H5 ~9 K8 U/ Y& w: o" f! J% B$ a/ L: N/ ?* m

6 @' F9 Y+ h$ H) ^% I7 B8 Y; O7 g! I4 I1 p6 V' ]

- P/ u, Z; T7 ]1 \# J3 B$ y, J( t' T( q9 p

6 {& g) I) W6 _- |" ~
3 Q2 H" f$ J: q
1 d3 W5 @, _" ^$ U8 b. H2 X  r1 C1 d: ^* f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 M9 Y6 e1 q% z! V- |) f3 X4 _8 y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! w" U) o( L) a' y7 F1 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( l5 o6 b7 l2 ]" O, c
! x3 C( F- o/ @
是不是需要在DSP.CFG中进行配置
& y5 G8 l- l: a5 ?( r  `我现在的配置为
3 t" E% z7 a, Z) M; E* b9 i% n! l0 k, d" E3 r& @) g" u
/*
7 ~5 }: _4 d6 G1 d1 k! e *  ======== Operating System Configuration ========
5 _, f9 t8 N* o. { */
) w: W8 e! _. V# ?3 W( n6 g  ^
9 {: d: g. ], x/ C. G/* no rts heap */4 u, T$ \- |1 X
Program.heap = 0;4 w5 u3 Q. E* _% B5 {- [
Program.argSize = 100;  /* minimum size */
; U5 C% r  w3 A' m7 GProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ G3 _- x" r5 U3 r
' ?: I+ i( y; e/* create a default heap */% Z8 e. H" u: Y4 n# J2 ?3 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* T$ b: d, w* r% v/ Z- }var heapMemParams = new HeapMem.Params();
4 T8 V' [# |' \9 P2 ?( ?0 C* }heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. S1 V5 Y3 M! G4 J0 f4 L1 A% Z# a0 T8 s2 m$ p) y2 F7 D4 X
var Memory = xdc.useModule('xdc.runtime.Memory');
4 E2 r" B' M$ c/ e- B/ n; HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* b- ~+ g5 J! W9 R3 f/ b

, Z( b4 j) h/ J7 B' x2 x& C2 j+ [/* configure System module */  }2 S6 T9 z! D. V' c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
& M( L( `9 T2 I( B/ j2 W0 v+ iSysMin.bufSize = 0x1000;6 r4 ~, V' o  K  t0 R  T- [
SysMin.flushAtExit = false;% _1 l2 m+ E& M# Z) \, f; r9 n/ g

9 c, I9 s0 ^! N+ A* Kvar System = xdc.useModule('xdc.runtime.System');
6 J( x9 A$ @" {System.SupportProxy = SysMin;7 D6 E0 c! h  c) [

9 S5 i- X$ p9 G" T: p/* configure SysBios to use the lower half of Timer 1 */
+ k. ]& o# w* k0 F2 H4 Z+ y5 }var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 L" m# [8 w- Y) }' V3 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 C3 Z# s% F; fTimer.timerSettings[1].master = true;2 k7 }2 ^  v. t* P* T. D5 a& R
Timer.defaultHalf = Timer.Half_LOWER;
5 H' C% y: V" M: LClock.timerId = 1;* U, q( X9 o- Z
6 T" |$ J3 s/ _* H4 f$ V
- |6 L9 \6 J4 L, P9 H" G3 r$ r9 ]
/*  k% D: r) Q% R" W8 E* |2 W0 p
*  ======== Miscellaneous Configuration ========, k2 \: E$ Z$ x3 t+ [2 X
*/
% ]' ~, I0 K% T$ L4 F" ?
$ l' L1 K; `/ ?/* set default diags mask */
" \" ?( ~1 d* u! gvar Diags = xdc.useModule('xdc.runtime.Diags');2 h! y' ]' w' r; r# e, x- R/ f( g
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 p! n9 [1 i6 u5 a5 E- |) [

. t3 o: M+ r3 r- L9 e' P  s$ TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. J: N5 Q- S0 ?, z( E! [! F6 w7 |
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# Z) D- a! y6 f# i4 l- v; O
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 O! r* M4 x/ e8 p
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- l7 m  O- Z: p: l6 s
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; F/ W9 W3 M8 b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 K- ]$ j$ w" ]
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  v) z% ?1 e% x  ^+ h0 Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ D6 Q2 M! V8 u: L# `1 xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 k4 s$ _- }! H! [5 B2 r) ?4 s- tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 t6 k& ?( m1 R+ I: d+ m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* R" i7 M  d& J9 ~$ i
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 |  I- y% d) `0 y1 D5 J) d/ QDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- ~" J1 \' [* n9 K# A. n' p2 `- hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: v: @; h1 m, v! a" q9 t
. n5 F  i! \  W0 Q" z7 ]
/* override diags mask for selected modules */
* W4 d  z! G4 _. j: gxdc.useModule('xdc.runtime.Main');; P( D! O, A$ [
Diags.setMaskMeta(
% h2 ?& K7 C  T, H    "xdc.runtime.Main",) h) S: p3 F0 a& ]$ s# U: e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" a! R" _; e1 Z) X7 J    Diags.RUNTIME_ON' k5 T! D, }/ [" |; e
);
8 R' i1 e. ^( J" ]. z
) F& _- b* b: i+ |/ c6 Hvar Registry = xdc.useModule('xdc.runtime.Registry');& R! `9 B% a. {  l; v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  X. r% _& o- D! ~2 d) k- @Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 ?# _. R+ t; W0 [
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 J& B  o! h+ n' j  u+ R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  J# l+ s" l3 u7 I2 @/ v! _; @' L$ s3 ]: e
/* create a logger instance */
: A8 p/ j' r5 t- R# j! f5 xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 b1 d. @4 }9 }1 f9 w. [var loggerBufP = new LoggerBuf.Params();; ?0 ~- u' e8 s% [1 S% V  U
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: k! Z" }2 p6 K* \8 g1 _) Q8 F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" b! v0 H! v% U4 x& F7 w7 ]- P
$ J4 [% y5 t8 T2 }' e
var appLogger = LoggerBuf.create(loggerBufP);/ \; C! n7 o$ X; F' ~7 m" W$ j$ a" ~
appLogger.instance.name = "AppLog_Core1";
, t+ |3 Y3 Y% x1 jDefaults.common$.logger = appLogger;5 I/ x6 O2 s: Q8 u$ @; @
Memory.defaultHeapSize = 0x8192;   
& h$ O' U/ Z( M. m2 m* bIdle.idleFxns[0] = "&LEDStatus";
$ W) `& z% }  w  A" F* J7 l3 kCache.initSize.l2Size = Cache.L2Size_32K;
. i3 G5 [' w* H5 q6 E1 k* o' ~& b6 s: I( a1 V. 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 */
* X; u) c0 I+ g" C; t% Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; L6 J/ Q5 H# q& cvar heapMemParams = new HeapMem.Params();- P' L9 F( i! U/ _) [1 p3 G8 j
heapMemParams.size = 0x4000;5 t/ c- F. K' g" C: i( s' P  G
# q! P/ t1 B& p% H, s( n# q# U
var Memory = xdc.useModule('xdc.runtime.Memory');$ ]4 R$ Y$ w( Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* Q% v- ?. X, f5 n% }/ t

, j! I5 E/ M& E我大约calloc  每次共计大小为5K*16bits,
# g2 c' P. y7 _' T& V5 @2 r2 O而默认配置才0x4000、需要改大。
/ J9 {! R/ Q( \7 D: A0 q; s' M3 V0 x1 X3 C+ q6 R# O  }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 w% I( M- H6 W# E" R& PProgram.heap = 0;9 t* s2 l4 o! K) a9 y% k% X# L
Program.argSize = 100;  /* minimum size */& N# Z# d6 Y9 K- Q! S! ^
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-21 03:30 , Processed in 0.042531 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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