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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 I" G  z# R9 \( X; y- k  a
, P2 o# H! a  Y0 J0 |
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 t9 {- V# W  v/ m) ^
3 _+ o: B+ _8 J. s7 B9 D& I
其他程序段。。。。。
/ x8 O* \5 q8 }( c, y
1 C& k) p; P' u5 h   free(x_d);7 r  `8 b1 L/ x
' {9 u  @0 A3 A; U# q; M: f
使用DSP侧单独调试功能,验证动态申请没有问题,' Q. Q$ [  f9 p) G+ A$ w; @

7 W7 y' x+ k! r  S/ N) n但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! C9 C- e) f8 d/ B& u" H: l
' |  N9 v5 v7 y  G* }4 x/ Y6 n
! M  l0 Y9 d% E. ]4 K

) r9 u6 e& s/ c
' V* c7 W- n# H8 T7 Q1 {6 W
6 e0 H8 M1 ]& u- i
- ]* E/ P) X8 z; x1 a5 h/ Z: K1 ?9 n  \( ^+ ~) M' a

& m8 e# ~9 p$ y8 U- y+ z2 n- |; K9 Y6 M, _7 N

; ]" L3 v9 F& l5 v( A; x2 n! s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: G3 s: }9 ?2 }2 c' f- Z, t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ E( u, H3 |0 k' g3 A) E# O0 c7 V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! }) v+ }8 G: Q7 j

" e/ _5 V/ d. A7 Q/ i2 Q& E9 j是不是需要在DSP.CFG中进行配置
& P3 N; u" |9 `& Z: `( n# \我现在的配置为* ?& q- P+ S* T

1 q0 P5 L' e( d& i6 l. P9 N2 F( _/*
( Q5 E+ j5 f) |& @  x8 ~* F. V) B *  ======== Operating System Configuration ========% Y$ V( V( l; S/ z  Y' J
*/
0 J" R" u6 I2 B
6 g! x2 P) n; `; @; j% ~/* no rts heap */
8 g2 G% k7 X- O2 e* ^Program.heap = 0;
2 W: B5 G1 c# @Program.argSize = 100;  /* minimum size */. V% ^, r9 Z2 ~- N3 M% F2 `/ p- `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& a, d# y6 z" r( B  s- `" ?

1 ], ?' j( ?- D+ e7 h/* create a default heap */7 o- H: V9 }0 |; }6 y" x. \8 K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  O0 Z9 E# \  q5 X1 fvar heapMemParams = new HeapMem.Params();) l: @! ^" O7 P  b
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; ?' h$ p7 d' F; B. Z* |+ C
! x2 E, u1 Z5 Z: H' l0 j0 d, O1 T
var Memory = xdc.useModule('xdc.runtime.Memory');: C- ~* E4 k4 c  B+ w9 a; W3 b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# u; b9 W4 K5 V( e

, u! d7 ?5 d  l( c& R  ?/* configure System module */
! |/ b: Q7 p' x( l: m( wvar SysMin = xdc.useModule('xdc.runtime.SysMin');: k0 S6 |1 e, U# U7 [
SysMin.bufSize = 0x1000;- h+ c0 D7 c, t
SysMin.flushAtExit = false;
  G) o; r; ^# y: O% w. N
