关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 t8 x: E# n2 J9 O$ n
  V6 ]7 e" e4 p
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 `! K* ~' D4 f1 c, R/ |& a! [
% \) _2 M- ~0 I4 m' m& g( i
其他程序段。。。。。
* U" P5 L6 J0 w7 [( A
" g, @  g6 t. h* `   free(x_d);: S3 J* C. l$ U) D0 u) y

( ?. L8 j/ {0 Q" [使用DSP侧单独调试功能,验证动态申请没有问题,! @* b4 U/ A0 J/ P. c& |* w
/ w5 h, M+ \' x8 S% e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 Q% h# h1 n4 v  w( d) r0 ^8 f

. H" N0 j7 [" i3 F( Q- C4 F$ n6 f
0 }3 e  \' F# Q& i% e% ?# D' d, W! M; y& c; h+ i

. u0 T) V4 \' ]7 e# {* \! z) G( v* Q% m6 r# `
# o( N5 e* z1 g

4 o2 a7 l2 o) x- X9 ]/ o; P/ o% r* k$ e( d" @% _

1 K+ W+ i- M1 F: m; d) s  x5 R8 u+ J* B8 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& r0 d# L2 U  R我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' F0 b4 Y7 M) Z6 Y. Q- A* {( W9 g0 d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 i0 R3 G# T* `; q" x
3 I+ T: G0 u8 w' n/ ^0 _- F* R2 e/ ^, ]
是不是需要在DSP.CFG中进行配置1 \; h5 _1 |8 {( x
我现在的配置为
. M: Y, z" b: o
, \$ T5 Y, g+ W6 z/*/ m" V6 {% {# a" t
*  ======== Operating System Configuration ========: o  J" n" a/ {2 e
*/, [. _7 `, x, O/ }! p7 l8 V0 t" t
2 p* w/ }$ h, u0 Y$ m& o2 y
/* no rts heap */% o5 M& U% |4 z& W2 E5 R
Program.heap = 0;
/ `( f: U9 x( ~# |& JProgram.argSize = 100;  /* minimum size */
" v; q" `2 K6 D2 W* w! M1 D+ cProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( Y2 `) S: _+ I& ~
9 `* A1 S8 s. A% a/* create a default heap */, r5 N! _- U1 Y' ], {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 K( A+ d) h: |4 qvar heapMemParams = new HeapMem.Params();
  q2 Y% C  ~; L% s- zheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 A5 Z# b7 C/ ^. l1 M* P9 K: K- x: }2 H: q0 \
var Memory = xdc.useModule('xdc.runtime.Memory');
/ u' i8 i4 i: vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 I" A" \" n7 U
& i& p0 e6 A' G) J/* configure System module */- c6 K) j8 Z0 h' J' [# ?3 |- m
var SysMin = xdc.useModule('xdc.runtime.SysMin');2 D5 {' i* ]9 k! y& w! ^: I0 ?
SysMin.bufSize = 0x1000;
7 y' X0 @* s! hSysMin.flushAtExit = false;
2 Y6 ]! j: y2 s; f, X3 H: i' c. X: A& p9 @+ M' j3 e1 C! T1 Y
var System = xdc.useModule('xdc.runtime.System');. x& q: z. y' i% }
System.SupportProxy = SysMin;0 N8 ]+ I# Y: L- k

- O) z3 p1 h% Y' i/* configure SysBios to use the lower half of Timer 1 */( d; I" T8 o8 H/ t+ h( K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- E5 ^7 D3 Z6 i  ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# G, y" O/ S0 N* i' ATimer.timerSettings[1].master = true;
! S) t3 I( J7 \8 |- _Timer.defaultHalf = Timer.Half_LOWER;/ A3 k& x1 N" }9 e' u
Clock.timerId = 1;
1 ^- B% W* S, y) _1 _) f: Y. `) c6 _' u/ U$ l- d
% O& f" T( f3 l
/*
4 B1 c' t" c6 h8 z *  ======== Miscellaneous Configuration ========
$ R6 z2 M9 c  q* b4 | */
+ l% j6 M/ K$ p: I7 }$ }
1 o/ o% Z! n' X, t. v. B, {/* set default diags mask */7 T1 O# V# k: l0 I. B
var Diags = xdc.useModule('xdc.runtime.Diags');
% F9 f# B0 r  \) Fvar Defaults = xdc.useModule('xdc.runtime.Defaults');
& k& A: U3 O, n' S* D. H# Z
' o, ?: F2 b: n) V6 ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; i# F9 k+ q- j9 D; M) h( [1 g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: g9 U. ?* T5 ?: S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" l1 u* ]6 m* f% J. Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ ]0 g- z, i) K5 v7 tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# ^$ y5 n" T! A7 l0 TDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ G: t# w9 |# T: V& f+ t+ G
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" z# W4 Z( Q1 _
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 d4 r! R' I- p5 N5 w' c
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' O1 _0 I) k6 i) R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 {. V% j1 B! Q* T; r: HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* w) W/ M" Y' i! ?: w0 @3 L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; k; ]- c! B( h% f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- N/ ^/ Q* }4 \8 V1 Y0 \( S
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( ^# r) c( q! t0 R' D6 e7 n, b) U
) m( U+ D/ X& S6 I
/* override diags mask for selected modules */
+ S+ w5 e# U- Q' m* y5 ~xdc.useModule('xdc.runtime.Main');! t/ x, j+ V9 @
Diags.setMaskMeta() |, Y) ^. ~0 I5 A- ^
    "xdc.runtime.Main",8 E+ `# Y( a+ E2 a; B& J) H) r
    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 N0 D2 ?& d0 o; J# p3 C; O5 |4 G% ^
    Diags.RUNTIME_ON5 n; V) |- z7 D: N+ L+ q
);
1 b0 k6 T0 f* b' M; c. @& E( u8 C3 Y( P9 E
var Registry = xdc.useModule('xdc.runtime.Registry');5 R* ?' I) q, s, M9 l) q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 N' |7 i% V$ {; Y# I! Z7 }Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) ~8 G5 j, n; M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. R: w( D1 D7 v  WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. p0 x# v/ [& j% n4 C, A8 w) y1 }# Z( a" v  t2 G9 E( g
/* create a logger instance */& a6 |* v" G/ B, J& g0 ]
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" {1 G$ b8 x- k; p1 J: @var loggerBufP = new LoggerBuf.Params();9 J8 n( w- v: ?4 Z0 v) |
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, s; f$ c& z0 \5 A& e2 `% f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 p$ q  a: K. S& p- l& `  i: K- C/ j* q
7 r0 D9 x0 O6 D$ evar appLogger = LoggerBuf.create(loggerBufP);
" Q% x/ Z+ V! |% e6 \5 e5 cappLogger.instance.name = "AppLog_Core1";
1 V4 C" m8 b, p7 [/ j& |& f: e; Z6 S  oDefaults.common$.logger = appLogger;$ n- t5 k8 x0 L5 x  I2 ~* Q
Memory.defaultHeapSize = 0x8192;    : J, _2 u; F$ m" U" B
Idle.idleFxns[0] = "&LEDStatus";4 z1 F* {- U# F7 Y4 u  W8 r4 h0 Z
Cache.initSize.l2Size = Cache.L2Size_32K;
/ l9 W; {7 t! Y) d0 x! z4 M/ k; p! j5 j0 M! `
回复 支持 反对

使用道具 举报

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 */
5 u1 u/ M0 e" _( u5 `0 Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( ^' A4 w5 b  e
var heapMemParams = new HeapMem.Params();* f+ F& W* P- Q7 p8 }, G
heapMemParams.size = 0x4000;. I/ D% z& ^9 e8 V: i

% Y  E- O/ K! L* Avar Memory = xdc.useModule('xdc.runtime.Memory');
) h, m% n1 D7 G' e) [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, d- n/ |+ K7 }' i: H' k
! v  ]( g/ Z- {3 K我大约calloc  每次共计大小为5K*16bits," j! ^- x1 ]8 b! v, {
而默认配置才0x4000、需要改大。! y1 o7 ~" k& t6 _/ ]

& c% h- W( P  I0 D& [  I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" t" r! L/ }! g$ n
Program.heap = 0;- |% b! }+ D' X/ W
Program.argSize = 100;  /* minimum size */
# R  L+ A1 ^( g7 ^7 L% @1 HProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 22:08 , Processed in 0.041472 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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