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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  B. G7 [# \7 A- I/ g8 U0 }" S7 v' T( @" f. b7 w$ l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' [; |+ n5 B# t5 K: R- X! f
" m" w5 S2 R% x0 S( G9 z% [
其他程序段。。。。。
5 C& Z' j% N( g. X5 `$ q 8 ]$ M6 {4 n5 _( d, m7 e
   free(x_d);8 e2 k: s$ @! D* Y; ^

; ~6 E% w# z( [* [4 D1 Q, C使用DSP侧单独调试功能,验证动态申请没有问题,
  U* P) X- ^; |- ?  }( h! o, x" ]5 [7 {; z/ W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( V0 x  H8 ]) H

% l, h1 _( I  B9 m0 c; f+ m
9 M  `$ j. Y4 N. E9 I3 x- h* `& ^: q7 R5 G, w) {0 Z5 k

. r( r, l- Z' w# M- w2 ^, ?( U0 L" _  V' T

0 ?8 q4 s) a6 B& z
, \" j7 M- X3 {  P  m
. K- U' @3 s" Z$ D; m* f/ _5 v- i8 d8 \" g8 }* m

+ ^9 j) I6 d$ o, L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" D8 l2 r/ L( ?2 z/ n# v
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# j1 K8 C) J6 t+ e4 s4 Y! y  f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, V8 E) Y8 l2 u8 s8 u: j

/ t  L8 z- j7 ?7 V1 P$ E4 G1 t是不是需要在DSP.CFG中进行配置
. Q4 j3 ~1 B, D; W我现在的配置为
! Z4 N) B* B8 `' m5 c) t6 w0 ^* J) H5 ]0 O; W+ q7 v
/*
5 x3 g2 k+ t5 t! c& c% B$ e, g *  ======== Operating System Configuration ========
7 f' L8 j$ n6 `; b6 I) D5 C */" x9 Y% B4 r/ ~$ t& M) e  x) T

6 D( w& {# {+ n! ]/* no rts heap */
1 h, H& ]5 d; i5 UProgram.heap = 0;
$ o; t* H& s, ^, T7 J. H# I; TProgram.argSize = 100;  /* minimum size */' i3 o" V3 f5 V9 y: k9 b2 o
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! v9 h) Z+ O# y2 ^9 S: ~2 K
0 X7 y9 Z) e$ V8 ?1 x
/* create a default heap */
! q" l* m  _! Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 ], R$ B* X2 |+ ~) d' D6 @
var heapMemParams = new HeapMem.Params();
  P4 t) m: ]. A2 x, TheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. u0 B' v: W( A5 v% m

