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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 O! |1 j. E: p* P. s! x4 ?

& f0 R& W3 T% f) C0 ?8 f    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 c# ]' Q, d$ l( A1 m9 M$ ~- J; Y+ p& J! b6 u" d  e, v: ~
其他程序段。。。。。
0 `: [  f3 N. _6 O3 o0 s & O2 d; `/ h  A6 d
   free(x_d);3 t( \1 M/ G# M3 s: S
; c5 y6 `4 u' i9 J( P9 G  V
使用DSP侧单独调试功能,验证动态申请没有问题,
) l/ u* `+ [: o8 c1 i, _0 G# g- s: y
2 T# d% ^9 ?' u) W% I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) q4 A7 A2 e, X, @3 O

/ F! Z2 [. \$ _4 r0 H. F% f4 o. Y- K. e- u

: Y8 u1 d2 c0 B; V( n+ a, U2 N2 T) r2 w3 G
- l. x) D" B, k3 ]6 _/ D

4 Y+ i/ E1 @: R! z9 X/ b" T0 U. Z, h  X
9 Q9 s  h* P5 w& c, @/ y! N; I3 {
! c8 E3 r0 \$ k5 `8 K4 o& q

" f8 o* E' y7 n% E1 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 @. m2 k+ ]* }- q3 B( J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 l9 L; _) r. m' [& m
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 B9 q4 p+ \7 j

' X! w  |. R! H是不是需要在DSP.CFG中进行配置
) `/ Z) j+ T% I+ i5 d) ]我现在的配置为
6 R% i8 g6 b- ?
, E) `% P% P# {; ?1 o% o/*
9 D& K* c( T- \/ M* Z: ^/ l  G *  ======== Operating System Configuration ========
/ _9 V5 O0 a, G */6 C% [0 v' ~- d# b) Q% O  }
4 C5 `2 t/ Q4 y
/* no rts heap */
" U, V5 y; H+ Z0 yProgram.heap = 0;
  F+ o% v" z% D: ~5 L* ]0 F* M) k5 b' bProgram.argSize = 100;  /* minimum size */4 l8 L8 ^( y5 X9 _
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 |0 j9 A( n2 n  ^" \
9 \! L$ Y( N! t$ ?; k4 L) G
/* create a default heap */
+ y; P+ }1 I. r9 Q' K7 Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( t1 K6 z5 i( u
var heapMemParams = new HeapMem.Params();
% h5 {( m6 |) S5 E' Q. CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  ^& H$ M& D: }( F6 E: ^
2 \" }6 |5 l$ Z1 G0 K
var Memory = xdc.useModule('xdc.runtime.Memory');
% ~4 S/ i% y  ^. G+ F; }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  z. s, @1 J. A- A

  i4 Z: C. D' Y# A1 l& n0 m- e9 j/* configure System module */* q3 G# I. F" w2 B7 h  Z# B
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. k2 t' `+ m+ O2 E* x0 r  nSysMin.bufSize = 0x1000;
8 B+ B. f. |& N9 c/ h5 oSysMin.flushAtExit = false;+ }. I9 I, p7 m7 }$ y
) @6 ]  D. k. u& E  A
var System = xdc.useModule('xdc.runtime.System');
. U! _+ x: Z: M% |4 z$ P1 [System.SupportProxy = SysMin;
9 w1 f  h& U+ D
. A3 h& @" |) `' H3 x( `% ~- u/* configure SysBios to use the lower half of Timer 1 */  T/ r% [8 r* A" t& E: v9 s# V
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( ^" R4 N! X! P  e* F8 uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');  n: x6 I, J# \9 H
Timer.timerSettings[1].master = true;
  n. [7 r( V, y/ k) s% NTimer.defaultHalf = Timer.Half_LOWER;
) Q0 I. K: X' i. c! PClock.timerId = 1;
1 @! O' z* z+ N* n0 E) S2 G& K$ K7 Q( p" F% @0 t- T7 }" w; E

: H" l8 L7 Y7 s2 n% H4 p! T/*
3 ]) \) P( q) B+ N6 [( z$ x *  ======== Miscellaneous Configuration ========
( x1 T# M9 T+ h */
2 B8 L& V1 a$ L8 n1 m
& k2 z( r9 |6 a" o/* set default diags mask */
# L% |% [1 A9 |/ @+ j' }" D- o5 ]var Diags = xdc.useModule('xdc.runtime.Diags');
( P" a+ N% `% ]- D7 Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
! K- M) _5 L* f+ s. G$ A4 |
1 r5 k6 }5 T' k' L+ ]- [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' {9 J2 T6 X+ O: F3 y% t
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. k4 q# a# H+ H8 n
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  i9 J2 c/ v' n4 s# Y5 \* VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) P( ]+ E. j+ a7 |6 z8 H; V
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 I# C# n' `* {6 c7 J# jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ B+ T4 F; o  TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 E3 }* R, z) \; y! u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 n/ D0 L  M6 x" ~# H- \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# E7 ~6 B! r4 U# a/ a- T* v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 J! E) L: U$ [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& d' l0 c5 |, i& O$ _9 G
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' F4 }! h3 W2 X5 U; G& c# ?9 V' N# k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 _" G3 I; y4 R7 i$ {+ n' aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  |/ h" V+ @4 D. y# N' G' w1 l. x+ x" ^* m! ?4 Y
/* override diags mask for selected modules */
4 }/ ]) ~/ s: o, n; }8 \3 Fxdc.useModule('xdc.runtime.Main');& S& Y& g$ n% y1 y3 k8 Y
Diags.setMaskMeta(
9 w+ n3 F( C1 u) z    "xdc.runtime.Main",
( n9 V+ l5 ?/ a0 x- B    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 c8 H5 s) \- x% z    Diags.RUNTIME_ON
6 ]+ J: W" g6 b! U6 O7 z);
/ l8 P* n8 _3 @
( z: c; E/ s- m+ ^var Registry = xdc.useModule('xdc.runtime.Registry');
; T5 ^' ~7 k. t. IRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 @: D; @, z5 N. _# U4 v" M
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- g. U3 k* B4 k# a5 b: CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;; ]3 N# I; o) n! M: {9 [/ G$ M
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* q  F4 p& p/ F' `& |& L

. ]  Q  o% }; \/* create a logger instance */
" Z% O; s, k  ]" r- hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ ^2 ?( j/ p' a" v1 R) C
var loggerBufP = new LoggerBuf.Params();' J6 Y" a. \. O1 S4 ?* B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 [2 Y- S2 K& QloggerBufP.bufType = LoggerBuf.BufType_FIXED;( q* J' \: a" B2 @) C

; [' D3 q5 r4 O# e7 j4 r: l) _var appLogger = LoggerBuf.create(loggerBufP);
& u5 l# f7 |4 `! U0 K3 x' ]appLogger.instance.name = "AppLog_Core1";) G9 J/ x! |. Y( t9 k
Defaults.common$.logger = appLogger;
1 Q- N3 e+ S- E2 zMemory.defaultHeapSize = 0x8192;    5 M8 p) j( U6 Y4 P5 s
Idle.idleFxns[0] = "&LEDStatus";$ D3 a. @0 n# @( L# \) s
Cache.initSize.l2Size = Cache.L2Size_32K;" `0 S+ b% z# M) X
% T, V5 X. B) G
回复 支持 反对

使用道具 举报

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 */* `* `* t% D* T% d1 L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ `  Y4 J; T  {" w1 T7 Qvar heapMemParams = new HeapMem.Params();! j+ k( A8 z$ w8 A8 r
heapMemParams.size = 0x4000;0 n. J7 S! \8 B9 o- u! Q
# J& f% ]2 I6 N  h# B, N
var Memory = xdc.useModule('xdc.runtime.Memory');' l8 Y1 k5 }: x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 |: p% s$ p: n4 X, s1 w, \' |: Y8 F* u: H2 L
我大约calloc  每次共计大小为5K*16bits,2 K2 J0 M' x, R, K& w& g4 @" Y
而默认配置才0x4000、需要改大。
1 F: I; K9 ~6 i! X' T: R6 k; ?
: ~; S0 m+ j# ?( a# N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! U3 W- m) r2 q$ _" J6 P8 nProgram.heap = 0;
$ |( G9 P2 l2 [Program.argSize = 100;  /* minimum size */! o, b) l) B3 ~3 V+ a3 Z  l
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 06:42 , Processed in 0.041206 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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