关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 [3 V: y) [( K) Q( C' H
8 v4 ^( g4 C5 L; J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' T3 Y  m& q0 a# v* Z, b7 W6 c$ Z( {) o& v) [
其他程序段。。。。。; {, I& q2 ~" @* Y6 R  a, b

; ~) T' T: z' K6 j$ Q   free(x_d);, W0 R3 b2 w1 e: T; R
/ E8 R  o" A0 u6 u. V' D+ m; g
使用DSP侧单独调试功能,验证动态申请没有问题,0 @% m" b% C9 B: b$ h

3 {9 h0 P" ~" L  D* o2 }: G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 R6 B2 G5 S/ \: y: _: E
5 P( y7 O, N; ^3 Q) t( Y2 L: M
$ u& K5 r" c3 P

/ i5 z- K/ C9 r0 k7 F3 g3 ?3 Q* F/ ?% G. j0 c. m6 Z

% }* x4 r* T  z# a3 r8 q
; }( U" @0 D( k' K3 K, P" l" I
: D$ _$ V% {) K7 Z+ ~" l
) ?! q2 |3 W0 X% B# j) q( r' p
! A! e4 x4 V: l2 j( A
' Q$ Z) Y) v( V* I: a7 s% u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* p: d  {, t6 X9 M. I! Z7 R9 f
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& L" K& @7 h3 U* ?( U2 Z9 G; {% n5 \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( ?$ j( B  [' r
' W! v% V/ |* X+ f% w" E7 O7 x3 g
是不是需要在DSP.CFG中进行配置
$ r. N2 ~3 z, |' I我现在的配置为% i* y# Z$ M8 @( |
3 o" H! J" f; D* Z: U. ?& }: S
/*
( w: M. D  U; A) ?% W$ c *  ======== Operating System Configuration ========0 H2 u4 }+ I* S  o/ {% b  r
*/
. _" |7 j* L$ ~/ w
# O9 i+ E: x3 v& ~6 x2 n' ~/* no rts heap */2 F/ Y' b+ I0 e6 N$ b
Program.heap = 0;  z1 B# Y8 p' Z1 y& u
Program.argSize = 100;  /* minimum size */
: q/ B, l  @* J' O7 z4 q) vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" w' y- l1 H1 m

; d8 ?! W, u; N: O! Z1 [/* create a default heap */& E6 H1 S' K' p9 [- L+ K, V8 t% c9 h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) z! u/ Q; k# s6 M( @* u! w% r
var heapMemParams = new HeapMem.Params();5 J0 ?/ M9 n. M0 A
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. {4 s: m& d+ \0 C. V: T. s) t$ X* X" M0 O4 B+ K
var Memory = xdc.useModule('xdc.runtime.Memory');' w' W5 R8 R1 Y# p9 J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; D. [4 n3 H& R! p! w$ b
- B; a* Z- R5 ~' l
/* configure System module */
* n' f8 w0 r* H; x( H' ]( f7 V+ xvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- D: w: N  P' M! TSysMin.bufSize = 0x1000;" g% X! C$ v; ^4 \* }
SysMin.flushAtExit = false;' A0 c* n" H7 `& J. \2 n

8 r6 L/ i# D  I5 S% Jvar System = xdc.useModule('xdc.runtime.System');
; e6 |' w' Z4 h  }4 `System.SupportProxy = SysMin;/ A8 M2 Z9 Y( g) a
3 X) M0 u" q. |  I+ i
/* configure SysBios to use the lower half of Timer 1 */- g* q, }  q/ e2 `8 l* M* p2 o2 F
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: @2 e, i+ ?9 ]9 D0 W7 y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  w! u* p% _& N0 @8 WTimer.timerSettings[1].master = true;. A- j: _: e4 t  T2 S, _, K
Timer.defaultHalf = Timer.Half_LOWER;
7 y( Z2 N/ `! j# iClock.timerId = 1;8 c! }  N0 m9 V; @* O2 U6 `

! Q& A& a9 U( i5 Q3 ?2 ~1 ]% Y1 o" S
+ C) a( W$ _% C8 W! Q/*, g* k5 M/ A" h: T+ u
*  ======== Miscellaneous Configuration ========0 ]' h0 y6 c$ ?$ Z! L. a
*/4 j- h* D$ P; C0 E

- J7 n$ \) U% ~8 G' `0 _/* set default diags mask */: A. e( c3 j) }
var Diags = xdc.useModule('xdc.runtime.Diags');8 ]" B4 b# ^4 Z  d7 H
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ h0 A  N1 K3 q9 C
/ w# y& j; [& j. _2 i- D: }* H3 H3 FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! x+ X* I# K- @/ d$ x7 \+ e$ ^
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; J7 b" ?9 @9 h/ c& s1 L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: Q7 {$ f% p2 m7 \/ KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 i) W+ \% E4 \+ X
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ k/ j1 ]" `; j) O2 z) wDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 b1 _& K! R; O) F+ L5 A& ]Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! p5 X9 |: y( H* C
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. o; Z1 B  y' F6 x1 F% q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  T6 f" g4 Q: @1 X0 V' |7 NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& P0 x2 r0 A+ v# gDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  H) a0 M% A4 A$ l0 H, B, i  Z0 BDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% T* |! k8 j, L9 s% Z$ t  A. p& z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# [  g4 h. U  p" A/ Z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 @! M. R# P6 K7 S( w( W
) J2 l9 x$ [! i. T6 W* i  G* @( T/* override diags mask for selected modules */
7 W& p3 _" d& u# A1 w6 T' oxdc.useModule('xdc.runtime.Main');
- L0 W8 N% v, b" W5 q5 o( @Diags.setMaskMeta(: B+ m  q2 P4 U3 r
    "xdc.runtime.Main",2 E, V2 T! T4 }& _3 N
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- K/ b4 O% v% j3 M1 M    Diags.RUNTIME_ON
% J# X, f2 p1 E8 m9 p2 Q$ j& A);
" Q0 I8 M. F; w- ^% D2 ?) L" g
9 X% @9 b0 j7 w; ]8 fvar Registry = xdc.useModule('xdc.runtime.Registry');( a  Z' A: j  j2 p  \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ L+ R/ @; O7 T$ J4 Q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ I4 ]$ f& r% S7 S' F" PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;' b# s6 b8 n$ v+ f
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# p; B" V& J' z1 F8 d2 f! I
" ?- W3 c/ x: V! D
/* create a logger instance */
- w3 ^2 K( i8 A& e9 uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 u  F2 D& @( _0 i6 b: dvar loggerBufP = new LoggerBuf.Params();5 N) S% i3 p* j& i$ J
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 I$ \, y  p- e+ O6 d% u$ l8 BloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ s& G# [9 ?3 R. v9 Y/ l
: U0 [' I/ _6 Y/ g8 g6 C8 `1 bvar appLogger = LoggerBuf.create(loggerBufP);* u9 a: Q5 A/ \
appLogger.instance.name = "AppLog_Core1";
; P* @( x3 ]1 v( _% cDefaults.common$.logger = appLogger;
/ B) w4 {$ D. O2 @& v+ IMemory.defaultHeapSize = 0x8192;    7 [' N' y+ J$ p* A# G! J' U
Idle.idleFxns[0] = "&LEDStatus";0 c& U, c; B  n& d0 G+ S. _
Cache.initSize.l2Size = Cache.L2Size_32K;
0 }# H" j/ p8 ^5 \& Q0 U& _0 f: O6 g7 H4 C# o. 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 */
& {8 B2 J! n( ]( V) b% uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" z5 @) z4 @( w# Hvar heapMemParams = new HeapMem.Params();# q, ^4 y2 t* X3 I; N) J2 u
heapMemParams.size = 0x4000;0 ]; D- L8 m& Q' j  j+ f
# H( P# M0 `! }2 K- F7 \8 V
var Memory = xdc.useModule('xdc.runtime.Memory');
7 l4 A5 _) X6 K$ b: HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 J! w4 H+ E- y! g* D  O
& g5 D  q7 z' u5 ?
我大约calloc  每次共计大小为5K*16bits,( B* N7 \) y, Y- h# [$ S
而默认配置才0x4000、需要改大。
% T$ ~/ t6 E; \  H/ c/ l1 j& n3 o5 j: K- }2 v, i9 K5 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# g9 u* ]8 t% X7 p3 k! ^
Program.heap = 0;
0 J( v, \! Z% _0 [! TProgram.argSize = 100;  /* minimum size */
1 \" n' t, L5 A2 a0 k% nProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-12 15:17 , Processed in 0.041297 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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