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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! j4 Y* X2 |& m2 s& S0 S8 X

7 E) d4 m" M( D4 a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 i) r- R9 ]9 D4 f3 X* l
' X4 e* i+ E4 x4 Z. w其他程序段。。。。。1 z# |+ z6 t* u9 H  O" u  e
6 {5 H1 \) o5 p" v! G
   free(x_d);
# h8 K* v/ H2 B4 g
2 |8 G6 {, b5 ^. ^- w使用DSP侧单独调试功能,验证动态申请没有问题,
/ G& V" M: D# z0 s9 m$ V; D1 i3 s8 a% w5 `. V
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  I; b7 D2 i& g5 h7 c( f

4 O. Z3 ?% U  A# ^1 D! h
8 E1 |5 q5 l, S9 ~$ w8 E' ^  }9 Z8 W1 _( ~% \3 f9 ^/ e

* G$ o) ?! D; Y* G3 a+ ~: l
+ `, h1 K. R8 z: J) p6 z
: h6 K! K- l2 \2 @; ~( _+ ~; c) w9 k6 k( ~
, V0 p3 I) a, j/ _4 _+ w7 W
4 u5 \  b. U1 z  S
) Y- E5 }6 i* {% J* K) F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ t  _; E) d" R" I# A) o
Program.heap = 0;. o" {# N3 U- z/ M0 D4 D( R
Program.argSize = 100;  /* minimum size */
# y( Y; G# _- u: eProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& D1 m) C" L: J( ?- H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 B1 x* U6 K/ G) M  o" V) @1 o4 Fvar heapMemParams = new HeapMem.Params();
4 D* ^. C4 s! d% z8 GheapMemParams.size = 0x4000;4 b- g+ Y/ f6 K
: ?7 w" U$ F- l( c. E
var Memory = xdc.useModule('xdc.runtime.Memory');7 t7 E5 `" e$ l9 W8 Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; @$ \% r- S: n3 R% J
' c3 J" i9 \5 q- T9 u
我大约calloc  每次共计大小为5K*16bits,- q$ w4 G8 s1 I
而默认配置才0x4000、需要改大。
) S6 w8 q* u$ P- \) u) g% e2 I/ w" ~& ?/ ^0 L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 h! \- Y, {- @; Q% k/ {! @& Q6 [2 l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) Z4 q: `: q' i% f/ a(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" N0 s+ }+ y1 ?
7 O7 I4 N1 i+ u9 Q7 n6 w. h
是不是需要在DSP.CFG中进行配置
9 b& h) u& t- V  [6 S& d" J我现在的配置为* n, B: Y. f+ g

9 e/ F% y2 b9 I" L' L/*
8 i9 k+ }6 I5 A+ F: l *  ======== Operating System Configuration ========$ T( i' R# R8 @4 S+ X! L2 E' u9 C4 r
*// _# q+ F. _$ `0 l! p

3 n% b' F# O0 N5 S9 u+ X/* no rts heap */
) Y# U- u4 W8 f' b5 OProgram.heap = 0;: j* S+ B# q+ x. h
Program.argSize = 100;  /* minimum size */- {# r  o* S: o  Z. j. s% G$ k$ T
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 s" |& v  Y* b( h% L: m/ J
( v7 x: d: c" F. g& y
/* create a default heap */
& r8 h( M' [2 z5 _- d1 ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* v( T' V% S% \7 U
var heapMemParams = new HeapMem.Params();9 `* ]2 r' y- H* d0 U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 f& P5 x4 O6 G$ F9 h
0 J. r5 T) V) ?: d0 o  A) k+ D
var Memory = xdc.useModule('xdc.runtime.Memory');7 m8 x5 p0 k: b+ _% t, E4 u5 [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) x/ G( \; @3 H
) T; ~+ g. \: T. b
/* configure System module */  D' @$ X+ j9 W6 B  _, M
var SysMin = xdc.useModule('xdc.runtime.SysMin');- A- Z; i6 A4 l! X
SysMin.bufSize = 0x1000;6 Q0 g: H+ T2 b. h
SysMin.flushAtExit = false;
/ W. H0 W) W# P" ]2 o4 \0 }8 ~8 E6 G7 r) M# U8 y! u: N# ?& M, j
var System = xdc.useModule('xdc.runtime.System');6 G* ?. n/ {* r8 M
System.SupportProxy = SysMin;
5 J% d( i2 M9 |: h1 n# a7 B" M1 f( B( J8 y/ J! G
/* configure SysBios to use the lower half of Timer 1 */9 T/ h3 I% ^8 U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* p6 c1 h! [* x' x& U# q  Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');6 i4 q6 O. }/ {5 o. o6 Y
Timer.timerSettings[1].master = true;* K" w  }4 t5 n% ~9 m/ Q: v. e
Timer.defaultHalf = Timer.Half_LOWER;
  P6 U8 t' s* h9 q& vClock.timerId = 1;
/ I) s, x0 c# I1 D
# j0 A0 y5 M% M! T% D9 }8 B# m2 w! O  o; ^
/*
$ B& R' u- P0 @$ G' t/ p *  ======== Miscellaneous Configuration ========8 a7 i% P* R, Y& G! N. L5 q) K. R* ~
*/  D* M- M  [! |- ?
% @: D( S$ H, G/ e/ J% Z: C2 i: u# A8 s
/* set default diags mask */& K. n- y) x" d6 Q$ {7 b  t; C
var Diags = xdc.useModule('xdc.runtime.Diags');
# X" {" y* w  Ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
' ?* o# }0 T7 Z$ c" j6 C, k$ T
7 U/ ^$ @6 H1 gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ X5 Q* W5 F/ r, z5 V$ u) d
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 m* l' B' s/ N. D$ e
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; ]7 F+ g+ h" X/ p' o& w2 h4 V/ _. c4 EDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! ]3 U  M; Z' A$ u5 ^Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' q5 t' U/ ~" v0 W  G% i7 bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, ~, U% T- i* t* gDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 w% d6 X8 Y+ ^! ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 E) m0 j: e2 V: H7 Y! [- pDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( j/ M! B4 g* XDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 Z4 G$ y2 N( C4 y: \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 D3 \* Y5 [1 G! }1 Y" j: _Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. o5 [: {" I2 V' Z5 ^* P4 p
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 r; W; `2 C5 f; s. O7 E$ vDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! b: u3 H, t9 \3 k+ ^* F, s
, P' b  u$ W- v& K
/* override diags mask for selected modules */
4 Q. a1 u! X; g$ s$ w1 Rxdc.useModule('xdc.runtime.Main');
7 A& x& t1 c, _) c, ~Diags.setMaskMeta(/ S( V% U$ f3 Q1 z- C6 U, s, A4 o
    "xdc.runtime.Main",7 X7 Y! t3 \( \( `5 h) `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! T! v# U0 u* T: n; s
    Diags.RUNTIME_ON0 o0 {2 U7 Q1 G+ V) l- U" E0 s. E
);- O  a; u% b0 n

8 u! h# W- P) d, X  lvar Registry = xdc.useModule('xdc.runtime.Registry');
/ Y$ ?( {* H3 }2 k. `: uRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ [" @7 I- i8 {* @- \. l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ U. u. X2 P! x( c4 p. d- HRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 @: {; q8 ~$ Z9 e; s1 ]4 v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. D1 Z3 g/ C1 s4 T* b9 D$ o: A; Z3 k9 n; f) h& s7 ?5 A
/* create a logger instance */
  r, G8 Q9 i: j* v& e) l5 ^+ P( Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; {/ V; e7 t9 L0 M, L! f; a. O
var loggerBufP = new LoggerBuf.Params();6 J" L5 b! a+ P; q5 B- X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! N. ?1 w3 j8 j8 R$ K
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' q* s8 u' A$ b9 S6 D+ L
( I1 ]2 r4 L7 e5 c& v& uvar appLogger = LoggerBuf.create(loggerBufP);
* q4 x- G7 i+ h7 OappLogger.instance.name = "AppLog_Core1";
& l- U& G$ u, R# b& U. O1 QDefaults.common$.logger = appLogger;
9 E: b$ ?  e4 \- ]Memory.defaultHeapSize = 0x8192;    9 M' X5 b6 _' l$ G2 V* y
Idle.idleFxns[0] = "&LEDStatus";! z& E; {8 l# ?' }
Cache.initSize.l2Size = Cache.L2Size_32K;% Y2 t3 ?5 }! v3 A7 \+ y" u

0 B4 z+ u0 J4 g% m$ y# ~: Q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 10:19 , Processed in 0.043136 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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