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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 \0 K# o- a3 j- `
- A5 @: ?, t; R0 o; @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 F9 r+ S$ t1 W4 s5 x

/ }7 l% g8 \& ~2 H  C2 c) d8 h其他程序段。。。。。7 |+ L& Z: j4 d
8 h# `$ s3 j; x& a: M
   free(x_d);
( W- M: X, f7 x! z" ]
2 D+ ?8 E- l- p3 h0 B0 i# s使用DSP侧单独调试功能,验证动态申请没有问题,' T- [2 v- m# z2 a) i: d5 [4 ]
4 F( n/ x4 z' z6 P: e. G) B$ k
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% g* D# b7 L) d$ d' d
0 M8 B1 I/ p% q( X7 P6 n

: S8 z/ K# T) u/ I7 v# x
9 Q5 S5 @) y- M6 z# a% _
. M" B2 e: A( w' h# K1 e7 {  m2 `0 x- H+ I2 |. F+ |1 z
5 R6 f/ T6 p' n9 S8 k
" }! I; y  _" @- t( m4 w) I7 k/ t
/ p0 C2 K) ~+ Q. i
8 |- \' t7 U- @0 d# F0 u$ {" S) o

7 i9 M$ O0 b7 ]4 ~% t0 I: `- y' M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, B8 [* Y/ T% b8 h" h2 i
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- c) u* l' c4 e3 W3 J2 A# i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" e' J% O# _7 U; z+ k" t

6 T1 j+ _9 G  n& f5 o2 `' m是不是需要在DSP.CFG中进行配置8 Z1 z7 r5 y- T! r5 B
我现在的配置为
/ g' w- G* O: L% {+ o) A! `8 c5 S/ P# V- e( a
/*
5 }: r4 r! _6 {, X1 r2 A' H: q  r, e *  ======== Operating System Configuration ========
9 |* {! D; v- ~: E */) [: Q& Q+ b9 Q; T0 ]3 V" v; E

- D) I" ]" u& u% d/ p5 X- Y6 H/ [/* no rts heap */2 ?: n8 e, \2 Y: y5 o2 {4 k$ ?
Program.heap = 0;" |, ?2 Q8 h* o3 r% R9 \1 N) o
Program.argSize = 100;  /* minimum size */9 Y: I- a- p0 w# H; c
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. j4 k0 `* V& x9 N& U* [% {  j/ m; F
/* create a default heap */  r' o0 J) P; z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 n0 C4 ^: U7 R/ Z7 ]
var heapMemParams = new HeapMem.Params();1 W  D) [6 F, Z5 y3 F2 R
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ k( |4 i9 R. @) w. p& M& `
0 u+ l. Z+ C* p' E" O
var Memory = xdc.useModule('xdc.runtime.Memory');2 R. m$ Q/ `4 \' Y, F! G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 j; T5 E7 `& G' ~  U
0 n/ p- r9 Y* E* B( Q) A/* configure System module */& m* x1 R) O- }" q, u" N
var SysMin = xdc.useModule('xdc.runtime.SysMin');7 x7 X  ]/ y% l, g% X
SysMin.bufSize = 0x1000;
. @) d) B2 G; @4 n* USysMin.flushAtExit = false;; ]: w& v3 |$ j0 b

+ g( x0 z) s/ o* q* L3 K/ uvar System = xdc.useModule('xdc.runtime.System');# }: Z% V! N: H8 ^( }: F
System.SupportProxy = SysMin;
: p. K' V' r  R5 d7 ^' [2 v/ u. ]0 L6 n7 o' P' A2 ^( y) A- A
/* configure SysBios to use the lower half of Timer 1 */, y* |, Q3 R! F+ H" u5 B$ c' [
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! J. J! j! q$ U1 u' {; Kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ T$ R( N' q6 ?, p, L- ^
Timer.timerSettings[1].master = true;* y' B1 y- j- I+ s( a: `
Timer.defaultHalf = Timer.Half_LOWER;
7 W5 p  u' d! ^; H  Q/ ^Clock.timerId = 1;, n: b6 a; s$ r/ A