* v' v, t6 Z! T1 A  M) s: X
var Memory = xdc.useModule('xdc.runtime.Memory');
& e$ E8 D/ M7 [# ?5 h) vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: H( |" x0 j8 ^# V3 f. z% D: T
0 o' ]+ z0 q! ~2 @( P
/* configure System module */- h5 Z0 |; ^* f% ?; x  r
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 U; b' y/ [) z  f3 M
SysMin.bufSize = 0x1000;
% |& K4 J% [, L" C1 C. E/ M6 d2 tSysMin.flushAtExit = false;
$ n0 M) @+ [/ _" n
$ P$ x0 V1 P' u5 b3 W) }4 Ovar System = xdc.useModule('xdc.runtime.System');
" G% h3 m# ^* j# @System.SupportProxy = SysMin;
1 w7 h7 \' g  |- i
, F) M. ^, r; i4 ^" b/* configure SysBios to use the lower half of Timer 1 */
0 S" a( g9 q8 ~/ D' j) p1 Dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& R  _; n, j" L$ o7 z* `
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' Y/ g2 i& U# b  k/ FTimer.timerSettings[1].master = true;! w% C, L! {4 i3 E
Timer.defaultHalf = Timer.Half_LOWER;
0 F* E% h. j  j3 ]Clock.timerId = 1;
* \: t2 o0 D9 N- g
- q/ S. |$ t, H* k/ K/ V2 U% B0 c. L$ [! ~. I# ]# S, C9 I% R9 K
/*" y! {1 g- U# H
*  ======== Miscellaneous Configuration ========
1 b9 L& u7 G( `0 k3 X */
0 }2 |3 [/ X' ^
+ r+ Q  R  J) L7 ?7 W0 v, I% {$ b! p/* set default diags mask */# Z. N  m8 J& c1 T, R1 W
var Diags = xdc.useModule('xdc.runtime.Diags');" v' B7 W, Q: g  u- z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
: m7 N' Z* u. |5 F6 y, I3 G, _( E$ b; Q4 K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, w! }6 \" l2 i! w2 c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) z( A0 r# Z; U3 y" u2 r/ Z/ {Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* n* _3 {: N8 m, h0 F; QDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. ?# i8 R9 z; c, NDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( a$ }# f! k" uDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! `/ e) h. x' n& p5 @" B/ KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* P, f0 r6 ?. {$ I+ X. y' A  ?) cDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 \8 E* T* ~7 r- K) l4 J& _1 v0 Z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 q' a' k- k: e' w% L7 B
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& h- _3 l$ j$ `- i7 [! JDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' ]7 O& f; y0 K6 Z7 V& X' A! \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 q( o  Q  l9 u/ v
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 q) o/ K. j) ?5 S! F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ q+ _% _# `9 j* O: V) a! ]$ d1 M# q6 Z* ?. N/ K
/* override diags mask for selected modules */" [! T0 D* a. r1 k! R4 D
xdc.useModule('xdc.runtime.Main');3 [% K/ r! E0 `6 O8 T" }
Diags.setMaskMeta(
7 i- R. L& P6 U5 B% g2 _    "xdc.runtime.Main",- i! @1 Y  D, a! K$ J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" J2 J. H' O+ O7 D) D  G2 B; ?    Diags.RUNTIME_ON; h: l# q; ]1 ?/ x7 z% j
);
8 }8 {: L: R# ?. a$ ~+ c
$ E) _( ], N6 z- ^5 H5 H# evar Registry = xdc.useModule('xdc.runtime.Registry');
& k3 w# J+ D# i# t; |) B" vRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 ]2 f0 ]9 L) ?$ ~5 C& m1 q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* h. Q- U3 X9 s2 c* ~9 h1 l0 Q4 ]  ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;( a& R+ F  Q4 ^* K) ~4 t7 n+ {
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 g* R, `& Y0 A! B2 y5 G# A" W6 N
5 Z" J0 @( n7 c' X3 f" ~/* create a logger instance */8 _; x$ ?+ K5 w! f
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- n. d% T, D1 c3 Q/ Rvar loggerBufP = new LoggerBuf.Params();; D9 L, j9 Y1 K" E1 w! Y' W+ K( a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 c$ G6 d& d* N& {$ r
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; p* L& I# P" ]1 C2 Y9 C% Y
6 f  m# T0 o+ pvar appLogger = LoggerBuf.create(loggerBufP);- `4 P/ G2 q7 @9 Z" a/ D  @" s
appLogger.instance.name = "AppLog_Core1";
6 {: J; T8 q4 s  jDefaults.common$.logger = appLogger;
4 D7 e& Q1 |0 Y4 IMemory.defaultHeapSize = 0x8192;   
. U7 T7 E3 P! _1 f$ a) kIdle.idleFxns[0] = "&LEDStatus";
& G3 [2 w( l2 K$ \$ c: fCache.initSize.l2Size = Cache.L2Size_32K;  q1 o, W0 Z, t" ~% u

7 Y. O" e6 g" a" w; J
回复 支持 反对

使用道具 举报

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 */, @+ U- l$ H' r+ ~& r) @9 \0 U; o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- S1 i* Y( D! x- p, q3 X
var heapMemParams = new HeapMem.Params();" b7 e# Q8 y: m% U$ i
heapMemParams.size = 0x4000;
- c6 g' E7 Z, C* i, M
7 V9 ~8 V. B( I5 W. r$ s: Dvar Memory = xdc.useModule('xdc.runtime.Memory');! Y& k& `$ m; [2 l* r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( T( g! x, a* n7 M( }) \8 v( `

+ Y7 {6 [' e* P$ }& W7 M  m. O我大约calloc  每次共计大小为5K*16bits,
8 Q9 t! t/ A9 O7 d3 r0 |7 o而默认配置才0x4000、需要改大。0 S3 K, H1 ^! f  P7 t
% u( ^+ D7 }2 @  z( N) ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& M" ~- a$ h9 G4 R* l
Program.heap = 0;
" S$ @" g6 D% VProgram.argSize = 100;  /* minimum size */
6 g7 s" ^2 A5 D: ^: {$ EProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-8 02:05 , Processed in 0.088877 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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