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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 ]% r4 n1 `4 d$ V' m; }

0 ~* E& [( W4 W" P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. d) }( b8 r- E. `0 F
9 R. P( S( T1 F, g其他程序段。。。。。
. n1 D# O. o# _8 H 2 W2 n/ T# p% V8 x4 m3 c) F
   free(x_d);
+ V% f9 v$ F7 Y+ z" }& O' q4 L% H3 Z
使用DSP侧单独调试功能,验证动态申请没有问题,
8 k7 t2 f0 h! [% d& d6 h0 S5 ], _, g% A6 R7 Y. \) s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: k2 g7 g/ R, R2 o( P

$ q: l& K4 J+ i
. Q7 C8 m8 u* x
2 s% \/ I5 m! n6 z  N- }
" z5 x& Q& N7 I+ ^
# W/ L& i+ f2 }' |( }% p7 e; O1 H; b3 ?9 f
, v" B! ?% ?% ~0 s9 b0 S6 \- m  m9 b- m/ M
1 `% d0 }/ r/ A5 E; V6 ^  W5 s" g  x
; u1 l/ `7 p: c' a: M! F

' _  @# S, ~+ J  }; `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 Z' {* ^) |. G# ^8 h7 P% ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 Q/ \8 j# P  G2 h: s6 @, [; u
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) r! A- R& {( {) I+ e+ \
  }+ c: n% U9 T
是不是需要在DSP.CFG中进行配置3 Q; {+ O/ B' b
我现在的配置为" X" X- Y7 Z. e& q& S- g4 \, f
! R0 e$ O* M% ~& x
/*7 w. h) f5 Z, I9 j; ?2 ]- z
*  ======== Operating System Configuration ========' n9 i# i* g. H: X: J
*/" P8 k% s& ~7 y+ ^' h, D2 g

; R6 y+ K9 s4 G7 }# @/* no rts heap */
8 l3 C; g- J" ?- JProgram.heap = 0;; k" I& F& a2 t! N% h
Program.argSize = 100;  /* minimum size */! T. A& @; x0 w. ^$ f" ?' A4 H
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 ^. P) P% o8 M# l. b
7 v% m4 z9 ?- j/* create a default heap */
9 h: k, \2 M7 Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% V7 k$ Y. d8 l5 m9 W
var heapMemParams = new HeapMem.Params();3 T- S# l5 \* H! _' d- o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; f/ M+ Q5 o1 c) w  R/ m. r/ ^2 `+ ?1 N
var Memory = xdc.useModule('xdc.runtime.Memory');
( j3 C9 |+ y7 U! C8 y& f! VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 ?! K- S& ^" H& w# a  Z- s5 e: J: r; y! w
/* configure System module */0 y* ], i- Z) O; u  n4 u' Y/ Y
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 P; B' Z& p6 J. O: ~5 }
SysMin.bufSize = 0x1000;
+ V9 m4 R% n% z# l2 fSysMin.flushAtExit = false;; X7 Z1 p3 ~7 ]0 u( O  w
8 [' _; K' r  q0 Y
var System = xdc.useModule('xdc.runtime.System');
5 P# m) p3 g3 }; l9 ]System.SupportProxy = SysMin;
$ v. w' d; \" E2 Z$ Q' Q( B5 f5 e: C5 x8 b
/* configure SysBios to use the lower half of Timer 1 */* ^$ X( j# P2 B, F, J# m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 M; d: G/ d" f. d
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ l4 E0 T- l. k9 ATimer.timerSettings[1].master = true;
* i, O6 b/ `' g: C: ]; B/ _Timer.defaultHalf = Timer.Half_LOWER;
  @$ r6 i; m2 ~! kClock.timerId = 1;
9 m8 ?/ ^% ^; P+ b& A0 h( V* O; S/ v, q* p" l
* ~# }! A6 F5 m; @
/*
; [; h3 ~( T6 F  Y3 m3 v6 o2 _( ]( J *  ======== Miscellaneous Configuration ========8 E+ K" R. h$ q+ s( g3 Y. N' _
*/
6 o9 C  d. }6 ^3 {. e
0 i. W% ~6 W4 ?; p2 Q; h/* set default diags mask */5 f5 A, N! W  k/ p+ P* n2 ~
var Diags = xdc.useModule('xdc.runtime.Diags');! c7 c- j' I* x( o  Z- I0 ?: z
var Defaults = xdc.useModule('xdc.runtime.Defaults');: ^2 [( Q+ x6 D3 h0 G
$ `1 j, R! L0 l0 b: n! v, v' K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, s  B* P% G5 {& _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; G' `" P# z! l' ~& jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ C2 I" c$ l' r& kDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% z2 L( `# `! b8 r: o4 `3 M6 MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 v& {- Z9 D) V. `" t# O  n+ a
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' F8 t1 f2 r' L3 Y4 A
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' q5 g- w1 I# C/ @$ h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( m) e) w& |* B1 u$ ^! q; YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 z4 P4 o5 v4 P* e0 ?Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% |. W. U9 z- S: |$ v
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 T# U0 a% R. jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 F) s7 Z/ L, m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 M+ g! j1 B" |/ m: |4 r, J0 Y9 k3 L
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ P3 U' O( S9 p7 q  c7 R/ R0 V' V* k. P( F5 r2 s
/* override diags mask for selected modules */3 M1 |0 S- L+ L% j+ N
xdc.useModule('xdc.runtime.Main');3 `* T. v; T% f3 `3 U
Diags.setMaskMeta(  K- ?& f/ a# H2 c
    "xdc.runtime.Main",
7 c: m4 e, J; c. ?8 |* u2 A    Diags.ENTRY | Diags.EXIT | Diags.INFO,' E* N3 \& j3 J2 e- Q
    Diags.RUNTIME_ON
$ r6 l: [& l6 b0 u2 Q/ h);3 T4 P6 Z  \6 V; d. P
+ u2 \: M$ |0 ^7 N( v1 R- n( @
var Registry = xdc.useModule('xdc.runtime.Registry');7 ~6 j0 b' [) V! G- h0 ?
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# L: W: b. G; ]% [" M- x- d0 M
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ ~* v8 L# ~3 Z5 \( R5 o) l( ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;, K) l+ w9 F  d4 g8 u8 E% y5 u8 G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 L, n% V: f* C8 m: W) U3 ~; u' y2 ^3 g& M% y2 T
/* create a logger instance */# I6 {) t3 g( v8 l# s
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& [. I+ Y- E- U% T6 c/ b, R  k; q
var loggerBufP = new LoggerBuf.Params();
$ V+ D% a6 R( e6 r6 F2 eloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 I  p# n4 ^) k2 O5 n2 z( e# t
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 ?1 d8 r2 @- l

$ H, D$ ^3 L, Mvar appLogger = LoggerBuf.create(loggerBufP);- O$ u, _# t  y: v
appLogger.instance.name = "AppLog_Core1";
7 }. o! ]# g/ `& P4 c+ Q! FDefaults.common$.logger = appLogger;
. U: K- p& n9 C3 H/ A" aMemory.defaultHeapSize = 0x8192;    ! A7 c2 j) Y" @% ?7 N
Idle.idleFxns[0] = "&LEDStatus";
- C: Z! u2 X1 [Cache.initSize.l2Size = Cache.L2Size_32K;! c4 J+ Y" p% F( |

: x, j' Q5 Q. C) S5 L4 Y# \
回复 支持 反对

使用道具 举报

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 */8 J$ F$ x$ q& h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( Z$ [3 Z$ U; O( o, uvar heapMemParams = new HeapMem.Params();
3 Z) z* {9 n8 p, ~heapMemParams.size = 0x4000;  F0 m8 Y( e2 R- U' f* l! @) G
1 s0 U7 Y( \- d! V  y
var Memory = xdc.useModule('xdc.runtime.Memory');
) c# |! }8 L* l. ?8 a' RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 F8 C- |  [; l* v9 @

& S: Y! v# y4 f' R* G/ `  d# Z我大约calloc  每次共计大小为5K*16bits,. E7 k, `% z5 t9 ^4 d
而默认配置才0x4000、需要改大。
9 S; r- r+ y- \& N; r2 N
2 a( H8 r% W  V* p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% b6 g0 c9 O& F
Program.heap = 0;
! `, _* D& f$ L1 A' pProgram.argSize = 100;  /* minimum size */- o7 r) a) `3 W, ^0 H
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 19:51 , Processed in 0.040356 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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