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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) H& C' s+ l' `" L" w8 s+ T+ ?3 p" A. t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# K( V( u; r0 m& Q' D( f
; E) ?5 j+ O  k  s) @, F1 q
其他程序段。。。。。- f  \, C# k1 n7 D* F& c

& I% r4 e! i" s; k6 G1 \5 J$ Q   free(x_d);3 j0 {; G4 m( t4 g# E% |

. u$ n9 }, B, A使用DSP侧单独调试功能,验证动态申请没有问题,! s" y/ O9 l7 o( R7 @% n! y2 y* l6 w

4 I3 G4 R. g5 [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ b) i5 v  H8 g3 z  ]6 @% u0 ~! v9 R. Q

3 ^, J# G$ {4 @, Z* h( b4 i$ K4 L2 e, h; h: p9 a

8 @1 u* _/ C) h" ~( o. {" P/ [4 O$ u( ]/ N! }
* H7 a2 ]* f' l' E
5 g. S+ W) x* `* N3 \

9 |. e1 E8 \2 L# w; B$ u
3 e" I, }# @' g2 O% P' D: L3 ^+ O, K& R( ]1 b$ p- }8 V! X9 k: k

2 L4 c" @/ u$ [
分享到:  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 */7 `1 n! s$ i* P
Program.heap = 0;* `7 j$ W4 F' C
Program.argSize = 100;  /* minimum size */" b. q, s4 \/ G) X3 f( Q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
/ r9 l  w" @3 g$ h/ @/ N5 e" {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 o- t" i) N  e* y: r
var heapMemParams = new HeapMem.Params();% H9 c' S5 g$ D% V& ~
heapMemParams.size = 0x4000;
; |; N4 N" g9 x/ `- w" v
. w7 ~8 M) O8 Q% s: Mvar Memory = xdc.useModule('xdc.runtime.Memory');
5 t9 k9 i* S; z( k+ r4 iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. z6 }: A# e/ y8 D9 t6 `3 u% \# d

