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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ Q, O# u8 \$ n7 V& w7 S: {1 N! E9 q" w* k6 o, T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. m/ o5 t$ t( }9 D- j; W& g6 m) C8 `, ~, @* j% J8 Q1 p
其他程序段。。。。。
3 x" j2 ?9 v: i% c2 Q0 T6 z
! U6 x( P" d3 q) V: D+ R   free(x_d);$ I! q; e4 _9 l- r5 X( _* E- j, O
( U) a( a' |8 O3 K( Q2 L+ J
使用DSP侧单独调试功能,验证动态申请没有问题,
6 U( y# q* Z+ w( |, s4 _: R% {0 k6 ^9 X1 f1 ^) }
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" x$ U% r4 E6 A0 ~0 z% J9 r+ P
+ S" i. ?3 C0 i5 X8 j
. p- N4 K' @, l( W# O

& {8 C6 u3 [. W- V1 X4 S/ B, H% s- L7 g; Y6 v1 Z- \

. u$ g0 c* O% U! J: B3 Z0 s; J% \7 m) T, ]  U. l7 b$ D
4 j+ z1 u) L- i0 `1 T3 q

) X7 _; m$ C0 y2 ~+ W% g/ S# Q, G7 Z3 M5 R. T: T+ c4 U7 I5 n7 D

- M/ T& \& V) B5 D: M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 ?  k% C  n/ s# f. P
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% }, a. f! X8 g
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" u1 x6 \* p& e

# ^  y  Q1 u, t( s是不是需要在DSP.CFG中进行配置5 G5 f$ v$ I. W$ Y
我现在的配置为
. l: e. W/ c8 w0 e- w
$ u( a4 t3 O. H$ T7 f  u/*1 V0 F! F  t8 ~4 M/ p
*  ======== Operating System Configuration ========
2 R' e' Z. ~1 y6 t$ F/ G/ o; p */
; |1 T0 H7 E! F  A2 l3 {% ?, `- F  C( J6 @- Q' H
/* no rts heap */! X* g+ z$ ?3 r9 {
Program.heap = 0;
$ Q6 M$ @2 |. x. j8 u1 aProgram.argSize = 100;  /* minimum size */4 G6 T, j  a" i
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# x4 J% Y; z$ N- q0 D0 D; o% [9 L" z' j+ B" D9 d" `
/* create a default heap */
# H: j1 I. z6 Q) v5 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" i  G3 w+ i  F
var heapMemParams = new HeapMem.Params();5 q. b6 w0 m0 M5 i$ Z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) S- w( |' P7 X; E! S& {" d. K  A; s6 G
var Memory = xdc.useModule('xdc.runtime.Memory');. d) m+ U, v9 w' G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( n) V- g" X# J+ L" q; u5 C0 R: s% D* Q" R% a* e
/* configure System module */% e3 |3 ?' j& ~5 x5 @
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  b- e" f. }5 \6 U% O& BSysMin.bufSize = 0x1000;
7 R; }7 m' V1 t. R4 {1 O8 n1 rSysMin.flushAtExit = false;
3 x3 P9 R4 s8 t1 w3 Y0 j$ n7 y& ^3 ], c- i
var System = xdc.useModule('xdc.runtime.System');
& [' Z5 G. p' J" t% t  S- f6 OSystem.SupportProxy = SysMin;
3 k  M, Z6 C/ a" T- c: x
' M+ q1 H' m2 L/* configure SysBios to use the lower half of Timer 1 */0 A* b2 o" R! H& H) h( F" B2 l( B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 L. \! g$ s& `+ G- b5 ^/ P3 X  avar Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 z8 T/ k* a( @  tTimer.timerSettings[1].master = true;
; L$ L- F& T- |9 a" ~. ]Timer.defaultHalf = Timer.Half_LOWER;
, |: N: h. f6 n' F6 C+ x9 i2 o$ bClock.timerId = 1;6 Q- ]+ @! @/ y* I( s8 x
6 Q2 B' p+ t: Z+ z/ l

2 d! z; P. P; R/*
3 Q' {, F6 j! z' _+ M9 r *  ======== Miscellaneous Configuration ========8 q* H& s4 X2 q! p9 m& S
*/. w- }$ b) [( X$ R
5 o% h5 r# t& M( L* H' M$ S
/* set default diags mask */8 [: r7 y9 E- B7 b0 R, F& {
var Diags = xdc.useModule('xdc.runtime.Diags');& e2 w8 t; K0 |9 q. i
var Defaults = xdc.useModule('xdc.runtime.Defaults');, C/ C$ F  X% S) @) K3 K3 Z
' d- o( D8 P9 `+ e" c7 S. u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* q  ]1 t! m( Z# Z/ h9 l) X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ G/ ^, R; x# o, x! M4 I+ R0 k$ }$ jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, n  X+ i1 }& _* m3 U' k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 M7 S  g/ W  Z# d' Y; A: n
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 h7 j; E: F  C- Q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: G3 d  c3 p' a$ [; s  X3 V
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ {  F0 E7 G6 a9 EDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 a. f2 g4 ~2 |: j' vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 B1 B  p8 A0 f7 G4 H; fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 p8 E  l; ]: C; u8 N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ V$ O9 I$ h; A  B+ A& Q9 R! N8 T- Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" Q- N0 ~4 [4 {+ F# i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 ^& B/ w% G, z* `  |Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 H1 c$ B4 E" J2 e- E% j; `
9 ?: M  D2 O7 Q7 S
/* override diags mask for selected modules */
7 `( t" Y9 A3 N1 O% Dxdc.useModule('xdc.runtime.Main');
" x  V, q+ C: R9 Y( v; Q( lDiags.setMaskMeta(
8 s2 R# i& b% H: V( g, v    "xdc.runtime.Main",. f/ ?$ o$ H$ q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" U1 p; E# ?8 b4 F) a" R9 w" F3 W$ t% l    Diags.RUNTIME_ON, D' q( Z6 A# g- R! o# f
);
+ O- e( l: Y& `- X9 @' d
1 H- s) e4 X- k% q9 ^$ g" z$ Hvar Registry = xdc.useModule('xdc.runtime.Registry');% ~" L+ [; [! ~/ q) a( Q' k8 d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 T; N2 }: ^1 t+ ~* n% w
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: b- i9 U8 r1 ?3 iRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ X3 p+ p* j" z- T! P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ w- E. `# R4 P) z

6 l5 w# x  Y4 e  e: \/* create a logger instance */
* B& p) d5 J3 Y( _; ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 m- Q2 J, R4 V- K  g8 {& rvar loggerBufP = new LoggerBuf.Params();( P2 e/ Z! F& I; t) G) R
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  }. D+ d! }1 C  m, u' SloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 m% M: `: \. k( u+ j1 k- e  i, w8 r) o% U0 N
var appLogger = LoggerBuf.create(loggerBufP);
9 H2 m9 h* L4 F+ f. h; Z2 Z- J: @appLogger.instance.name = "AppLog_Core1";. a% u) E- Y* F# j# E
Defaults.common$.logger = appLogger;
/ ~4 c* l- Z3 m8 w1 z5 WMemory.defaultHeapSize = 0x8192;    . A) C# p/ ~3 G/ L
Idle.idleFxns[0] = "&LEDStatus";1 Q3 `& c2 L8 a
Cache.initSize.l2Size = Cache.L2Size_32K;* C: U' a: b! N- l* N5 g1 D2 L
2 c" v1 Q. x6 _1 `9 F
回复 支持 反对

使用道具 举报

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 */
! c# w9 ?* \" `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 S" r5 `* G1 V6 O0 K1 D& }var heapMemParams = new HeapMem.Params();. H1 e3 O! n1 w/ l# z- A1 K, A% O  G
heapMemParams.size = 0x4000;
- B+ D/ F8 h) ?) d+ A, x
) w  G1 \  F# o4 E; m/ qvar Memory = xdc.useModule('xdc.runtime.Memory');7 i: l3 W+ ~  }* \( T6 W! @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  X" `. H6 `0 \( l, {0 i9 d; |

' @9 R3 S8 \6 J! o, c8 m8 C我大约calloc  每次共计大小为5K*16bits,. E$ t' s+ o$ F6 z! j2 r
而默认配置才0x4000、需要改大。* N; {3 G& v0 O8 ~" r& {, \
/ ~2 d8 E; F( @* X$ r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, \% ]* B$ _1 u1 QProgram.heap = 0;
0 {& E. M/ Z8 W9 u  eProgram.argSize = 100;  /* minimum size */
& t/ A1 d5 w( q" aProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 03:57 , Processed in 0.042432 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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