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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 U6 H- }% o+ x$ u! I, Q7 C. c

# k6 i# G; }& c4 m' b" R  |  O    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  P* O. f6 X% W- C" w$ [
  ?3 @& G; ~0 s其他程序段。。。。。- |7 f9 ^+ e' E1 {

. I" \( w$ j4 A6 h/ i   free(x_d);) i. h9 A3 W7 O& X, \5 g. l

: @% Y6 k& ?7 F8 h  ?$ s8 N' ^使用DSP侧单独调试功能,验证动态申请没有问题,: ]8 U& O+ O! |

2 k( O% N/ s# G, \# k但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( n5 g& e8 v/ j, a3 l

% q1 o0 I4 c5 A- t' F  L0 p, F3 {) [2 ]" Q  @/ P. b. d" S
& u: F1 @9 [) Z$ d

! R6 R4 d- d* l/ F* E3 G
/ o2 \! N. M1 I" x' l" {- G4 ]0 a; C8 c- w8 g2 |& ]; ~
2 I( F" }; j1 l) b

$ h; W' p& ^4 M- |0 n
3 f9 K& b6 @6 g5 M6 a: P' e0 U
" M6 S  E3 w3 r$ s9 c- L8 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- W$ Z& R$ Y# R$ l: h3 \
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" x. @% c: }& y6 D$ Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( j) t  p( G( `# p( a" U$ N

' X; n2 `% W$ i7 l' W1 P" ?! o8 Q: }是不是需要在DSP.CFG中进行配置9 `* W, p3 ^0 @; w( e! q. U* x4 Y2 w
我现在的配置为# [) v6 }; j# `8 L; A; Q% z8 z# ^0 ~
7 _. t9 {$ G  E
/*
! E; U& F6 l6 m& }& n1 b5 t- M- y1 t *  ======== Operating System Configuration ========" A9 ^0 E/ D9 h6 F
*/, f) U' Z' g: b' o" b3 c
# \1 n( z- ?; a' o% K$ e
/* no rts heap */
1 w  x8 H. k  E4 F7 l. ?( JProgram.heap = 0;8 @* n( _: r' f& L
Program.argSize = 100;  /* minimum size */3 T" f3 q, W9 u% Z* `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( p) q$ a4 S0 m$ k! h5 j

9 D7 w  F( Z4 B7 N7 ~2 ~% b/* create a default heap */
1 \/ t5 K2 r; |" g5 u* q) Z) fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 y$ \, w, y5 M3 p) ?var heapMemParams = new HeapMem.Params();
/ h( p& N) `: f6 S! d2 gheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  H; c: H" U5 u7 c1 R; n- b& }

' w7 ]0 K) t( G
var Memory = xdc.useModule('xdc.runtime.Memory');0 ~4 v* l: T1 [2 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! G4 b: E. y# q# v- C" b- _

, t+ L3 p2 j( j' S- a4 o, U+ C/* configure System module */
) H4 ^3 o5 e, \& l3 _# x1 Tvar SysMin = xdc.useModule('xdc.runtime.SysMin');. W2 Q- r& [" X. u, k0 O
SysMin.bufSize = 0x1000;, u9 ?  z9 R8 \+ N1 v) Q. k
SysMin.flushAtExit = false;
, t- Z1 |' }* j4 D! q
0 @2 b. i. D; R" ^4 [var System = xdc.useModule('xdc.runtime.System');9 Y1 I- Y8 B4 ^1 X! u/ u- N4 f0 S
System.SupportProxy = SysMin;
8 C+ `# s. P9 w0 ^- C: T& }- _5 I) ^
  D  A7 G& J) A* `/* configure SysBios to use the lower half of Timer 1 */( C" \7 H; V0 S$ ~% F9 E+ ^/ ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! X! g2 V; B9 T& e
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" N' H& I. \/ |& K
Timer.timerSettings[1].master = true;
5 ?$ W& `/ \5 M* d$ nTimer.defaultHalf = Timer.Half_LOWER;" o4 A: _8 G. _
Clock.timerId = 1;
. _& j  s. J1 J! f0 o2 i& ~  i9 I6 \' S: r2 @
1 P( `2 x0 M: N' m; k
/*% X9 t+ b$ ?3 f4 Q1 p$ Y3 l- G! S
*  ======== Miscellaneous Configuration ========+ e9 l3 G% k( Z4 J$ d# M$ E
*/9 C/ t3 }+ @) F3 |+ Y2 |

3 @8 ]4 \0 [5 a/ J8 {/* set default diags mask */# U6 H' g% W- o) C) K
var Diags = xdc.useModule('xdc.runtime.Diags');) f% W( b( _2 k* ~9 p
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 s6 p& O! ~# u1 S5 f7 l, ?/ i( O3 M
( ?- K# c$ g/ H/ M" W
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 [* T( h. C9 f( \2 T( SDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 h& u+ q3 \1 D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 F, J, l- N# v! ?- J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" z/ n2 C. W& D/ A  _$ ]+ PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, N1 Z1 ~  A6 i  XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& x4 ^, h" h9 f" {
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ m1 |0 J8 I7 xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 O- c. {" ~8 f& yDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& f% e/ g& n2 b  _1 N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" U, K) P+ X, Q9 o' r8 TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 s6 r( x7 R9 x9 F: e' u# G0 o: }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, p* G  X/ B  n) s' v) ]! O" ?+ pDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 y9 v6 U9 }8 D  q0 v! A: vDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 t8 G0 |% y# _3 O1 I
$ }8 I( [2 A# ~
/* override diags mask for selected modules */2 h) u, B8 n6 D9 n5 o& T+ \
xdc.useModule('xdc.runtime.Main');
$ I  V/ X/ {. O# n8 XDiags.setMaskMeta(
# \( z+ @3 Q7 U8 {0 b  ]    "xdc.runtime.Main",
1 K  V' {' Q. ]" U. `( V    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; I3 L! v7 U8 u: Y    Diags.RUNTIME_ON' J/ f2 ~4 @; R, H( f% P' T
);
1 h" @3 M& G! r& W4 Z3 Z( ^) ~) M3 i6 J& h" k" V: B1 ?( m( C$ d' F
var Registry = xdc.useModule('xdc.runtime.Registry');
) a! f$ z3 X9 x( Y5 ^3 b9 SRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" k  z% a/ \( v4 S; W# x' y1 tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 z  _. a, G/ v3 _; |: c) V* D
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' S/ |  z2 ]+ N- U5 |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. @( C& i1 ^! n- f9 t  U' J/ F( R# z. r  b' K8 a6 Z
/* create a logger instance */
# B; ~; ^% z* q+ C$ r2 @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 I2 w! w' H8 mvar loggerBufP = new LoggerBuf.Params();/ B& r4 t+ r7 ^( `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 A# P/ W; {  ]0 ~$ p, e; h
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; O; z0 K2 m: Z0 c2 t8 G' ~
2 C" o& r7 g& x6 t
var appLogger = LoggerBuf.create(loggerBufP);
7 K3 M0 L' F7 L8 r, qappLogger.instance.name = "AppLog_Core1";6 x2 H) r7 D  v/ L: G3 z$ }% k5 x, v
Defaults.common$.logger = appLogger;. {) o$ a5 |' i) t
Memory.defaultHeapSize = 0x8192;    ( H1 u' F; I7 u
Idle.idleFxns[0] = "&LEDStatus";; {0 u' ?, [6 J
Cache.initSize.l2Size = Cache.L2Size_32K;
( Q. V: `6 m, P0 B2 S2 z7 o/ r% u  \) ]% [) @# l4 U
回复 支持 反对

使用道具 举报

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 */
9 o- f% l- c) E5 u! {. qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 Q2 R/ |. e  u6 Jvar heapMemParams = new HeapMem.Params();& h* m5 Z" d% ^2 g! s0 J3 Y& d# i
heapMemParams.size = 0x4000;
$ _  n- X' k7 l" F' R* d! K! r/ I) B7 K$ D; X3 \/ x9 j
var Memory = xdc.useModule('xdc.runtime.Memory');
1 y# `) K9 \* j# h; d5 \! gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# U0 t9 _9 v+ h9 H4 t- R
0 \. m8 E+ \: w* z/ D! F5 a我大约calloc  每次共计大小为5K*16bits,9 ?$ f: `3 g! ?# a8 y, c. L$ [
而默认配置才0x4000、需要改大。
2 J+ O0 v  }$ ^3 [. M) |% D" H: n9 d2 ^- z9 U6 {2 B2 C4 h3 J6 o' g; V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' P/ z" q0 N8 d# J, r( T, _Program.heap = 0;
' E' R- U% f; k$ E' i' t+ LProgram.argSize = 100;  /* minimum size */
, w; r1 v* V! A/ J: nProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-27 00:16 , Processed in 0.043685 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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