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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- X6 v% V# X* I9 H8 `
: H+ \8 y( B3 P' P
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# O; `! X( @7 {! F2 f  S; ~: E/ s3 L8 w$ R+ `: ^
其他程序段。。。。。
) N+ G+ ?4 x& D# `8 I. e5 U: S
7 v. u# P( J% {0 K9 h   free(x_d);2 q- m( J: U) Q' p

+ @6 t  {- y6 f& W使用DSP侧单独调试功能,验证动态申请没有问题,  ?+ [6 F8 E# J0 H6 Y: Z

7 |- H  h, l8 u5 |( x8 n但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 m& W2 A# k! d1 N9 l

- S/ K8 ~: n+ \8 x% i- k9 `9 @7 B& I" F- P7 B

: q# @# c1 w5 W9 L3 b) A  b! G1 X+ C+ A/ y
3 d9 ?! j. i; I8 G: i
) g5 b1 _. c% J1 S1 \
' z7 N# P/ q8 L- W) y
% z3 S4 T8 P! e& M9 _! @
; ^/ g, {7 @& l1 [+ J; x& `
% C) w4 h* T% x* w9 X
7 L9 h1 i* o* h4 _! q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 M& p  P" g% y/ s; a+ {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& {$ s3 P% W+ B  c: M# ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) z# M% h( G7 j6 ?/ X+ C' A

) k: Q  D" Z9 f1 U+ N0 w/ y是不是需要在DSP.CFG中进行配置
  z+ s0 d& y1 ^5 A+ _我现在的配置为
6 U8 c1 q" f. N3 P% y8 n, `* k/ I3 l1 W7 [9 D" \
/*
. y7 \7 P1 Z) |( Q *  ======== Operating System Configuration ========' i4 s3 J- ?0 k* y) v
*/
9 n+ i+ A" `6 M, N. k- ~0 F- U2 h7 w$ A
/* no rts heap */
( I  R; k. l% V, M6 KProgram.heap = 0;: p9 H% Q2 f" S
Program.argSize = 100;  /* minimum size */; m7 n0 p+ t+ ^8 a5 Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& r/ S# \" e+ Z  ^/ A. h3 K
4 m% q8 H9 E5 e0 r8 a7 X! j
/* create a default heap */( W* R0 L6 P2 z* v* S& r1 t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 Q) k5 k& X0 D# Z. f7 fvar heapMemParams = new HeapMem.Params();/ X4 _" {1 P& g& h1 M* P
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 Q4 @: b: H: X' u( g
' H: W) H; T5 V! Z/ T$ b
var Memory = xdc.useModule('xdc.runtime.Memory');
% E; t; r$ d% `" t5 C/ o1 jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ X, q6 B$ ?( C0 ?% |* ~
0 i/ X. }8 ?: b* ~/* configure System module */. D3 e5 \7 J  T( o# S; a
var SysMin = xdc.useModule('xdc.runtime.SysMin');
+ N1 n, Q% v& c# kSysMin.bufSize = 0x1000;
& F7 I+ Y7 ?0 a9 Q" `& x+ pSysMin.flushAtExit = false;
) X9 d: _5 ~" C* Q# v. a3 m% y1 n& x) r: L
var System = xdc.useModule('xdc.runtime.System');
8 l- m7 ^, a$ I+ Z  mSystem.SupportProxy = SysMin;
4 y" O8 b. R2 V( [2 `' X% l; w8 z: s* B' h
/* configure SysBios to use the lower half of Timer 1 */
" r2 m/ g  N5 r% s& [$ zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% Q4 D5 h6 P5 }8 Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');: h( ~, K" s+ b* K% o# @
Timer.timerSettings[1].master = true;
9 S6 L+ \8 T; ?) H0 yTimer.defaultHalf = Timer.Half_LOWER;
! m3 b3 S% G' W' V* Y$ c+ QClock.timerId = 1;! V$ o# @8 X( `2 Z) l1 G3 p* a0 X) b
4 h7 w/ ?! J. R/ \