0 E/ h7 U, {3 s+ ~. |- }" p
9 }2 k' ~; I8 i/*# a6 u6 q% V# j9 D" k
*  ======== Miscellaneous Configuration ========/ t+ ]1 p7 \9 q6 [
*/
9 x" _) Y2 q, m. d# J, @5 K" i
# Q; s: ]' F8 c5 W9 C) R/ m# k6 v/* set default diags mask */
2 [3 l+ o) k" ~1 w% I$ vvar Diags = xdc.useModule('xdc.runtime.Diags');  a" U+ [2 b2 H0 h1 I5 L
var Defaults = xdc.useModule('xdc.runtime.Defaults');
* J7 Q8 Y8 d: j  R  P
$ ^0 K/ k% l7 p' ]$ O. Z' ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- G3 [4 O& g; Y" z# C5 `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! X5 ^. I; ?% I8 O! S. oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 e& [& l9 S7 e% s2 G+ G% H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- P" F) G: r& h0 I; IDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: ^7 e# K9 x1 r2 D+ fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 g+ G; Y; X9 h; N. O7 R; Y1 K0 EDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  ]* k% i! x! L! j) F  L
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 m6 W9 [3 a8 r: j0 Z$ M7 I2 tDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 t4 a- G* ?# ~+ M9 J6 z/ D9 XDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' ^& U6 i  V! U: o+ Y* Q' B9 e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  X7 X- b' C" A+ dDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) H# b. Y# |9 A6 D! L7 s% C6 \Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% E' a! V- L( v7 C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& U7 b) @0 `- x$ N3 u$ X# B, E
( ^3 |+ r8 a! e& V% O
/* override diags mask for selected modules */
4 Z" H5 X! P/ N. Rxdc.useModule('xdc.runtime.Main');: R' [, w% H- u0 D3 X3 J" L: @
Diags.setMaskMeta(
7 j- Z$ b, ~$ S+ f4 m& y/ f: s; y    "xdc.runtime.Main",
. c- w* i1 f  \' u8 w! Y$ v$ |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 @  V' b- L  j% O    Diags.RUNTIME_ON$ n! R! X; x7 D, `! N
);
" @2 y7 N# C0 b/ E, P* q+ |
& ?( C7 n3 [9 @& Fvar Registry = xdc.useModule('xdc.runtime.Registry');8 h# u9 u( r4 C9 s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  I4 e  H7 g8 U3 ^  x$ z3 uRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 k3 t) i) m; y! S# y3 b8 ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 y4 O- d, b3 D+ Z7 x" h. o& LRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;) }* }+ t7 J+ |
8 `5 h5 l7 |& T6 _2 s
/* create a logger instance */, N: S) S: `4 _5 N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ v9 U( T3 b5 l  mvar loggerBufP = new LoggerBuf.Params();
8 S( Z5 e& r1 }; B! IloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( ^6 Y1 o. N- x- r
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 K) n! _, ~# W' H, c8 a8 j  R9 Y
3 C- h# k% g5 m1 O! o6 Y5 Vvar appLogger = LoggerBuf.create(loggerBufP);
) @  B7 p" }# [& BappLogger.instance.name = "AppLog_Core1";: X! @9 `9 D5 R' _! v
Defaults.common$.logger = appLogger;
8 {. G9 C9 U: q" F' \( d9 L5 V0 ]Memory.defaultHeapSize = 0x8192;    + K0 V4 z8 g7 p  u
Idle.idleFxns[0] = "&LEDStatus";3 a4 s( t/ F8 {* D: G0 A
Cache.initSize.l2Size = Cache.L2Size_32K;; n' ^' Y( b1 L

5 r( z6 D( l# _# J  L
回复 支持 反对

使用道具 举报

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 */  p' m  |9 q" j# E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- x! a+ Y$ N+ u% @; j
var heapMemParams = new HeapMem.Params();& Y/ n9 O4 e9 C% ]% [! ]
heapMemParams.size = 0x4000;
# i- o& ]2 D; E: i8 X" g
8 M& W* s, q( X+ [1 Rvar Memory = xdc.useModule('xdc.runtime.Memory');
# S/ C2 H: B" C4 G) L" K8 q4 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ D3 {5 \9 k# u  r$ m' h
6 Y( n1 m2 w( S7 u% B! w, Q) w我大约calloc  每次共计大小为5K*16bits,- A, z- B6 G9 C& D
而默认配置才0x4000、需要改大。
% O; j3 _+ O& @5 [- _* n
+ z) i! m8 k5 `5 k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 J. r, f6 u4 ?$ s: |. {8 d
Program.heap = 0;
! U( {' @( c; ?7 ~- q3 z9 @2 ^2 wProgram.argSize = 100;  /* minimum size */, o9 k  c2 L. |
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 14:10 , Processed in 0.046377 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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