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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; J/ z4 k' J' x( a4 e6 P* c
6 `2 c; ?  R- a: `6 Q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- Z3 V8 i  c1 X% w1 _
7 [5 ^8 f4 ~# r' J7 l
其他程序段。。。。。" @; l7 z- j& o& x  j& |
9 i2 q$ f$ Z9 [* [9 D
   free(x_d);7 z% }* ~6 v; T! b* U) Y4 ?

+ Y$ L7 j0 X1 O使用DSP侧单独调试功能,验证动态申请没有问题,! K; J$ j1 P. Z! J! a
; \+ Z% q& Q$ {# V
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 f# m+ ?3 S# Y8 @

* m- D' R4 O. T: A' }+ d
5 D  }! H, \6 }' K6 j: z! }- c2 d  W/ O$ b+ K" H2 L  _; q& V

) L( H, R5 \4 {3 Q+ W5 Q. n
! Q0 _: T( K/ ^0 |% E5 x  Y
4 u5 ?# H7 D, v+ Q' g# R& r# d8 q/ C% Q

  W* i7 [5 ]5 V$ p
0 b: L, u% a4 v: l6 U  b: k8 f7 [; |7 V, b" C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( @! ]$ f7 G+ C; |, O: |& y# FProgram.heap = 0;+ u" C$ u. U1 l+ {' A( y+ q. u
Program.argSize = 100;  /* minimum size */) h4 W6 }! b$ [- O- }/ S3 i: \
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
. Z# P2 j: D3 U" S% [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 K$ b" V$ Z0 |# l9 V) |5 I' y
var heapMemParams = new HeapMem.Params();
4 m, ^  @: E8 C$ w5 e, h# u4 WheapMemParams.size = 0x4000;, w5 |1 s0 o) h  s6 [4 p7 G- v7 t8 v

0 M6 g$ ~) v% M% \' O" o( ?9 gvar Memory = xdc.useModule('xdc.runtime.Memory');1 r. b! a  o( p" J, n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 ^- v* t( z5 ^8 m7 {
/ \$ u7 R0 g& D+ b9 e5 K
我大约calloc  每次共计大小为5K*16bits,) P/ i" _8 r3 j8 I0 n' l
而默认配置才0x4000、需要改大。( j$ |5 G4 b# S
! b* Y) Y- k; W/ O5 m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ }9 Q. H- B) Y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 O% ]6 ^3 g1 R  ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! y8 S! s: I3 q0 t# ^' o7 V0 r

1 w2 w$ g: ]* M3 m& u* B0 T3 X是不是需要在DSP.CFG中进行配置
8 b9 [" n! Y$ g9 \0 h我现在的配置为
) \: |( O7 p5 d; P+ ~' R  e. Y% s& g  |. O$ o, F
/*
) t; Y5 k8 I" @7 f8 e/ N6 I *  ======== Operating System Configuration ========
7 y( `( z% K' X: h. _2 [ */& W- v" h0 m* a

# g- m( m( x; \  e+ N# W4 B1 p/* no rts heap */$ B4 h0 \4 p2 W& h0 n7 @
Program.heap = 0;$ d' h; a+ D1 k6 P$ h
Program.argSize = 100;  /* minimum size */
, ?: W& p2 }' @+ H( _" ^6 VProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 d, G9 x* g7 z4 [# V

