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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

6 P9 H% |! f- A* N, |0 T    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ a8 _' i; p0 f# v: `
3 S$ h" ]' {0 y+ u, r
其他程序段。。。。。$ I4 V! }2 [: H+ f

( b4 S& G! i! s/ X" t: N   free(x_d);
+ o1 C# Y9 X/ J7 q
7 y, B3 `. G1 t5 B3 D1 W使用DSP侧单独调试功能,验证动态申请没有问题,* w0 x+ }& S0 e) T! L# e0 E- J6 g! D

7 G7 Y) B$ g* K5 u2 N5 Y$ v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) t! [+ b# y( o8 `  ?' m; a* ^

6 x- Z/ x$ `7 Y" U3 d! d( B2 Y. u9 d( F) b# Y" X$ H
) N) z, X' {0 B# Y1 h6 j
. F" e6 L" Y& T" b

& J! B) R, Y3 L9 {  q
) @9 b; B  C7 t" Y( s
- k" ?+ ?% U+ B) a, [( \1 h7 L' E$ U7 d
9 e$ ]( F! t0 {" \$ V
3 Y+ N, ?2 d: Y5 @5 i) }6 @% A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( I( k$ ^- _) R$ h: ~1 u我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' o+ D& ~. Q* s. z* g# y3 V( p  l(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' ~: \" g; v; ~/ W' i
  V2 \% q5 e/ P+ o" Z
是不是需要在DSP.CFG中进行配置
9 J- n% j( R8 Y* ]1 Y2 Z我现在的配置为
$ D4 K8 v; d! R5 x
' c9 d" ?% p8 G' M8 |- `# f/*# @* V8 H; B8 U1 i
*  ======== Operating System Configuration ========
/ l; j, }- N+ ~( H8 z  _2 ~ */# M; E# p( ~: r1 P+ ?- T2 F
2 d! i( _2 M- W0 t! l+ G
/* no rts heap */
$ W  A6 Z4 q: h; g/ d4 R: `; m- `Program.heap = 0;
4 B+ N6 K) J- g1 r9 gProgram.argSize = 100;  /* minimum size */0 b7 N: P( X) @7 d$ V, m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 M! G$ y3 U% n# o2 D, \. S- }: z
9 c* Q8 W7 w+ E4 c3 b' l2 m3 H/* create a default heap */
1 [) r0 S1 Q+ L$ S9 G0 ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 l8 o2 g" q2 Rvar heapMemParams = new HeapMem.Params();$ i/ b8 [, T7 D
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- _# C4 q8 T+ Z8 `- C: F3 ?
8 G+ p% e" ~+ N9 `& ~
var Memory = xdc.useModule('xdc.runtime.Memory');/ V/ Z4 p2 u- [4 {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 ^! {5 L( J0 S! ?0 ~& M$ K$ u4 b+ U, E
/* configure System module */
: `( p: R% V5 {, ^var SysMin = xdc.useModule('xdc.runtime.SysMin');  s, \: t7 c' c9 M' J. B
SysMin.bufSize = 0x1000;
/ f, ^5 m& S# KSysMin.flushAtExit = false;3 q1 [% K" ~, T- Y6 [+ ?

" T& |& w  f0 Q. I9 u! [var System = xdc.useModule('xdc.runtime.System');* A# L6 R+ f$ L
System.SupportProxy = SysMin;7 S& Y9 f% C. s( S0 n" R

% c6 [3 _$ @; t2 X. ]8 D/* configure SysBios to use the lower half of Timer 1 */
: G. g% R% t5 X& vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 W2 l. U/ ~4 i& pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');/ A. a; ~/ j7 O% D8 Y
Timer.timerSettings[1].master = true;
3 Q) ^. Z3 H. `# r+ dTimer.defaultHalf = Timer.Half_LOWER;" s5 v! T. c8 o! H) j+ Z
Clock.timerId = 1;' K* b7 V  _8 i# D0 N$ M# Z' q( S
  |* w' A$ Z4 [( [9 G& O1 b5 w

" s) s% ]- O6 N/*
5 f: M8 u; j6 W9 ]0 U$ q, r2 _5 a *  ======== Miscellaneous Configuration ========! F* }7 c7 h# F, @0 j
*/) v) h8 [6 v' e* Q
4 v& _  a! k3 [  H; n4 F6 L9 M
/* set default diags mask */
8 p; H9 p% Q) I1 I) cvar Diags = xdc.useModule('xdc.runtime.Diags');& a  P( S* A- r( M
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 m* |" A1 B2 c8 G2 v$ M% `
( C2 i: ]& {/ R. @0 c4 `7 BDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) P0 r4 K5 r* y1 I! `) l& Y7 F& m5 PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 `$ g& \% B% q( s  ]
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% e8 p& ~+ z3 ]
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* W* f2 ?/ v5 w
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% W3 B' ]9 g1 g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 K6 x0 T1 H3 F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  E# C' n  B2 ^( O" pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! ~" u2 |6 c1 {1 kDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 H1 S% D3 q2 w, _  XDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) q. M' o9 B5 Y) m5 s1 B1 |! e; B2 LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  \! d8 v& G4 `1 F0 P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 A, c% J0 F  @! V3 L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 Z% l  Y9 l! R4 T% Z, s/ D0 Y5 C6 G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ F( c' H4 x. g0 S' T

8 j, @/ U" ~, z( l) X( ?/* override diags mask for selected modules */
8 N3 S# J0 s9 F* z. i$ xxdc.useModule('xdc.runtime.Main');
9 [! R: y0 T! t! o  U3 xDiags.setMaskMeta() A+ P, m1 U! g/ k) r. v  i
    "xdc.runtime.Main",
# e  o+ Y  }$ p6 e) t/ [    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- D6 @& M) q+ V- G& _4 h    Diags.RUNTIME_ON
' N+ k& U/ ~1 M9 J);
3 V; r1 z+ ~- G4 U
. v$ g8 r8 ?0 W5 F4 S% y1 f4 Uvar Registry = xdc.useModule('xdc.runtime.Registry');5 O+ ~9 q9 `% d8 B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 j! N/ N6 l+ g' {0 x' \7 |" i9 |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 ?* l+ s" d4 O8 L: N# ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 h& T5 f; J" G" J/ LRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 d) x0 T5 z# B% n4 [1 m; {! j  g6 a# y3 o) t
/* create a logger instance */
; U1 q. v6 C/ f3 I) ^6 tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 i' n3 [9 o# kvar loggerBufP = new LoggerBuf.Params();
' Y. f  Q$ m7 s- c! HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 h2 @' T" r# L5 g0 @5 jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! p3 N% a; h- F1 K  b% c
7 S8 Y- o3 {, d$ q  ^var appLogger = LoggerBuf.create(loggerBufP);$ j( Y1 c' D; |8 B, d+ _
appLogger.instance.name = "AppLog_Core1";5 W  H3 y6 b/ d
Defaults.common$.logger = appLogger;
9 J, i5 q0 h' z" ]0 P6 v* Z1 ?" |Memory.defaultHeapSize = 0x8192;    0 {! Q( R+ X8 I' f* T
Idle.idleFxns[0] = "&LEDStatus";1 p/ j$ V3 E" a! D) i4 {7 L
Cache.initSize.l2Size = Cache.L2Size_32K;
" n: W; I+ `3 _! X& z2 }% p) w+ E$ `# i
回复 支持 反对

使用道具 举报

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 */
' i5 w8 }& n* U* V& M/ fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. Q! ~. S" j% R
var heapMemParams = new HeapMem.Params();! T5 B" g4 |8 @
heapMemParams.size = 0x4000;
. t1 Q* _, x1 H
1 O% x; X# Q" hvar Memory = xdc.useModule('xdc.runtime.Memory');. f; j7 e9 W, [( x- E7 B* p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# e' O/ Q( G9 R1 u- o, Y% F
$ C! O4 {7 N+ X9 k# I# D0 z我大约calloc  每次共计大小为5K*16bits,4 o) p! ~1 p2 D: |4 Z( I
而默认配置才0x4000、需要改大。  x9 D5 Q9 A  ?' d7 p/ V) y# n
4 R/ C& }2 a1 @7 I3 I( a3 W8 P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 L4 \; H. e. I" v2 i
Program.heap = 0;
8 p7 |; }/ E8 y: \1 x/ XProgram.argSize = 100;  /* minimum size */" @  }+ T9 J% Z( @1 k4 t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-21 12:44 , Processed in 0.041853 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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