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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  ?( z1 F) f. r( b( q/ p/ i& X. X% I
1 k" u* N# r% U0 l8 D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! n- @/ I1 F- A9 C
+ J( R* a/ e8 ~/ p3 E% D9 g: z其他程序段。。。。。! G" }, s- |1 \/ m; ~# v
. S6 ^8 O& n( N5 X* ]# }
   free(x_d);" s, ?% u3 n0 y* A, |; t5 Q
9 m3 l& \1 {: P: u
使用DSP侧单独调试功能,验证动态申请没有问题,7 r* K  x% U3 G" d

: B: Z% H  F) D9 F但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ L0 M9 F6 T& R& B: D
. z5 u' W7 q6 b' i+ W5 x! e4 [

* h$ s; n# s5 s* f2 u4 G2 |. X6 j6 O! \
5 h, g7 b1 e9 I3 W$ m
5 v* ?# v: n/ O8 m6 v

: _  M% b  J( d( @: J2 O& t
8 M2 o7 Y) E! g8 X0 \
0 Z" @3 f2 Y8 I' M/ f2 f9 L) @- f( O
. t1 L) L/ F( v8 O3 w- D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 u' X! C) a8 @: `5 V& N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' k* n1 ]1 ~3 y# q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 E" K9 e% u; [; }
1 C. D. V1 r) m* h8 ~/ E
是不是需要在DSP.CFG中进行配置
! ?4 C% F' p( O我现在的配置为
( B/ G. f$ g2 i' }
8 `% e4 `' X* N5 m* @7 @2 f* f/*
" M8 ^5 u4 o5 H. V7 u *  ======== Operating System Configuration ========. ^. D7 W4 l; P$ e6 r
*/1 {0 P/ T! _5 H6 ], H, f. ?
6 k# n1 P- W3 Q
/* no rts heap */2 c% ?& _9 u$ J4 p* c3 }
Program.heap = 0;
% S. I8 O( N' F7 o8 AProgram.argSize = 100;  /* minimum size */! h/ u/ @& W0 e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 U% r# m& W5 a4 ^, P1 O+ Y* {, }1 c( C, }
/* create a default heap */
3 L2 i/ |: Z$ V1 ?6 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 H5 Z2 K: U! Bvar heapMemParams = new HeapMem.Params();8 h1 n% x( ], Y/ {7 ^& a9 R( }2 Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 {* e8 k' m4 ?/ x
5 w; Z# o0 i2 C" r; p2 o8 [9 D
var Memory = xdc.useModule('xdc.runtime.Memory');
# n5 x; @- ?. f& f8 h+ P) _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ e/ l( \* a0 r3 d4 D1 \+ W

1 |8 J9 ^3 Z2 |/ R$ N+ m0 _0 A/ Y! o/* configure System module */
" q6 m- F0 H- l# Qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
/ r8 O/ H' r' ~, m9 n6 @* U4 b! MSysMin.bufSize = 0x1000;+ v8 S" [! e; q1 ?3 A  d9 L6 V
SysMin.flushAtExit = false;
& b/ T. G$ W4 C! }* _0 ~7 u& ?5 Y& ]* E9 Q: F7 w2 T4 Z! l
var System = xdc.useModule('xdc.runtime.System');
# z: A- w; Z8 P: m2 kSystem.SupportProxy = SysMin;& m. |& o! \! y2 i3 f

: O) c  a% C5 G* @& U4 w7 C/* configure SysBios to use the lower half of Timer 1 */0 r2 Y2 o! E" Z/ r1 i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- {& w- }4 Y( p! Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ ^; s( I0 ?: }& h; b1 wTimer.timerSettings[1].master = true;" H& |# {: Y( D8 @6 T2 X+ F  a
Timer.defaultHalf = Timer.Half_LOWER;
. X1 D  K2 A% r; N: x0 A8 BClock.timerId = 1;
, b  P0 N+ F3 x( g! d0 M
! o0 Y8 }# x4 H% Y' M3 q) {9 }/ K- j& @9 V, y6 h9 v, W
/*
  a2 c# e9 i, Y/ J# F *  ======== Miscellaneous Configuration ========
3 Z- {: g' T/ _* M' l3 f6 m( p */; Q9 a0 _6 I( g7 t

" c4 r/ y- M4 t& R8 Z9 n/* set default diags mask */0 r+ \$ p( E' p9 ?5 v/ V7 @2 F( R0 S1 b
var Diags = xdc.useModule('xdc.runtime.Diags');8 D) l% X  _; Z6 c8 J4 N3 v
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ _  ^8 \1 n3 d* }

( i, e9 F6 w  [* c. |$ H3 Q, iDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 D0 V" |2 F' o
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- U2 K" G/ g0 F  W- |Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! z7 R0 N7 C  K) X3 y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  b9 S0 U. a5 y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& G* o! t) U+ l6 D0 A7 S
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 X) S: K" `, v' C
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 s4 s3 g1 c; R$ C6 I9 ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! E4 H* w7 P2 P0 M" w
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: r/ G3 e4 I3 m8 x3 u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# u2 b- ]$ i' E6 F5 i1 u
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* M& t2 u6 t4 t7 c0 T) Z3 f9 K+ oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 T& x& W2 H/ D; i, c' R( h# b) P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 m2 U' S; B2 Y& e/ DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  C, C2 N0 U: k. m

5 }7 J, a  G3 ^# o* F/* override diags mask for selected modules */
7 s% P2 c! o/ f' q6 H3 Uxdc.useModule('xdc.runtime.Main');3 w# X- a& ~# y: R6 }& P
Diags.setMaskMeta(
$ A5 X; D- Q# l: l; a    "xdc.runtime.Main",
% x1 ^& V- B7 V; ?7 a/ H  y    Diags.ENTRY | Diags.EXIT | Diags.INFO,' V# q0 M; W3 U! g* j2 j
    Diags.RUNTIME_ON
" V: {8 M( B5 p! @2 D2 n6 ^3 P);" q. c4 T3 H' M! ?' {" Q8 y
! U5 p0 m) ?3 w5 `0 [) b
var Registry = xdc.useModule('xdc.runtime.Registry');' s& X9 i# o7 r/ Q, n; A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ O# D9 `! O5 {: @8 {! A" E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 N. e7 q# h7 ]$ x  G" ?5 B( TRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;) A5 u- u  F4 l6 @0 ]$ `, \" G( z+ i- z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 L0 V+ r* V4 A1 u

! o; t; Q8 p0 `8 G: |/* create a logger instance */) \* O6 b% p% {; G8 B" g
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& t3 |9 d( \+ _var loggerBufP = new LoggerBuf.Params();6 g/ d" r! b) h
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 R- E* ^  Q- xloggerBufP.bufType = LoggerBuf.BufType_FIXED;5 Q" \7 L1 ^, H$ M$ N# m% ]4 N* a
* Z, C; h, N, T; J* G5 k
var appLogger = LoggerBuf.create(loggerBufP);0 t: `, Z. J  z7 E0 V
appLogger.instance.name = "AppLog_Core1";3 [8 |# [/ O: Y3 e3 C4 Z* r
Defaults.common$.logger = appLogger;
9 y# Y# p  k1 R0 ?2 V( qMemory.defaultHeapSize = 0x8192;    5 I; F- r) B7 I6 M0 i
Idle.idleFxns[0] = "&LEDStatus";
9 K1 b2 o4 F5 w3 Q* {+ k$ ^; w/ L% lCache.initSize.l2Size = Cache.L2Size_32K;0 |3 o$ N1 {' ]0 T, v$ g
) Y4 h3 [' z( @4 j6 j/ L
回复 支持 反对

使用道具 举报

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 */
% _  N" |# ~' Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. S9 F/ [4 S3 ^% rvar heapMemParams = new HeapMem.Params();
; m6 l% s1 y! d; y. L0 PheapMemParams.size = 0x4000;
3 C; ]% S! Q4 R# R9 k( k+ O, t9 X+ }& ~' y( Y8 Y
var Memory = xdc.useModule('xdc.runtime.Memory');
# F! H- M& R% Q3 H3 ]* u/ H4 v( dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; }+ d7 H8 ?, c) w9 U0 m* Q: J: I

$ l; I, _4 T$ J1 }我大约calloc  每次共计大小为5K*16bits,
. g7 V/ C4 F) L; [& e- F而默认配置才0x4000、需要改大。
9 _0 {2 @* }) ]' J6 e( i
- b# P( `. C) n% M) k0 o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 N2 E. n  `7 f1 X7 Q+ sProgram.heap = 0;
& f, z+ M/ s3 U" u7 _! B' cProgram.argSize = 100;  /* minimum size */5 A. j+ R, v0 @) J* n! ^. j: W
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 01:07 , Processed in 0.040656 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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