2 J1 X& s/ U* v0 l1 d& }0 Y/* create a default heap */( Q1 F- [! l) F/ b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 I* d# s5 u( [- _* g
var heapMemParams = new HeapMem.Params();
( J+ ?. G; D. Z$ qheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 B* y0 j' q8 s/ p* |2 q- O' G$ \7 c8 O: v
var Memory = xdc.useModule('xdc.runtime.Memory');
' w# F7 Y) H( h6 }2 T* zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 a1 W6 X( f' u4 y/ n/ i- C6 d* \- B: F# U0 i7 m  i
/* configure System module */
0 }8 y' E; Y+ d) q6 M( d. n+ Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');/ X0 D" X+ @* n) l- }
SysMin.bufSize = 0x1000;
0 H& G3 V) q% y" TSysMin.flushAtExit = false;
$ W; `: v3 j) f( u( w
1 }6 C* K* u$ J4 J$ _4 mvar System = xdc.useModule('xdc.runtime.System');
( P) L1 @6 p" r5 d3 h' pSystem.SupportProxy = SysMin;5 Y* c2 w- T2 }3 V4 t5 M

( t( d( U$ R/ L( v' `" p/* configure SysBios to use the lower half of Timer 1 */( G1 H) L" J$ n; z3 k; x
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ r4 W! K& |5 Yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');4 W9 e# p5 H7 ?' K8 t* J
Timer.timerSettings[1].master = true;
$ |5 X5 }/ O0 cTimer.defaultHalf = Timer.Half_LOWER;
( i' ]( D+ [7 Q/ C. x5 WClock.timerId = 1;6 b, j: I" u7 p9 h  C  L

6 f+ o# ~( H; |* ^5 l* o3 v
+ m( H' @5 E$ M/*
. R$ W7 P: _- _: _ *  ======== Miscellaneous Configuration ========% H' l8 K2 K( \* G7 X2 l  t7 `
*/& U) @9 m8 _3 o1 J) e( j

& [; [" }0 ]# O+ |/* set default diags mask */% S1 O* P) Q1 [
var Diags = xdc.useModule('xdc.runtime.Diags');
+ T5 j  Y3 a9 w+ tvar Defaults = xdc.useModule('xdc.runtime.Defaults');* O& S" P8 }! L) t. ?0 H

" u) a4 b" p& j( S2 b* w; ?( S. ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% D( T$ ]! I8 q6 m6 n+ s& }
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ u' J: K8 R, B* {/ nDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. W& n! I4 i4 H$ w' }  i; `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ W' ~7 f6 m9 Z$ j/ l) \" t
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! t, y4 }3 i$ ~7 I* r$ L' SDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% _9 f$ r; t. ]; v0 l- b% o+ I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' {* w) k% k2 v7 Z4 {/ PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 y8 f8 e- ?& Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ [: J1 x% `* }8 P" T* V: n, ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ G& C) G, B4 y: j' e' C9 ~! M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 h% X, \  Y1 l5 h5 v- [& [Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 E, Z$ ~/ l+ E3 ]1 P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. n# v$ ^- H. d' \2 g% Z% ?
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% A0 |& L; ^4 U/ k6 N% V! h2 x( Y  k# U2 m% p
/* override diags mask for selected modules */3 x5 b5 [2 X, |/ G
xdc.useModule('xdc.runtime.Main');
! P* I5 G! T3 pDiags.setMaskMeta(  a# U! w  X  W/ X  e" s+ w, `
    "xdc.runtime.Main",
7 s7 W! T# [5 f) j* _/ @( X7 r    Diags.ENTRY | Diags.EXIT | Diags.INFO,* X" F0 ~9 U; C# W8 \( [& `- @& d. s
    Diags.RUNTIME_ON5 w! ?- d& d1 {$ ]% i0 Q
);
3 j0 \) ~/ W2 [! c" A$ u$ j1 ?( ?+ O; P. d' o6 }
var Registry = xdc.useModule('xdc.runtime.Registry');# }- I2 O- ~! ~. X: n( C) c3 j. l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ i. A; K( u# _8 V4 N8 K4 Z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  x; g) Y8 y6 E* M( Q4 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;' s# R' K/ }% J0 B" `" C
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  ?' V. I6 S& [& D8 R- p) M6 {/ E! f  l  }( H
/* create a logger instance */1 ~5 W" S$ s/ b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ W9 K7 O+ K' c: x! n# {var loggerBufP = new LoggerBuf.Params();
) G" ~( K8 g7 V! m' }# C4 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 Q; T6 @* w# b+ C0 QloggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 j" l  c3 a( i# g
* D" V* c& g. Bvar appLogger = LoggerBuf.create(loggerBufP);. x, q* Y; q& u" z2 ]
appLogger.instance.name = "AppLog_Core1";/ r1 X( G" @( Q
Defaults.common$.logger = appLogger;! A/ t. O) E& L. i8 W& a9 F
Memory.defaultHeapSize = 0x8192;    6 h$ d5 |3 q! ~* u
Idle.idleFxns[0] = "&LEDStatus";+ E( d# q2 n( \
Cache.initSize.l2Size = Cache.L2Size_32K;& V$ w, O& [% y9 P7 ~

" o2 F0 x0 H8 _) l
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-27 02:05 , Processed in 0.072302 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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