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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- Y% |! Y( G6 q' S: C1 Q. }
7 B( B& h/ X# r+ B5 F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& M: Y, _' S: u$ w
" {. u, f( D, k  {  A其他程序段。。。。。9 j' r7 H3 R! [
, v  r5 Z1 _, d/ p, Y$ V1 t
   free(x_d);0 B& w# _$ S. E

7 f0 K; B: H/ \: p使用DSP侧单独调试功能,验证动态申请没有问题,* N5 b5 X, z% Z! E; m( z$ }
$ X+ b) K' o. k. K) a5 }" k6 }
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 B" a% p# a- E* Q( e2 f. {
% j& b! k: z. w0 z6 Q& O

8 t) ^- b) }5 s/ C
8 ^" o; O$ Y5 k8 A) w; b' D; }7 M9 R' B9 ?

4 T: p' p( L- n3 `0 \. e, _8 @6 m' E6 g* `' Z% C

0 s; k- y! {# U$ i9 v  Y* k9 k5 x( l. e) p) y' F
$ Y0 U* V& r2 W( E/ K
* W5 R; M0 R* y6 O1 l0 z" a3 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 U" n9 Z  y/ u% |
Program.heap = 0;
* ~4 ~9 C% H7 ^& B, @- x1 JProgram.argSize = 100;  /* minimum size */
# O' I: x; z- M/ KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */! y$ a' ^+ e7 m( K8 ?5 \4 p# D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 ^7 s$ i- G- Ovar heapMemParams = new HeapMem.Params();6 U* r1 y- k3 ~4 }, G7 p! j5 [
heapMemParams.size = 0x4000;6 s! m2 L' \: s4 @* p2 R4 H" j
4 T" J( s8 s: j: r
var Memory = xdc.useModule('xdc.runtime.Memory');  p: @" u" s- B! q) W6 M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 b% J0 {. ~/ X" G; i, K5 x% ^
我大约calloc  每次共计大小为5K*16bits,( u$ H5 O$ b( s; G) o
而默认配置才0x4000、需要改大。
' A7 ], w) w; N
# m" L& ?" Z& j4 A  j: F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& r. w4 d) }* R. F  y$ e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: _4 ]; O* e) k& k% ^& d$ v9 p
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 q6 d0 `3 e3 L! N
8 p. m3 ]/ |1 u! y, U5 z! h5 F
是不是需要在DSP.CFG中进行配置- T8 p9 \7 f& a) w! y4 w" C+ `
我现在的配置为
! T2 g% P4 f9 q6 S3 W: @9 Y
5 [& M/ z9 x0 t  s& O/*7 ?( u, D- P" j( `  T
*  ======== Operating System Configuration ========
" s2 c, b: g1 {/ N */
9 J4 t* L& y/ P- g. v% _5 _$ s' R- M1 e+ Z, F$ ?# G  @
/* no rts heap */: l$ ?/ u2 U6 l( r
Program.heap = 0;
" U$ y, X6 c4 ^Program.argSize = 100;  /* minimum size */
- i3 L% H$ a( B/ Y* L% RProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, `) O$ W& Y$ _0 t: R2 c! o
5 v; Y- @$ ~- Y, u
/* create a default heap */- b/ x! ^0 ~& R2 v6 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 Y, f% q. P* Q8 g: ovar heapMemParams = new HeapMem.Params();- M& |2 f; r+ ~$ \6 m
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 k) J. V) I, p) P0 I& [( o
6 ]8 B- m  y# Y" B) ?
var Memory = xdc.useModule('xdc.runtime.Memory');+ ]+ S) F* N" _. W$ [8 ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* F( s# Q+ @: c% M/ d) o9 c, ]
- i1 W7 T9 V8 g  d7 x$ i/* configure System module */
9 ~2 ^, P7 w1 Uvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( t- M' i  r" w. SSysMin.bufSize = 0x1000;6 a7 \9 ?1 K1 c& L7 [# I/ G1 W
SysMin.flushAtExit = false;
7 V  S; b$ ]# Y
$ F1 T2 J8 s% evar System = xdc.useModule('xdc.runtime.System');
( `& `  n% d5 j8 q! m9 k" F# {, KSystem.SupportProxy = SysMin;
% Q/ Q4 w& ^! ]; h: X
( d" K" o5 E5 \# S6 L$ L/* configure SysBios to use the lower half of Timer 1 */7 G* o! h1 F9 A% K( m, R3 O0 a
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" l! `. v# }# I
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 w( c( W* P# w2 [0 [
Timer.timerSettings[1].master = true;, S' U) R, }" N2 @* h
Timer.defaultHalf = Timer.Half_LOWER;/ @: @% M6 k# Q, x- t( d  p; d+ s: Z
Clock.timerId = 1;  l( S/ l7 Q! a9 ], z

- W6 y. N8 N; ?& Y3 X: f* r, ]
% O$ e6 ~  M' k# K9 D! h) }+ z/*5 ^/ s3 a, \' b* V6 E8 k
*  ======== Miscellaneous Configuration ========$ f" Z  x! \. _6 f
*/) Y) ^; b4 T' x2 ]9 ]
& o  b* ]* s2 M; I0 d/ r4 `8 G0 m
/* set default diags mask */9 c7 C# Q; n) _
var Diags = xdc.useModule('xdc.runtime.Diags');" s. r5 Q4 S% F% O
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 B1 T% T( {+ q2 m6 K
1 h3 O- ~& e' V+ q/ h" K! z+ N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ b2 g, C5 A6 C/ |8 Q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 C2 s2 S5 @5 I  }7 @: mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 c; F6 S" h. y: \! f" s! ]! r9 xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! d4 [" o$ _1 y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 y5 n/ ]0 n, _+ ~+ e) [
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 I$ {+ f! P' }
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ N+ Z* {4 e, z: hDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. z4 I9 ?# C6 ?+ @* W3 |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 _( o: a& b- H0 p* ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 b' U" `0 N: l' O3 g3 G
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ W9 k' ^7 Z& r7 T
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 R& l1 ]! n; C. W( `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( d2 t  X" Y5 O4 W  L" w: ]0 o) XDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) ~8 l0 S1 K% K- S1 Z+ ^" f' X% s
0 L( H* n. s5 F+ W/* override diags mask for selected modules */
. J2 q; G. {5 N- v, p* y, e# s( ?xdc.useModule('xdc.runtime.Main');# C. K+ C9 N: j
Diags.setMaskMeta(% m! J% i# L0 A
    "xdc.runtime.Main",4 x' N" X# o" x7 v  `, [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. I, B6 ?" r  ~5 ~: |. ]    Diags.RUNTIME_ON
3 y" b  W& w! Z);7 Q& F2 s. Z+ Q
* a! V; X: L% m3 l+ P9 i) O; G  s# ^
var Registry = xdc.useModule('xdc.runtime.Registry');
( D' W" W0 u: ]8 v$ l0 ?1 P4 LRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; @3 G% P" z3 u: E8 }3 Y6 x8 o  ^
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 g* L, L$ E/ A: u* Y; c' ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* d% h- |3 I+ ^/ L" G4 K
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: U( H  K6 N) H$ x# g5 Z
, k3 A$ a, q# R- W% u, _
/* create a logger instance */1 G* W2 {7 @, o( C% N0 @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 C' [% `4 X5 X9 Svar loggerBufP = new LoggerBuf.Params();
- c4 G' Z5 |/ }$ A2 x: SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 O# W: Y0 s0 F/ E' X1 hloggerBufP.bufType = LoggerBuf.BufType_FIXED;% v2 }, Z3 X( t1 X  C; u

4 ]$ S9 O3 _- i  K" cvar appLogger = LoggerBuf.create(loggerBufP);
, p( O" T# |" g( y. W' g. J' {! }appLogger.instance.name = "AppLog_Core1";2 [% X, u" ]. c) i8 L, T3 x9 m
Defaults.common$.logger = appLogger;
0 n( S( j, H. Q8 ?+ BMemory.defaultHeapSize = 0x8192;   
! `" Q4 z. y; M3 r) a2 W% QIdle.idleFxns[0] = "&LEDStatus";; I8 W8 ~$ g- A) k, R
Cache.initSize.l2Size = Cache.L2Size_32K;
3 K" S5 |* v8 P3 L1 L$ O! [% V
7 c4 P7 {  f, {4 [$ Y8 P2 k
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 05:07 , Processed in 0.045187 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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