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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ C. @8 a6 e: n; |* j. |9 D4 h  N

' `. [* f9 S7 u5 n% i' i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ K; _6 Q% b5 c( g7 y

- v4 ~5 w- _, v* B: e其他程序段。。。。。& v' o% u# S0 T& B! `! J( l( ?

' g# T2 z; |! ?! G1 E+ n3 f, r4 x   free(x_d);# ]3 D+ a( b: c& n9 ~
3 S2 s8 D- F8 ?; K, t' }* {
使用DSP侧单独调试功能,验证动态申请没有问题,* b4 J+ J) d" N  Z
# b% G8 J5 D/ W; G! f, J
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 ~/ g# ~- P6 ~$ O/ i0 i) t3 v2 }7 C
$ i% k2 q$ K9 ^

. ?  B2 ?) T& a# w/ z$ z$ b8 @
% V# N# t$ M) e3 N6 c
5 U9 i! K( S. F8 z$ B8 M$ _, l! |( A. J% R0 b; M0 y; ~2 W- l" e+ {' u
* @9 r/ b; T. P1 Y9 W. ^  }8 P
9 `' f* I1 p7 L
" ~3 [! o* D3 [4 w; ]' R5 N' K6 S

9 F6 Z3 Z; l4 x# h# I
9 N( g" G) ]- Q/ ]  l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 m& u$ H4 f: H/ e/ |1 a  u, |
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 l! P. w5 @* T' h& I
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ X; u0 K4 c0 S
7 h9 v# K% c0 Z# F/ ?. O
是不是需要在DSP.CFG中进行配置( V( l7 `2 K5 g
我现在的配置为
) D; U: @$ Z- A7 x0 m2 m* x7 k" U3 ~1 F
/*
5 S" F1 `2 C4 a* Z) {' i *  ======== Operating System Configuration ========- Z( v5 E8 u/ b! f" ]9 l& Y6 O
*/
% H& B0 p2 K8 {4 n
! W9 Q8 a9 @8 D! w( W/* no rts heap */; t5 D, |9 W5 d( S; s. f
Program.heap = 0;
% |! H2 |7 K, Y9 pProgram.argSize = 100;  /* minimum size */
2 {: i7 i. {9 k) J. k; R) z2 SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# K. |1 H9 P, B8 V9 T) ^
* [+ s. O# f/ ^8 u- s* [7 k
/* create a default heap */
* G2 n7 n! s  V: @* zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. u6 G! g3 C; T; M6 jvar heapMemParams = new HeapMem.Params();6 }. }8 Y& K2 t4 H2 J- v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 P/ J; z- t0 m8 ~6 u! R3 J1 K1 l
9 g9 }7 D: ~) j/ y2 t- r4 X1 w
var Memory = xdc.useModule('xdc.runtime.Memory');
0 M# v! q  L2 T4 ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) @- g! w/ F5 m$ z! ^4 g+ Z' T
4 K7 S$ M& x4 m) M2 Q6 |/* configure System module */  _2 b# S% R$ d7 F' Z8 }( Z5 X" L# w! l
var SysMin = xdc.useModule('xdc.runtime.SysMin');- D; n3 p0 U9 j' V& s3 u  k$ a
SysMin.bufSize = 0x1000;
  c+ v4 X5 K+ ]/ f+ mSysMin.flushAtExit = false;