7 m2 I' F  T0 V6 Zvar System = xdc.useModule('xdc.runtime.System');
3 T3 k7 @" ~; ~/ `* h' k5 Y0 dSystem.SupportProxy = SysMin;
) }: n( N% R0 k' d9 {+ g* J7 ^  G: ]& R
/* configure SysBios to use the lower half of Timer 1 */- E& ~- \6 u. V  V  N8 Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: p, }" N- l, ]- d7 U( @" Fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
& R, l) i# z" ]- m5 O/ u- y, m+ S6 ATimer.timerSettings[1].master = true;9 L/ D/ k1 @$ P
Timer.defaultHalf = Timer.Half_LOWER;
: v4 K4 I$ r5 z4 r& O; d7 j2 |) UClock.timerId = 1;
$ C! B2 z$ `# t1 h! f7 d1 T" h
! l% ~6 F- ]- w& i
" p8 x. N) }% y) K+ D/*; k0 c' {% O0 C& _' h
*  ======== Miscellaneous Configuration ========
& L) m2 G9 y/ i */
2 d9 L( b# \4 ?# O& B) |( Q) L1 f
& `& K* F+ {! x+ x, {/ a0 {' |/* set default diags mask */' d% A' X3 R( X8 {3 n3 }3 u# j. x
var Diags = xdc.useModule('xdc.runtime.Diags');
& D# [; U* |* c+ bvar Defaults = xdc.useModule('xdc.runtime.Defaults');1 |3 {# J0 k+ c3 w0 }; @% }
3 z& r: f1 g6 m% C
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 {9 }8 s5 r9 t8 N
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' `- A7 z; ~+ c% _$ p. `2 P/ g5 s" {Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. X5 F4 k! x) y+ W( E* O9 d1 ^( V; W
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# H/ v, }  D! C- F  P, {; w
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( D# D4 l( d$ X# |4 _) {+ i' t+ }2 wDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 t6 v5 I; x# w* m, G' ^  n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) ]- D9 q9 M1 Z0 _0 g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) A9 e' s% \' N0 z8 j" [& Y8 v) P2 qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 U  J( n/ V  ^) _5 ]8 f/ i: B
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 h8 O/ K/ a9 u5 W" u1 h! jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 Q+ U. B0 {( e. |$ C7 j0 A7 v
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" _$ t" `% g$ D6 e0 NDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 j  K$ A% H& ~$ Y5 `8 _# I
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  _$ o7 }% i, V5 y( ?$ w# x% a

- n( ^' ]0 {: b6 p6 p/ }4 F/* override diags mask for selected modules */; n* d0 ]' }6 t5 u$ o  [. S; o0 U) v
xdc.useModule('xdc.runtime.Main');
8 F1 }# N! @% u# d; f) z1 oDiags.setMaskMeta(
' q% H: ?/ D7 O' m  W    "xdc.runtime.Main",
7 j$ \( c& K7 ^    Diags.ENTRY | Diags.EXIT | Diags.INFO,) p1 x+ N) @: |" N4 X4 ^! k
    Diags.RUNTIME_ON: j: x$ M0 w5 P% K0 \
);
- }, i1 f. z" H$ Q, D* p3 @2 P7 {$ i* b2 |5 h3 T
var Registry = xdc.useModule('xdc.runtime.Registry');
5 ]- K' E* j' i1 d/ {Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; e. d& X/ M  r  c, j8 PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! y4 c$ i! ?& T4 u/ p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 s# W; b7 ?: h# L4 j+ I/ zRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( G) L2 a* F2 \! Z) o* L
; L. s0 @) U2 G2 C. A, Z6 U3 C/* create a logger instance */2 O$ \( F& ?4 _/ ~$ G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  a) w8 y/ I( E2 wvar loggerBufP = new LoggerBuf.Params();
9 f) C3 i, \5 k: t  ~7 kloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 @; v) ^$ _3 V% x. [& [' SloggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ e; e3 B+ ?2 o$ G; [+ q$ y1 D# F8 W) q+ j" x' i
var appLogger = LoggerBuf.create(loggerBufP);, e6 ^5 b0 y! P
appLogger.instance.name = "AppLog_Core1";
. c' ^7 S& F9 O7 ~% K7 yDefaults.common$.logger = appLogger;5 ]* K9 w* q2 [3 d& N2 o4 T
Memory.defaultHeapSize = 0x8192;   
0 @# T. u8 {1 A' D6 ~Idle.idleFxns[0] = "&LEDStatus";
0 [8 e4 r+ M* _1 o) X6 h. \' |Cache.initSize.l2Size = Cache.L2Size_32K;1 L8 @0 s& H2 k2 z/ D
) C* d0 n; H& r9 J6 E  [2 |
回复 支持 反对

使用道具 举报

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 */
  Z7 w4 [+ F3 c+ X" v4 Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! [3 S0 y2 a% K. t4 _9 V; U0 b- v
var heapMemParams = new HeapMem.Params();
2 \& N6 p  U/ l& ]( H# AheapMemParams.size = 0x4000;8 Q+ b4 n9 ?' k# u
) G& x& P4 |6 D* V. A& e
var Memory = xdc.useModule('xdc.runtime.Memory');
# Q0 D9 k/ n/ K' _. w5 {) ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- }5 K7 ^% m% p$ m8 ^  `- B- T
7 u3 k# T: O% }/ F( M0 S我大约calloc  每次共计大小为5K*16bits,. w8 o: O/ i* L. p# v. y7 b# Y
而默认配置才0x4000、需要改大。3 B4 i4 q, q' p5 ~, ~/ m9 x

- m+ u& s+ L; K" Z/ r( T, z+ K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; c3 j6 |" C4 |, I8 fProgram.heap = 0;: Q! z, F4 Q6 |$ s+ G( t
Program.argSize = 100;  /* minimum size */
# q0 ~1 J; }) j' u/ g* a7 OProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 12:18 , Processed in 0.045955 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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