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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 [% R" r# ?$ k- [8 A# |1 V. B$ x; y3 g: K" h
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: @& N; A7 {" J, N  ]

' C0 I9 g2 }, u) I0 w5 E其他程序段。。。。。) I$ S% A. z8 J

* g, @7 d4 K8 |7 \& @; D2 E   free(x_d);
% x+ i- C* {& s3 R9 M/ q. n8 _: w1 `0 I$ \% |, X3 [- x
使用DSP侧单独调试功能,验证动态申请没有问题,
( B9 a9 {; b5 w
# J" l3 z0 C. w6 [  v2 _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% e0 [% q# s; R& ~

( `) F& T) b& ^8 K
& F6 `1 u) ?% g/ ?  `* J1 L; x  h" J+ C# n* p
7 a6 m& U' H1 W9 z1 R5 @$ {+ e
6 K: x1 E& y- j& |) j# C* d! O
- b( `/ L8 Z% _& O6 U1 V' B
( i/ Q8 R4 Y. q- ]8 [  G
9 ], T/ v  K% R9 p, h7 I+ ?
0 L% W* G3 L7 ~! z7 S
8 w% Q& J2 C# \/ _$ H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" F2 q# D" Y  C& p5 g  i; h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ h8 \3 c9 R$ [  D# W2 ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 _5 x, x! I6 V, [( M# p3 P
4 B* a! M6 p" t% Y. }5 L0 K' x
是不是需要在DSP.CFG中进行配置
' x6 X& r. d& ~( B7 T% R9 U2 @( H  R我现在的配置为
/ F9 R$ K/ K6 h1 N) ], a1 ^0 R& h3 r7 ]! O1 K! z, X' @
/*9 b+ }- s' m) H) d; q
*  ======== Operating System Configuration ========* |4 S2 A0 V% q5 M! B5 v! O* r
*/7 }% z& e& Q$ r; \; O

/ z9 M  U# ^" v% s. Y; L* G/* no rts heap */6 |  G2 B- c' F
Program.heap = 0;
5 @) Z6 E' ^6 O* z) d  NProgram.argSize = 100;  /* minimum size */; N. n: @' W9 W% [* e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ c2 M% g+ d# E: L" |* ^" ~
! P% {9 k0 G3 Z+ m0 \" Y( X$ R5 v/* create a default heap */1 @( d  W, m! [9 p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  v! p1 h( S+ Y
var heapMemParams = new HeapMem.Params();/ E9 [0 @2 _0 \  b6 X4 U* d
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# P0 Y/ K: \$ P+ {( A0 X$ G
: q' b# K& {, M% R0 T
var Memory = xdc.useModule('xdc.runtime.Memory');3 ^2 i6 z/ q' x0 A4 G8 ~: y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 D- M! c% b3 \  B- u0 z
  c3 U# w, l0 d6 B/* configure System module */7 D8 o( r; B3 V% O
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) X* @1 q  K5 w7 z" n% S) @SysMin.bufSize = 0x1000;% }6 D) E5 h& H; v: [5 G" u( `  [
SysMin.flushAtExit = false;
! Z6 t; `$ f9 q/ `3 N3 [0 m9 b* ^0 o. V
var System = xdc.useModule('xdc.runtime.System');
9 F  ^, a5 T4 c7 P# S0 D8 VSystem.SupportProxy = SysMin;* G" L. g7 W& f. R8 q9 j

  c4 G$ @% J( D2 `3 B0 w4 K; }- j" ^/* configure SysBios to use the lower half of Timer 1 */+ M! j1 d! s+ @" W2 A  N
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, q- i& Q' C) b, g* }' e7 `
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ W# F' v9 ?: o+ S. {% BTimer.timerSettings[1].master = true;, H3 q8 y& S& r, J; P2 T
Timer.defaultHalf = Timer.Half_LOWER;
2 I. R) ~( j8 l+ GClock.timerId = 1;
5 e- t( K4 C7 H! a" j) ~0 Y. q5 g  C$ i- w, V4 z
6 q& G* f( H, M5 }
/*
6 k/ n; O* E1 ? *  ======== Miscellaneous Configuration ========
0 D4 K% x6 B; H: g1 `- q */9 l0 d7 s* W) E5 C$ X8 W5 T
3 V0 F5 }; |8 N
/* set default diags mask */, W* B5 F. ~+ F
var Diags = xdc.useModule('xdc.runtime.Diags');0 B+ u. N, ^% X7 Q
var Defaults = xdc.useModule('xdc.runtime.Defaults');( j4 C4 S9 T; I. c9 U+ p9 |; y! T8 N
# B* `6 e- h, n4 ~! y
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( W. M! L, x9 S+ R$ x2 [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' ?; H* K' f7 o: o4 Y9 _5 jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ z5 H9 }# f9 PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 u% D  X$ m# ~' X1 c( ]) A, K
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 H" \7 w& C4 v) o6 a
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 x0 `8 V! T/ p9 q1 T! J' @9 ]5 {: i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) R6 D2 M5 d0 w$ z  Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" D( Y8 l; z& R
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: `9 [) v2 j& GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! j0 e) G9 ]4 p" l2 j; ~4 J$ w$ h5 e/ g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 U8 w: I1 y# `9 l' _- U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ g5 X7 n8 |3 k8 @8 G; ]) m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' a' k4 B" o- z  ~6 p8 a' eDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ b  N0 s. _, B, F, `; b8 ~

/ q7 R% L8 {! I! Q/ Z/* override diags mask for selected modules */) g1 V5 q" I- S" f: ]
xdc.useModule('xdc.runtime.Main');# S7 S( D! L7 f
Diags.setMaskMeta(
5 A! P- D( _# i' @4 J3 T    "xdc.runtime.Main",9 V( k7 h. ]$ ?+ }( M# ~
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ @( ^3 v4 h3 W4 t1 O    Diags.RUNTIME_ON, l3 i4 Q4 U9 H
);
  x+ y% K- x) ~& M& [6 j
  k7 J- m) j. J: h; Jvar Registry = xdc.useModule('xdc.runtime.Registry');. y  z9 ~- v3 E8 B0 C! G- n0 t5 b
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' ]9 K4 a# P& _1 A
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 O3 }0 d+ t% y9 j( J
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% i1 Q* a+ g2 D) k3 iRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: [! M# U( f) F. z

& B; v$ E$ n  h" G0 p/* create a logger instance */
' H% F% q3 c" ?$ Y; f1 c* ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 z' {0 k- x/ a( y/ f
var loggerBufP = new LoggerBuf.Params();
$ w7 t8 M/ e6 B" G2 g) t. @; Z( EloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 @. c+ E0 Q* x- q7 {" TloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 v: m6 h) h. x6 c1 |& H. _7 R7 ^8 L+ }1 Z- k3 A6 Y- ^
var appLogger = LoggerBuf.create(loggerBufP);
$ b, l, O! g" g) b! [appLogger.instance.name = "AppLog_Core1";
# _6 G+ v: h: `Defaults.common$.logger = appLogger;/ v$ n. Z' C( a) B  H- {
Memory.defaultHeapSize = 0x8192;    $ U. l8 D) r$ Z6 o
Idle.idleFxns[0] = "&LEDStatus";
1 u" g2 O2 J1 i/ C4 L& A$ zCache.initSize.l2Size = Cache.L2Size_32K;
8 z& ?  M! ]6 `  C- o; F8 ]
( J% m1 b# w, F& i+ _, t9 K/ [+ w7 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 */) w' s  Z0 t7 {1 P5 p& N* h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 y9 b  J3 d- F( cvar heapMemParams = new HeapMem.Params();# o# t9 L# d: y4 `: Q2 H
heapMemParams.size = 0x4000;% d0 z& @: ]5 d: g
( A  K9 L) e4 v0 `' U' c
var Memory = xdc.useModule('xdc.runtime.Memory');4 Y% o4 q+ S+ C# m, |# k  e) v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( g* M4 _- v& a/ V
5 B( R1 Y' h7 m0 F& V" k2 |
我大约calloc  每次共计大小为5K*16bits,4 M% ~3 j4 \2 G& _/ F( N
而默认配置才0x4000、需要改大。2 v9 q5 Q4 s9 T9 M

. Q2 k7 O- i( d/ }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ }. _. G9 d% y3 Q6 i( P  TProgram.heap = 0;5 T; H  B" E) o* O: H+ K
Program.argSize = 100;  /* minimum size */
: C, [( f$ r$ X6 e: @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-10 07:58 , Processed in 0.042723 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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