, q4 u" T/ L: L* v: W
5 I! _/ y( R  Y$ F( r$ E9 x/ \var System = xdc.useModule('xdc.runtime.System');/ \0 S! r0 v0 S. r  H* f6 Z( W3 c. ]
System.SupportProxy = SysMin;
& J0 u# t, N" j, E1 I$ H% i( F. P* H5 o# F) l7 n4 c
/* configure SysBios to use the lower half of Timer 1 */+ i2 N# M; C4 g; e& {! G, _* y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) o% G# c! o5 w9 f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% K6 `8 O4 M6 M5 [/ D  g
Timer.timerSettings[1].master = true;( }$ i2 [0 d2 j3 r
Timer.defaultHalf = Timer.Half_LOWER;
2 g; o1 H8 A2 ]  @Clock.timerId = 1;5 V% K5 P( {9 d( T, [  W1 T$ b

0 T8 |( _0 e4 r; e2 o2 s1 t- @! ]6 |) |* n7 v. e9 _% ^$ `' |8 d
/*
' R2 w; E8 t, ]$ G- E& w1 u( \ *  ======== Miscellaneous Configuration ========
% B6 J" _& u" [5 w$ W/ y1 S */0 T3 Z. Z9 O; @$ E
( s0 N6 i# D2 [/ W4 v/ }
/* set default diags mask */* V* K. M+ S# [: y8 t! d. z, I
var Diags = xdc.useModule('xdc.runtime.Diags');# C) o# e- n0 `3 z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  ?% t: _" \6 n6 Q9 N$ j
5 ]$ d! z. S1 b. t6 k4 x0 kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 a0 B% v% V4 u& W# Q; g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 C: h8 H( i' z& w+ IDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 X' Q3 l  h- l; h9 c( HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  K2 O& {6 z2 V) l) b! q5 [2 [; ^1 R
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* r4 T+ w$ n; SDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 C) s" L; B! I: N1 r7 T' f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' x% t! ^5 [* ~  aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! L% L9 @$ @( r- h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. d8 q+ d- S+ x
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% t7 y3 s& ^  h6 a
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( X( ?( E9 `- Q/ p1 ]
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( D% ]3 j9 a# J. I- o
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 P8 M& j& ?  l  x' ?" I$ q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ I4 D5 i  ^) O( n

1 ]6 t# a9 O" J8 i; [/* override diags mask for selected modules */
# L7 |* W. }" y6 |, r4 yxdc.useModule('xdc.runtime.Main');
  t; g1 r  b3 UDiags.setMaskMeta(9 j" v( F1 k" Z' w- g2 Q' ~. S1 k0 J
    "xdc.runtime.Main",
- p; [  t+ O# v% I, r, i    Diags.ENTRY | Diags.EXIT | Diags.INFO,; L6 C  S8 A$ g( j1 }+ E
    Diags.RUNTIME_ON9 [6 e$ Z% D7 y' ?' z1 K# I0 x
);
' P3 d6 G9 D. j$ c
6 y% a8 a+ {2 f$ G0 i3 k5 ]! pvar Registry = xdc.useModule('xdc.runtime.Registry');
% k& x8 E0 |6 `& k, gRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; p. i6 ?4 n" @( Y/ m$ SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 c6 {" B% H; ]1 p# v0 ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 \- D6 L/ V0 A+ x0 T; D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. p2 n& G% R. b, L) T" v

$ z3 W. w* @+ c/ h: p' [: L/* create a logger instance */
# e% S' W4 r9 W+ i3 d4 yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- C4 U9 A. Z( t+ H8 ]9 Ivar loggerBufP = new LoggerBuf.Params();
. H- v9 d' A- rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& C6 |0 \# q: G& v4 H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; e+ K/ z! a" d7 b, r8 l) z; Y$ ^9 Q5 `6 q( ?2 N
var appLogger = LoggerBuf.create(loggerBufP);
6 u  y8 F$ m& O* a* `appLogger.instance.name = "AppLog_Core1";
5 `: h3 H+ e$ o0 C3 i; i7 f- oDefaults.common$.logger = appLogger;
' c  n0 f2 g3 f  B, K6 UMemory.defaultHeapSize = 0x8192;    8 A$ }4 Q2 ^; j8 Y$ ~  s/ a
Idle.idleFxns[0] = "&LEDStatus";9 u% i  _% U$ r$ r1 p1 A) D, i
Cache.initSize.l2Size = Cache.L2Size_32K;" \& y8 J& ?% f: h, ?0 u" ]; R+ f

1 d( i* {6 `, B6 d# Q/ S( j7 b: [; w
回复 支持 反对

使用道具 举报

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 */
* P7 F& s  h% d, W, X9 mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 h# h( b4 \0 t: X1 L
var heapMemParams = new HeapMem.Params();
! z3 ~. O1 D: h; ~; K' B% QheapMemParams.size = 0x4000;
- u! v9 x5 A- n% c' U/ P9 B" @, k/ }' c! G+ j! B, z* X
var Memory = xdc.useModule('xdc.runtime.Memory');
/ W4 o) d4 s0 c; [  h4 j1 iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; a1 {. `: m6 Q8 ^% `
0 t. B  u8 `7 f7 w+ F' a# t. B0 c9 v+ F
我大约calloc  每次共计大小为5K*16bits,
3 S; d& I: M& h( d) d0 a/ m而默认配置才0x4000、需要改大。
" |# U) t7 m( J) c  D  _
* l# M+ J) g0 p0 g1 J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 N6 A7 _' `$ T, }0 Z' `
Program.heap = 0;
. f5 ]/ H2 V( QProgram.argSize = 100;  /* minimum size */
/ _' `' s; L0 d/ vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-14 09:03 , Processed in 0.041516 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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