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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 b( m. P9 e+ s' N
6 J  M! [  B4 ~' n$ \$ L4 H
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. W: R  t# l# a! o2 p( r
  Q* q; P. s/ p4 s4 k# ?# `其他程序段。。。。。3 u. w2 l/ N# _4 `% z
2 O& z) A' E# P7 D* L
   free(x_d);6 Z: G$ z0 H/ ~- Y6 @( N

: h" [" F% ?+ p/ ]0 [( v% U使用DSP侧单独调试功能,验证动态申请没有问题,) }- F4 x, _. T
3 z9 T2 k4 o; v" ]' b: ^) I
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) ]5 R, x( E. E  ?+ d, r) |
4 a. I7 Z, t/ e  S( @
7 S4 g. n" K* U! d+ \9 H
  a( h; S+ \3 E3 ~" P2 }0 _' I, ~
0 }  H& Y. S; c3 a

4 Z0 r, e" |; `: }
8 w2 c0 x% n, C# D
$ m* L  D- ^1 D, f! X# ~: s1 j& c- L7 l$ Q/ c: s
* o$ ]- {' [7 J
( V/ F; V8 `4 P9 ]( Q/ ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# a( ^4 ?2 ?8 h/ I) n3 C我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, n- Q1 W. m4 u2 s8 t6 [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 ~$ y8 z4 D1 l8 P; Q$ q$ D5 T9 `

  \0 J* L/ f- i. D) ^* S: F是不是需要在DSP.CFG中进行配置
% O3 x8 Q3 g7 C- P- V我现在的配置为
7 \6 d* ^% M  y2 h- F% C  P7 L  I/ D& g
/*
* p8 g6 W) b% f6 j *  ======== Operating System Configuration ========  B$ j3 \. U! j+ b
*/# r# P& z6 x( z

$ x. D5 R3 \) F1 x/* no rts heap */9 @3 R1 I. C5 U  p3 n
Program.heap = 0;
% K* ~0 I  P1 U# b* fProgram.argSize = 100;  /* minimum size */
( f: r# t) _7 Y7 h5 yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 ]9 T, n% E0 t6 }. G
2 q3 D! C6 B" b  Q/ b2 ?& q/* create a default heap */
4 T: o: t; ?/ U7 J2 lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ {8 u1 L2 C  L+ Q& ?- ?' V7 k
var heapMemParams = new HeapMem.Params();
* B: z2 f- [8 RheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 i: p& r- h; o, r3 ]0 k" O

& H( j8 W$ j/ a" A) I
var Memory = xdc.useModule('xdc.runtime.Memory');
0 h0 i4 V% F, A' J# H; d( c* J, A& @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! N4 w- ?3 ?2 q3 H

9 Y1 P& ]5 M! Z  ^, H4 M/* configure System module */
5 j' J6 A3 X/ K5 w0 K; i  R/ Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');/ ^1 e5 q3 \6 R' x/ W
SysMin.bufSize = 0x1000;
7 y2 m' E/ N1 aSysMin.flushAtExit = false;
2 W4 W/ B7 N4 ~3 u9 n# |. i) _& w8 C
3 P0 U3 Z3 \( ~: A2 I2 evar System = xdc.useModule('xdc.runtime.System');
. |: ]/ u3 t' J/ m5 NSystem.SupportProxy = SysMin;; e8 U0 }+ w2 e

' t/ h' E, T; G% m/* configure SysBios to use the lower half of Timer 1 */8 U' U' c! x3 |, p0 c4 w) P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) @; ~4 S& @4 b$ o' L9 c* S2 M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 s. X3 w  q1 r
Timer.timerSettings[1].master = true;# Z# Z% R' D* C, E0 ]5 E
Timer.defaultHalf = Timer.Half_LOWER;1 O  |# |7 w( s" F$ n; u3 ]
Clock.timerId = 1;8 f, p6 n$ [- L& x3 a% z! O- X4 e
' J" O- D: g9 v' U4 z, M  `
+ P/ |' V& a. h$ V+ V6 u+ M
/*3 y. \& o$ o) t3 d( L
*  ======== Miscellaneous Configuration ========4 w) W' r! @8 z) _  o8 W# n
*/. ?" E# O$ x" Y
6 n0 f9 R* Z3 e+ }5 g) W
/* set default diags mask */
( j* e, ?$ ^: h1 zvar Diags = xdc.useModule('xdc.runtime.Diags');# w$ I0 }2 \' ?" x
var Defaults = xdc.useModule('xdc.runtime.Defaults');) A4 Z  K6 a& Z
6 i3 n" ~$ L$ N7 ~: h- v. L
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 r, g. {( d( h
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 T' E- w  i# b- }3 R* w" h
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 A/ P1 }3 B% e# r1 J8 t, N0 }
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 z- \3 G$ k8 V. B2 |$ S, w  j# XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* G9 I* g) p7 K, _/ v7 {4 gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ E) R9 ?" f, B6 }! v/ Y5 @Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 h, d1 c, M' K; h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& r: l! e7 L+ s' l6 e5 Y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; K5 ^9 R; W* z4 e! L+ _: ^Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  \) ~( f, r3 }Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ o/ n- R1 g) P+ X7 ^% c- \& wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ s& F5 w3 |+ n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 |! \% x: N9 Q% W+ B9 ]. H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 S( C6 a4 q) z3 e" \% @' o! E1 e

2 `) f$ X0 ]/ W: Z! X! \/* override diags mask for selected modules */% l! p  A' q1 S3 B; J; S3 j( ?
xdc.useModule('xdc.runtime.Main');9 e1 u* T+ T9 }5 R1 {8 B. h; e
Diags.setMaskMeta(5 K: L2 l, E1 y7 d0 ^
    "xdc.runtime.Main",  K# n& U5 j) O8 b1 S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 _9 B2 |8 J, ?: R! I
    Diags.RUNTIME_ON
$ Z4 a. e+ G  \( ?);, k0 h# k3 [0 _% i; W

# h. i2 o+ h( C# k5 _var Registry = xdc.useModule('xdc.runtime.Registry');
6 n! D0 x1 o: g/ a+ WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: M9 s4 ^3 S3 N8 f5 w2 I+ F8 \' `
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- b: o% m9 j% r6 @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 E2 l% U- c4 t- U8 W  C% `Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;" A4 w  N  U2 ?2 ?
: k+ f" F! X, \2 _0 y
/* create a logger instance */! z% s" l. G. m* W" a; f2 D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) r! [$ y5 T3 S! Yvar loggerBufP = new LoggerBuf.Params();
" ^- R2 I: B0 a0 vloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% J/ G+ n$ E8 I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 @0 h) r* w4 E, v% C
7 x+ R2 O$ M/ h* r
var appLogger = LoggerBuf.create(loggerBufP);- E( L7 a8 s2 O+ A( }6 ]
appLogger.instance.name = "AppLog_Core1";
. S" `- c4 [0 B8 sDefaults.common$.logger = appLogger;' }1 q0 \! I9 C8 d: S' M7 t
Memory.defaultHeapSize = 0x8192;   
: x' b# W6 z) VIdle.idleFxns[0] = "&LEDStatus";" F+ N# q9 h: k5 a( [( k7 D& D: s9 U
Cache.initSize.l2Size = Cache.L2Size_32K;1 `7 e# H; m; v3 H& R
; O. h2 n9 s5 Q. \6 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 */4 `) R0 f4 [$ n5 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: G* q3 F# I0 Hvar heapMemParams = new HeapMem.Params();
# T# C: G  L% h5 c6 a& aheapMemParams.size = 0x4000;
. T# ~# O+ i$ E; M3 t
) K6 T% k! k; ~3 R0 |' Nvar Memory = xdc.useModule('xdc.runtime.Memory');1 y+ P! V+ _/ j) b7 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ s8 C! k4 U6 l; Z) G% u7 y5 s0 s  R) K& ]4 ~- A, f: \/ z
我大约calloc  每次共计大小为5K*16bits,
+ a- Y1 k2 z* u* C( r0 G0 L$ W而默认配置才0x4000、需要改大。
% K6 t& s" }  W4 L) t" O$ m( @! d2 c: v: O7 R1 ^: Q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) ?* @+ J* [* v7 q% ]; hProgram.heap = 0;* {) N7 q. ^3 r" P9 }
Program.argSize = 100;  /* minimum size */
3 {  @. T3 j& f8 ~0 s0 O6 O& |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-12 13:43 , Processed in 0.040996 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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