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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: s& d$ [9 T( {
2 C3 M) ~, O: `% U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 z- f: b! f" w) `

  L6 t1 d) l/ Y1 z# L( e0 }其他程序段。。。。。
# A+ U# y$ o5 e
+ C) D. C+ s' D/ P, o! Z   free(x_d);
! C* W. ]4 R5 S- v( M
8 K. [- e8 J; p* ]: S: [使用DSP侧单独调试功能,验证动态申请没有问题,
" U7 n( T& Z# I, ~  [, V* C8 a* ~; a
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  \* D: G. p& H2 {- {" X; j( z3 Q3 b

* F- K/ z& V, Z4 h
+ x! _, z9 v' b* V+ R9 l5 F9 ~5 m! j* _. N7 _0 V- Q
5 H6 @' J  q2 D5 @0 U

! c8 E( g- ], b7 c* T  r
# X/ ]( M* A) m$ p. S2 ^. h' B6 l7 l$ Z
; _  G4 R2 i4 z) C
# f+ f! W3 J4 ], b8 T+ Z  z

4 I: n- Y) [. |( J' \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
, Y0 i& A% H$ _, B  f6 F$ U我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! W7 ~* m: n3 d3 n% M/ @" J(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% ^; u% F" m: P" v* Q( V
! U( g3 O- q. R6 L
是不是需要在DSP.CFG中进行配置
# d$ \$ B8 i! D+ R" |' U* m我现在的配置为8 k* L, w/ e$ b* z& X

6 [% l, E" D. w8 ]% K# I7 Q& X/*  Q) _; x0 C2 [
*  ======== Operating System Configuration ========
9 N, T/ D0 L" @ */
) @+ `, b) M3 T( R4 K1 _6 C% x+ o0 W5 m: M3 o" f
/* no rts heap */
4 f2 s5 L; G. ]( lProgram.heap = 0;
/ G2 F& t& K! e5 A5 D0 B+ q2 DProgram.argSize = 100;  /* minimum size */
3 C/ J& r* b! ?% B6 oProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! G, y+ h: @( I1 ?
' B+ k% F, ~0 N2 p& m2 A/* create a default heap */) {1 N7 v) b& o8 }* v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% r) U; s0 Q4 [6 F+ pvar heapMemParams = new HeapMem.Params();
* t$ ]4 z1 C8 J: y" NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. y" r! p5 ?. W5 l( R- s7 G' l
% x% [6 E0 C3 ], i3 ?4 z3 c, a
var Memory = xdc.useModule('xdc.runtime.Memory');
  r. M) @( Z9 m% E2 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( p8 {" m3 G  J& @$ j2 j* I% n8 L- p+ X6 h. q! @& s
/* configure System module */: `" ]$ Y) f9 Z; @( Y7 U! W
var SysMin = xdc.useModule('xdc.runtime.SysMin');# |  A2 Q/ f6 s/ {. @9 _: r  b
SysMin.bufSize = 0x1000;
6 }& g$ e: d4 X' s, X- s: e/ b* }SysMin.flushAtExit = false;
" T7 w+ E' D$ Y9 Q+ P
/ n% `# s$ e% C4 p1 T0 e) L, Z2 R' f* I/ Bvar System = xdc.useModule('xdc.runtime.System');! L% a  I5 V: m* M3 q
System.SupportProxy = SysMin;1 y$ R3 J+ L& P  j5 d' M
% H+ g/ B" a$ V! r
/* configure SysBios to use the lower half of Timer 1 */
1 H2 F7 ]0 N6 A1 m$ Y. xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( v; r- d( I% f' @3 f1 bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');, S1 j- Q* c  j, }7 a$ c5 b
Timer.timerSettings[1].master = true;
$ w  V2 E" j4 GTimer.defaultHalf = Timer.Half_LOWER;# I( |5 }7 H. e* ^# ]
Clock.timerId = 1;
+ Q* @3 M5 w+ m& t9 i$ [
3 \2 P6 }/ c' B) I- v4 I) b3 [, E% J/ b; d; k/ p$ }
/*0 i) R  ?( |& ^7 H4 e
*  ======== Miscellaneous Configuration ========
+ O' o" U' B9 o. L! P( j2 g */, i, Z- ^1 o+ D/ A7 L% |
: A6 X& s  l# p& P
/* set default diags mask */
& ?* N. w% N, P: X3 {7 l: _var Diags = xdc.useModule('xdc.runtime.Diags');
4 N* c) i( d5 A$ `1 t/ U4 hvar Defaults = xdc.useModule('xdc.runtime.Defaults');# Z  m, j8 q; a, w

0 N3 l4 @5 b9 u) n. |8 }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 d' ]8 [+ L2 A# [- `1 |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 {; }) ~* T6 W' y, j( P+ I
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 B" F1 K5 C5 v% X7 p( CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 U+ y( L5 w% M0 U( s0 C5 T! uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 t2 z8 P( |3 r1 x3 H1 D/ W% O
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 H+ T5 k( ?$ e1 g' I- V( xDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 a& w5 L  e% h* C; qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* C4 s: ^' ]  q/ z4 W+ sDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 i6 D: h. k% C0 X0 Y% sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; U  I+ T" u* E: D9 W6 iDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' G% S7 o: R5 X4 r+ cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' L" C& {/ u3 F3 J: }# UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- e2 t. c% p- }" B9 lDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 V% d, u) L8 c, R8 g- `7 z% b, E* E
" B  r# i' n  ]/ w) p4 k8 F( I
/* override diags mask for selected modules */
5 y/ I& W( M. ~xdc.useModule('xdc.runtime.Main');
8 |+ |% N8 v) T* {! jDiags.setMaskMeta(5 L" H0 X- v/ y/ a
    "xdc.runtime.Main",  [" D$ k6 J8 w1 {9 D: Q" ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 W0 Q9 @9 h9 I* c7 l. ]9 t
    Diags.RUNTIME_ON  o9 M# Y$ @6 W5 @
);$ c& l5 ^" ]- c7 x; w

# F( t! T9 b' Z! @var Registry = xdc.useModule('xdc.runtime.Registry');
1 B0 Q' B% H7 U  F# aRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, S3 k2 N+ T( {6 V3 H) GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% I8 f% I* s8 d' C- d. qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, u0 F! j: l' k/ m! H. B( m! x4 WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 \) p: m$ d. k5 h. B5 T! |3 k7 `9 D% f
/* create a logger instance */- |2 v8 l3 ~3 g3 X1 H. G5 |
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& H  `4 m8 f# k  ]& p$ y! j
var loggerBufP = new LoggerBuf.Params();
( S8 P4 W( A9 [' g# f- jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ v/ ~5 @& u( D2 b' V* v0 q9 EloggerBufP.bufType = LoggerBuf.BufType_FIXED;
, P+ B$ f6 J/ r. C
0 d/ z! O- H( |  M/ Xvar appLogger = LoggerBuf.create(loggerBufP);3 o; Q3 a1 N0 Z, y* T9 n" t- E% {
appLogger.instance.name = "AppLog_Core1";
. U, @/ s- g; @Defaults.common$.logger = appLogger;
1 z6 Q/ z0 }+ H0 b9 y8 wMemory.defaultHeapSize = 0x8192;   
8 {* G2 \; n) ]5 V5 q# LIdle.idleFxns[0] = "&LEDStatus";
5 @' y. K+ P5 D8 r7 x5 s2 a" ?Cache.initSize.l2Size = Cache.L2Size_32K;
1 S; D/ T$ v+ u. s. \3 L7 G; v5 `: Y1 \
2 K; P/ p3 J# a: X6 ^9 |9 o# s
回复 支持 反对

使用道具 举报

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 */
/ D; i. |0 P$ d# W/ wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  w0 i3 P, q- c  s# s
var heapMemParams = new HeapMem.Params();
6 K. [% _  z4 _! B- d# }  X- @heapMemParams.size = 0x4000;, z. s/ L6 R, A% _, F% c6 s1 b
! Y& L1 O4 o& b/ D' V( `( ~
var Memory = xdc.useModule('xdc.runtime.Memory');5 D2 h! }, s. Y: y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 V! H9 w4 E( i7 [  a8 _5 y$ ^, l; {4 y8 j! v& F3 I; |- ?
我大约calloc  每次共计大小为5K*16bits,
5 ]9 `& T: n/ ]4 c而默认配置才0x4000、需要改大。: T4 C4 m& N1 c9 @; F" h

: }6 N/ G9 ^" M/ k7 S% Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 C; U4 o. c7 n- B
Program.heap = 0;( z" D- M3 D3 U. A' W. ^5 Z  A
Program.argSize = 100;  /* minimum size */0 y- V9 i. _( r- k7 q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-12 03:40 , Processed in 0.041439 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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