9 [" ^+ [4 e$ [( j2 E0 M/*
. |2 ?3 l! L9 z) J7 b1 f *  ======== Miscellaneous Configuration ========
2 z2 c. S6 Z! C& u) I */
* S# P, o6 y; O8 @
8 m! T& P  [& j7 Z/* set default diags mask */" ?( a7 F& D; m/ z* J4 P
var Diags = xdc.useModule('xdc.runtime.Diags');1 f" v/ D/ M' t7 d2 P8 ~) Z7 x. H
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& ]& e' B3 b4 [/ V: S+ J+ G- x4 n9 T! g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 y% ?1 |2 [7 ^- @, {' ]) aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ h, s, }$ h, n5 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 O6 N( W, Q' q/ RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ A' |8 `( k8 y* H
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, w1 `; J3 e! w9 L3 R" d1 i# k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ [8 ~7 |# Y( fDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; `" G9 I- K2 i- b+ I& RDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" c5 G$ M: H9 x1 f- g0 cDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 ^: P' V. G( C5 Q, T+ d. |Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" T+ \6 l6 y! T) o1 ?0 RDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; f; Q) _- S5 Q' Y( v! ~3 @7 gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ v. K# N( F# ^7 j7 A: iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 ]1 i( d6 p; H7 g8 r" RDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 k$ Z6 u8 ^5 ^$ ^0 C4 H& f0 Q
& m% m3 C4 V  |$ m# P' n/* override diags mask for selected modules */7 s9 K& p# Q+ t
xdc.useModule('xdc.runtime.Main');/ e; a2 X( u- |, U9 {
Diags.setMaskMeta(
0 c6 M. d8 K! Z    "xdc.runtime.Main",
2 Y# J! |4 r; }4 I    Diags.ENTRY | Diags.EXIT | Diags.INFO,. V# h( b  _* W9 D/ z
    Diags.RUNTIME_ON  |4 L9 o! q$ C+ R
);% q0 f3 s! W/ g/ o
9 j6 X' u' W6 l" }$ p% p( F; O6 B
var Registry = xdc.useModule('xdc.runtime.Registry');% Z9 ^+ F$ g, T) E9 R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& h" ~' z: X+ V( e) i- |( W- u
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 S8 l' T0 F8 ?0 w. ~# }( U1 q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 S; l8 O4 z3 O6 u7 g1 a
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: K! _  ^3 |4 H9 Q* N! ?( G
+ w6 h+ l' P) a
/* create a logger instance */, y% C2 R3 c$ N3 S) j8 Y* x
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# j, }, J+ }/ g+ f1 _2 _2 l
var loggerBufP = new LoggerBuf.Params();
( v$ G  u2 N0 c( m/ BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- L0 P0 x# ~0 e7 b9 a/ y: ?4 g& q9 DloggerBufP.bufType = LoggerBuf.BufType_FIXED;% v* \# F6 e  E  a& K

" A9 H/ a1 ~- \; r3 ]: u- d: b4 ivar appLogger = LoggerBuf.create(loggerBufP);
" p, \& R# p# U& H8 e; B7 w4 wappLogger.instance.name = "AppLog_Core1";
) R; M' Q6 l+ w0 N7 X, ~Defaults.common$.logger = appLogger;! S6 J* b( z1 X* H
Memory.defaultHeapSize = 0x8192;    # A9 e. ?% Z3 @6 b4 w. s% R
Idle.idleFxns[0] = "&LEDStatus";
0 v2 L( O8 A1 L. @% |Cache.initSize.l2Size = Cache.L2Size_32K;' B/ m8 u( i5 d$ C  ?. G6 ~
- V$ |: K% d5 U7 J# 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 */
+ n2 E/ q4 p6 Y& V# |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  d; r- J/ E% o2 K
var heapMemParams = new HeapMem.Params();6 g! [8 W4 t, Z# `8 M6 ~
heapMemParams.size = 0x4000;
: h9 C7 r% K2 T0 i/ s  u5 ~+ q
/ Q6 C* C* \0 }var Memory = xdc.useModule('xdc.runtime.Memory');
  D! c" f9 ~, b# R% zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% e# F- U# G- x( X' ^; y' ]  _8 E* p* ^  S
. d) j0 X5 O! j' b; T* f
我大约calloc  每次共计大小为5K*16bits,7 e( x$ O! r6 Y9 s! E6 @; |
而默认配置才0x4000、需要改大。
; T% t; H* {' \  }1 R* e
* B% G' Z+ u, e" C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* R- q9 z+ C  A# R8 F
Program.heap = 0;
9 g( [9 f5 M, F+ S$ `Program.argSize = 100;  /* minimum size */
4 x  d$ l$ p9 j1 R; \0 Q9 ZProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 08:26 , Processed in 0.038530 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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