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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! ]6 c$ z; h1 u- O
3 |  u! w' U0 {" M* U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" l4 _% F4 i4 g6 M) l" F( O6 [8 p8 N; T7 B
其他程序段。。。。。4 X$ u' `6 ]( J% q' X* I1 {
7 ^3 }& R& l( m; B( r
   free(x_d);
& e9 ^  l' ^$ H4 W4 b" x  F2 f
* D# ?. ?) B7 Z: K- ]使用DSP侧单独调试功能,验证动态申请没有问题,
; T8 Y3 v2 c% c# G+ H6 @) e/ M2 I3 u+ {) \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 Z$ ^0 O8 f' y4 @: d
- X$ ~, I7 S2 z7 |

# x% b6 ~6 Y" M$ D2 a4 c) U% c4 f, Z1 g- I
& b; l, w' q! C6 F7 Z

1 W, w/ d1 F/ d, g* _
2 n) v6 ]  y) k( P9 H* J' O& y9 Q8 q+ {  |
# o" g8 d7 m" v

6 E& R3 \) |/ v5 O9 ^2 {
3 F' S$ b' Q# Z0 H! ]3 l% t% n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 g4 R8 W- l# H+ P* `' t5 y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 g& l( o! R/ z! m+ m8 P
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( s8 H3 ?* m2 e+ o8 G$ K, ^3 ?
5 o5 A1 R" ^! [1 ?
是不是需要在DSP.CFG中进行配置9 r4 d/ I1 r4 G2 H0 ^7 w6 b
我现在的配置为* q. h3 M1 i8 e  x

  U- |& P; ]/ |; m/*
/ v$ Z% |+ {" ?: k/ u# V0 } *  ======== Operating System Configuration ========. u, ]" P' [  y; }
*/
$ \' ^/ O0 `+ ^( L5 J9 U/ r* S0 H# Z2 Y% P$ F
/* no rts heap */
$ I7 o$ Q; Z5 n1 ?9 G7 ?Program.heap = 0;- A3 q* ^) y( D6 [7 o- u) K! T
Program.argSize = 100;  /* minimum size */
& z9 e5 X, e: _4 _# m/ R& S9 @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# u% V2 H8 `; h! f. }
8 N% V6 m" s  s
/* create a default heap */- }2 G; J( _! V+ T0 i3 J6 q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  G  n& {4 P; M
var heapMemParams = new HeapMem.Params();
4 [& X# S. p) i4 ^. d, X, AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 S9 {; s6 E2 Z* |2 N" Z
; K1 u& D4 f* X  r
var Memory = xdc.useModule('xdc.runtime.Memory');
9 G$ X0 y+ ?: DMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 L* `: L2 C2 _
0 e, `4 r% m/ g% S7 H
/* configure System module */
. G9 q" E' B4 T  c; i. svar SysMin = xdc.useModule('xdc.runtime.SysMin');# W* a) J, [5 }4 D- g
SysMin.bufSize = 0x1000;& o6 u4 j, ]% y- T) c9 [
SysMin.flushAtExit = false;; ]4 m- D8 f; G* X
0 F" G' S+ }! z0 Y% C- n! f
var System = xdc.useModule('xdc.runtime.System');& c4 e) }. ?2 ]
System.SupportProxy = SysMin;
; C% r& e; ], c9 j9 R" l
1 `; `* j) ~$ D, h/* configure SysBios to use the lower half of Timer 1 */  C& Q  p. ?5 H7 l# g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 r" b6 w3 m' l7 L, p0 ~! Z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" q, i2 `+ k/ @& t- J& JTimer.timerSettings[1].master = true;; L  V! |# r  o1 {2 r3 Y+ V
Timer.defaultHalf = Timer.Half_LOWER;
7 d4 |* j" |' O6 T4 WClock.timerId = 1;) e" [# @! k9 ~! {0 C5 b  V

' h2 ^/ s4 m' j) q
8 P( ]( A& n- z/*3 G/ Y, o* a- u- ?0 ]* E, h  t
*  ======== Miscellaneous Configuration ========
; U8 Q, a, c$ m% X7 O% n' E/ E/ x7 Y& Q */
0 \" r0 p8 K1 t8 i2 a$ X/ A
" P3 o2 e) J* m0 V1 W/* set default diags mask */: i3 g( o8 A% L8 V1 ~+ A) E- ~3 K8 `
var Diags = xdc.useModule('xdc.runtime.Diags');
( A, I6 x) r  p, U2 l# U! jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
  ?8 K7 d; e0 S3 E5 d3 [1 B  ~& s) K* U' D
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ W( o2 [  ?( R, M7 ADefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. x& b: S. ~4 ^  ^" x5 j2 ^Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 V+ A, H1 _9 z3 M' b1 r8 u% o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 Z4 F  \6 g; x0 A6 z+ Y+ p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& b( E- l. L. I! w# t3 G: ^! T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ _+ {; Q. D8 w9 C1 `9 ^
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ }5 t" Q% e/ Z3 s, Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ i2 s' y& r  k5 x* B& }$ F) v( YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- F7 P9 y, d: {" C9 h
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# g5 Z% d, g$ B7 ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' V. J) J$ {" [9 ^& A
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# s* Q4 Z, H( |' nDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 y1 `7 x9 ]; D( y: N  MDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ {' r: v4 x5 L8 {% M5 f) w& H

- R, H% m; D" f2 u. s5 [/* override diags mask for selected modules */
% a5 y: F5 T6 r4 _xdc.useModule('xdc.runtime.Main');5 r4 [  e" E9 H, J5 ^! a
Diags.setMaskMeta(
4 O4 R* ?4 e3 k# Q: I2 q    "xdc.runtime.Main",
! M+ Q/ j' \( v& x/ }+ [& J9 w+ _. a    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 a/ L" b0 b: k: ?9 B5 I
    Diags.RUNTIME_ON3 _4 I  v# C1 m% l- C- s- q
);
1 G* V5 W, ^4 r
9 b$ }. z$ |, I) w) w7 Fvar Registry = xdc.useModule('xdc.runtime.Registry');) X7 w/ d9 ^3 `% r* F* M' j2 Q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( L8 j5 Y) A6 o! j6 m* Q. O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 x; Z0 W  P1 R% SRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 U  c. P6 q1 sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: y+ o% b  ~5 v2 f/ g# u" t+ ~' w+ j' W5 v4 D2 p: ?+ S
/* create a logger instance */
( D2 W) F9 c2 p2 g2 W0 v2 Xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 B, `* m9 q! C2 b' Tvar loggerBufP = new LoggerBuf.Params();1 t1 t0 `& o2 w$ {* E3 b' H: e
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */# D( ~3 Q& m/ g% z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 p, y. I8 u1 ?# X% o( }5 r1 E
8 H& K# |# X/ G1 wvar appLogger = LoggerBuf.create(loggerBufP);, [+ u, @, |" A% b1 C
appLogger.instance.name = "AppLog_Core1";
  ^1 \) [6 ]8 ]) WDefaults.common$.logger = appLogger;, R9 i( r0 q5 _  X
Memory.defaultHeapSize = 0x8192;    & o5 y3 l( k# j4 F7 X' M# ]( G  l* V
Idle.idleFxns[0] = "&LEDStatus";
& `9 k) j. K2 L! @Cache.initSize.l2Size = Cache.L2Size_32K;/ ~* k  ^: l- I( D! b4 K
+ e. `6 f, R( h  B. D
回复 支持 反对

使用道具 举报

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 */: l4 B  v% S, H3 _, y* O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 b; M, u1 A- a8 B
var heapMemParams = new HeapMem.Params();
9 s3 d8 a. @  K. H! v$ Y1 R1 @heapMemParams.size = 0x4000;
* a! b: [! f' U: h, _2 g5 A
* X# h7 `- a( N  `7 Y( N5 S% avar Memory = xdc.useModule('xdc.runtime.Memory');
' `- J% E! j9 AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ q6 i  d: h4 D

8 _* v  P/ p; J0 C" P# g$ m我大约calloc  每次共计大小为5K*16bits,0 z- e$ I) u" o& j" O
而默认配置才0x4000、需要改大。* ~1 v( z# N/ h* H0 y

4 E5 K- k' o, i+ |6 D$ c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 ~9 C. ~7 z& E4 @4 v4 V$ V; c) U5 G6 vProgram.heap = 0;
. k  W) B' {( S  D/ [7 NProgram.argSize = 100;  /* minimum size */
8 Y  T1 M; S2 y, b/ GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 06:31 , Processed in 0.045447 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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