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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: g* }* p3 C; @' P
& p; L7 q/ w+ [- I! |
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 M- n% c; T: D( ?! J# W9 H
+ b  V5 H/ F6 a; R/ _其他程序段。。。。。
* m' B& ]9 o8 c
  {* c5 k; G, E' @3 V   free(x_d);
! T5 N2 ^7 B% J( K. T# {7 u" [; g1 Y. j0 N
使用DSP侧单独调试功能,验证动态申请没有问题,
5 \  I. x! @+ i" L# A; A9 W# f+ T; L7 ?% ]0 Y  n
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ K: x# E3 h, Q' G
, q4 v& R: z. g. F2 L# i, d( C5 E

; t" g& @2 E  Z# h, X$ ?$ t1 @/ O( p! |/ }; x

, ?% k" Q: V. p$ p" }5 }8 t' \0 C5 i6 T! i" J) [9 D+ `+ E% c

# A' _/ e5 z5 L$ S6 r8 z* n( b. k! Z3 T' I. m- y$ ~! R& m
. V# ^: I" I  ?$ o" X5 r6 \

: b$ T( V& X& b" L# J& B* @: I* `( u: N& n: M* P/ e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ D0 A9 S3 P% _, P4 g+ _# r5 _我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* O2 C. E& v2 e6 u4 k
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# n6 x* l' h3 c* @7 S+ V

. `/ r* V$ n5 z, [$ i是不是需要在DSP.CFG中进行配置; y8 c  [2 X; ?' d
我现在的配置为( n. Z/ }: i( N% a
& M- z: a+ }) }% P$ F$ a( h" g) P
/*& E4 L1 z8 G1 @- L
*  ======== Operating System Configuration ========
" e* n* s! ?4 m8 n+ A& A */
. B: w$ B5 N3 L" E, _
. x1 @$ ~. b) V3 Q" m6 C/* no rts heap */
) q( m- l  w& [2 j3 RProgram.heap = 0;4 z  u2 h+ j: e. U  O
Program.argSize = 100;  /* minimum size */% |( E3 l+ z9 [0 M: O3 S' ]  ]* L
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: U6 z% e& v2 L6 X# y* s( T0 A) t" \2 @, U. N
/* create a default heap */. G+ y/ o* o+ O8 `/ s% i# z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( F) [6 I+ \4 E4 C5 p. h
var heapMemParams = new HeapMem.Params();$ z- a# [- Q  c9 y' j- B  A9 ]3 V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 ~  G3 C6 j- Z( K. c( K: u& H; l( P  {1 e: R, ?4 f/ D7 B0 c* U
var Memory = xdc.useModule('xdc.runtime.Memory');
/ y5 Q5 V8 P9 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! n# f# @: t1 u; g( ^4 J8 @
0 F' t- |& `% Y: Y8 N, I, _; U+ j6 S& Y
/* configure System module */* S5 R  x' R+ o. h
var SysMin = xdc.useModule('xdc.runtime.SysMin');
+ L! m6 O6 K' h+ USysMin.bufSize = 0x1000;  k2 x$ Q% F2 r+ p) `+ {6 a
SysMin.flushAtExit = false;; H  t! ^# o  C; h
) z; s/ G& f# N5 o8 k+ h* D
var System = xdc.useModule('xdc.runtime.System');
# o* R) j! |+ W# g. l; z5 {System.SupportProxy = SysMin;
" _9 X  V, H$ y2 G
. @% O  }, `. \$ |4 ]/* configure SysBios to use the lower half of Timer 1 */4 S  g+ ^% T2 b, O% S# E8 ?4 s; p" I( g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# w$ j/ O; [6 gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 \8 I1 _7 Z9 l- b2 u8 u( UTimer.timerSettings[1].master = true;0 G# z7 X+ Y7 D
Timer.defaultHalf = Timer.Half_LOWER;) c0 p' [6 p3 G' T
Clock.timerId = 1;
8 G$ R. E; x' E/ l1 f  L9 w9 G2 f0 p9 [, J; V2 L1 U! y! S' W
3 h% ^) V4 v3 q1 }3 p
/*5 _/ K0 Z" `3 X+ _8 R+ @- v
*  ======== Miscellaneous Configuration ========
4 f5 v" i0 D0 H, b7 l7 z */
( y; j- Y; Z6 c  Z3 u/ j: ~2 y) N% P3 n' ^' V" y! {
/* set default diags mask */
2 |& ^% i3 D: i! x- {var Diags = xdc.useModule('xdc.runtime.Diags');- r$ P3 z( R) j1 O! l( s
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  x1 H: C  l4 k! h+ Y! u& x4 H  Q/ ?  C8 \7 d" m/ ]; a6 F, P( o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# \* y- ]0 l0 GDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ [" h* e: A: I6 G+ @6 ]# {Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- S+ q5 N6 `1 j/ M1 ?) p
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# M. w7 P( Y' e' d! t4 U- q  v
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// N  w5 P7 r/ A9 \' T: z8 |8 q5 b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! i! t5 N( Z1 c* I/ w' y7 ^' B  k
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" w  h7 R* t5 |) l1 D
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. B# N* H4 e" s" ^8 M
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* Q6 p( s7 O7 n( M, g4 t" U. oDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- d( x# Q* Z6 _1 h! m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, H8 ?) l9 @* t; ]; ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' k& _' X2 m( h! y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 R; t" G. A. R6 x6 a9 y3 VDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 b1 g" B3 }! ~) o: K
  r+ d1 F" \& ~, o3 L3 |3 S/* override diags mask for selected modules */
: V) X" C% l- k9 {. U% d: v1 H: @xdc.useModule('xdc.runtime.Main');3 D9 X9 W4 b& F
Diags.setMaskMeta(7 r+ m; H( n& ^. |
    "xdc.runtime.Main",7 [+ T  O) D5 @' m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,& [6 ~- P# V5 m- l. a" C- Z# r
    Diags.RUNTIME_ON: B6 o4 e# ]8 Q. k; ~4 A! S0 j
);
0 o) \8 K7 V& ~$ Y
3 n1 q1 d' l7 j% J8 H( jvar Registry = xdc.useModule('xdc.runtime.Registry');
' o; C# o1 ?' c! @7 `; XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ |! Z& A0 `6 G! x8 K0 HRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 _) L8 a5 K- i3 q: J) ERegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;' a* U, P3 e+ G- d, t4 ~
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: G5 o& `  Y  X! ?( P# l1 `# Q( D9 W3 v; |9 _! }* A2 T
/* create a logger instance */7 W" C( }) ^* M& ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" \0 P+ U. _0 j% P* Z. c" u
var loggerBufP = new LoggerBuf.Params();
7 @$ r& f% T" o% X" RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; ?% V" D4 g( _- N
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# X' C# Q: L9 M$ q
0 ^7 r8 K" ?( A4 T5 A, a
var appLogger = LoggerBuf.create(loggerBufP);
) r/ w  |7 d0 g& S% I0 ~3 z$ happLogger.instance.name = "AppLog_Core1";- L2 W% F8 O- g6 T
Defaults.common$.logger = appLogger;- o/ ]+ h6 \' B0 z9 ^2 t$ y
Memory.defaultHeapSize = 0x8192;   
& }& {- Z4 m4 }! sIdle.idleFxns[0] = "&LEDStatus";. W. U; i+ L5 X2 [1 c6 c
Cache.initSize.l2Size = Cache.L2Size_32K;2 A) h* G! C( x) ?9 z& j# T
& x, h3 g& i  `, Y5 }" j, M2 ~6 Z
回复 支持 反对

使用道具 举报

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 */
& @. x1 v; ^. F8 q5 E8 {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% p/ `4 i6 s# i4 @2 e8 @
var heapMemParams = new HeapMem.Params();; h* n8 l+ Z9 w0 S
heapMemParams.size = 0x4000;/ O  Z' m5 b9 e1 l
! n( \+ f+ w3 L" a) e
var Memory = xdc.useModule('xdc.runtime.Memory');; }7 s4 e! B9 Q# @- U+ Q6 A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; M" e; a% R* h. B+ t! |7 V- }
. W) w" N) o+ y' Z, K
我大约calloc  每次共计大小为5K*16bits,: V, e5 O/ Z! Z9 l
而默认配置才0x4000、需要改大。
8 ~& i' o$ ]4 P3 h. |# m: S0 v! B7 p) D( p8 @0 r- F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 {+ t2 S/ i- q* N8 e* eProgram.heap = 0;7 f* N4 R3 R/ w: D+ D
Program.argSize = 100;  /* minimum size */' Y8 x, i( Z4 b9 c! M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-14 08:10 , Processed in 0.041538 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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