( u" a; E. B2 T$ L  w! |) G我大约calloc  每次共计大小为5K*16bits,* J; j& I/ S2 ?4 q1 d; t1 f
而默认配置才0x4000、需要改大。1 v3 b$ l3 A. |) B1 u1 {

- l( ^* l% v* c
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
  `7 E% H2 `, H$ H& L# g我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; ?  F, c  X" Q% }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& C) `4 O% C5 H8 y6 B& O' V

& Q% o$ N2 x' v( _0 ]  Y& D4 \- @是不是需要在DSP.CFG中进行配置% K: ^- S0 O# `) U) O
我现在的配置为
9 e! `9 C4 _' b8 ?/ z
, v. y$ y; j% p; d# {* v/*
, A9 r' F6 i9 J4 |+ b2 o( [( y$ Z *  ======== Operating System Configuration ========1 w9 c' M. \# A
*/& A7 z- S- c* U' R
% q! y) O- z' T
/* no rts heap */! r" }/ @$ P7 d0 _2 H
Program.heap = 0;5 o3 R& @3 m% c1 e. `% T" r% X
Program.argSize = 100;  /* minimum size */
3 t/ \4 l. d0 VProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( B. r* c+ F6 m, [& Z9 ~: u/ x* N# c
  `0 I$ `* r: D# i" C  B7 G- B! e
/* create a default heap */. e9 B" Q7 S) g. H% G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; t) G" x; @6 b/ Jvar heapMemParams = new HeapMem.Params();/ z6 s/ k8 k7 ?2 g3 d' ]2 g, r
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ u8 U; \& v0 B' C& _! g8 N9 x8 i- m
9 P* _( j6 d; ]
var Memory = xdc.useModule('xdc.runtime.Memory');) v7 o" f+ q/ V# U2 ]6 B3 i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) Q5 H8 N6 w8 A" N. e2 h6 f0 h2 o) \8 P/ ?& o
/* configure System module */
9 w& W" k5 X0 `. `" R. O/ wvar SysMin = xdc.useModule('xdc.runtime.SysMin');* z. z' q8 z) N" i1 h
SysMin.bufSize = 0x1000;
9 \5 c  W8 u$ |7 QSysMin.flushAtExit = false;# ^7 [  m9 C5 g- X0 I  x$ U
/ t# q" N; _! k
var System = xdc.useModule('xdc.runtime.System');
9 a- E  ^5 a, @# L* C% V3 U+ x5 l. fSystem.SupportProxy = SysMin;
! V. @$ v- y6 G/ _6 o5 {7 m; i& ?2 V, y+ u
/* configure SysBios to use the lower half of Timer 1 */
( V5 B0 {5 j/ D8 v, W) avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( E6 M2 L. L4 E# b* o/ k5 Z6 a$ M8 a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" X; |# H7 K; C6 H; S
Timer.timerSettings[1].master = true;* C* a4 J0 ^( ?$ }
Timer.defaultHalf = Timer.Half_LOWER;" F3 X5 o& @9 ?2 ]
Clock.timerId = 1;
4 S3 |3 f) `+ {# B$ m7 i
0 ?8 n2 @! E! z2 U6 W" Y6 _0 m& s9 K5 i9 r& B
/*' E! i* }4 K  _# ~- c
*  ======== Miscellaneous Configuration ========
3 F4 ^- S8 P* U% C+ D */
% Z! g, w1 g# t5 q/ _! z4 J: ]+ J5 Q4 t9 c/ y% O) F# G
/* set default diags mask */
6 \5 o0 z; a, X& \8 o2 \var Diags = xdc.useModule('xdc.runtime.Diags');! T. a( ]9 |/ S
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 x. M6 I- Q3 E5 l
7 p& U, h1 A3 x& M$ Q7 f4 T" L
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. u- e2 T2 }5 N  ~Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 ~& i/ Z8 X& l& I/ Z6 FDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 q. \; _" {/ ODefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 x$ J  Q( s3 y0 g  T: G" ~
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 _7 t- k. Q7 [% J; ^: ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  b! G' P8 ^7 D0 l8 i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 ^1 I5 ?9 P1 j6 k, b5 g5 qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% A9 M' k, a8 H5 p7 v) \/ R
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 ~4 ?4 A2 L  {# X0 U' eDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& K0 k! j5 H: JDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 C2 {1 v2 w2 A5 f" S( d3 kDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& z8 J- O2 t- H, D9 O) O8 E9 ~* ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ S8 B5 S6 t6 q' x( m$ hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 e: T) g& M7 U% G  W+ ]/ m4 \

) L2 ]' K$ n6 c5 A1 k; F) V, f6 i/* override diags mask for selected modules */' E2 ]7 I7 w( Q
xdc.useModule('xdc.runtime.Main');
, B2 E( ?- Q8 ~& d5 [, ^  v1 hDiags.setMaskMeta(, _5 y+ t1 ~5 ^) e
    "xdc.runtime.Main",0 i+ w2 t7 \2 c( v
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ A2 E& e" @; }. p% X* R, `+ D$ b    Diags.RUNTIME_ON
/ J4 x9 Y( [5 k( ~5 b/ C6 B- Q8 V9 });! `9 u0 h* ~2 F8 |  O
' w! x# ^% b3 ^# V; R( W1 J
var Registry = xdc.useModule('xdc.runtime.Registry');
: `  m. h/ E3 E. c2 ^1 u) S- h7 CRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  s; M$ F5 T% j' x8 \Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, ^+ J# f4 u+ C  w; pRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" U8 l8 w# k, x" @- V# [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- U7 }! c: ^8 f
2 D0 P, k  ]' p1 ?: n- p# n7 b# ]/* create a logger instance */( ]' r& m# d) ~4 a9 t2 z( b3 ~/ J0 \- ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 c- q7 V7 D9 ]! d9 h/ Svar loggerBufP = new LoggerBuf.Params();2 [- O4 c4 F( b* U, ?
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ i9 k9 K5 @8 q, a- _2 f4 B# X, h) QloggerBufP.bufType = LoggerBuf.BufType_FIXED;8 l5 Y- W" ?, Z6 d  E1 k% A/ y

8 I4 Z  ^% J: g2 d* D) Gvar appLogger = LoggerBuf.create(loggerBufP);; q; n# H1 e% ~' g
appLogger.instance.name = "AppLog_Core1";
0 G4 X- S& Y9 q9 ]  b" H( r2 rDefaults.common$.logger = appLogger;% @( T4 M. W9 v6 S
Memory.defaultHeapSize = 0x8192;    ! z4 m) W8 J. U9 K. |, S5 C
Idle.idleFxns[0] = "&LEDStatus";& H6 v/ p1 p! Q5 ?, j' `
Cache.initSize.l2Size = Cache.L2Size_32K;
/ H$ w& G1 z4 J" {* e8 W# }
" g# `5 ^2 v3 N6 }, X
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 16:19 , Processed in 0.042818 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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