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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

* w& Q4 Z$ E+ N7 @; M* V  @0 f    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. ]  [# Q4 s2 V+ D% @3 G1 I) G
* G  v# @4 l# M# `其他程序段。。。。。; H0 h) N6 y4 V0 {5 i
! ~8 I0 V6 A5 y9 H8 ~: }8 J
   free(x_d);; u9 C$ E7 r" C( e( k4 S
9 P" N6 c3 ~+ R' r0 w% o
使用DSP侧单独调试功能,验证动态申请没有问题,
) g$ `1 e$ K' o+ C! a8 ?# x' Y8 [* \, O+ w. l9 [; Y7 i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 P. I3 i5 Q, L( `, C0 Q. k

, W2 [% Z, S% _& T2 W1 r' t, j, }7 O# h* K- A
- Q, z# C" F+ e
5 E& T$ d4 x9 ?; r9 c" k( p

! E$ V5 J% M' y9 L+ v! u/ C
: _# U! S" X$ U* D. m- D; m9 e+ U$ |
: ]" z9 |# e! X1 U4 n( W( Z7 B1 c1 P- T
" n& I1 ?8 A1 D$ \* w( r# P+ t

* u: I* W- i! R) |. ^% D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) V3 x6 b1 v8 A1 \8 F  F* }. _% @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- X! ?  l. X3 B/ s1 O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 B: O/ l4 M3 ~) I$ M0 H

- z8 g0 }6 s( M% l( }1 }8 Q* k是不是需要在DSP.CFG中进行配置, ^3 \" p; Y( `0 V6 j
我现在的配置为
! e5 j; X, `2 _' T( `
# U5 D# `* Z% c. k/ H$ [/*
$ {' b2 ~" g6 Q- D *  ======== Operating System Configuration ========
1 K7 B* g+ J3 q5 Q2 f/ N */
! t4 ?0 b1 m1 c7 M4 @; w7 c, j3 z' h$ _; c( z. S9 M) Z3 ?- @
/* no rts heap */
; e- B  S! r0 q9 _* kProgram.heap = 0;" `2 l( A" G9 P% z
Program.argSize = 100;  /* minimum size */& ]  @$ z+ [9 K9 y" C- ~7 d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 V4 c6 u: R) k! r2 ~
# {" W: A2 U7 u( p1 S/ @
/* create a default heap */
- a& C- v. W3 S; z% t+ Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 D# u/ h5 r" q! I/ |9 [+ z' p
var heapMemParams = new HeapMem.Params();
6 ^8 H* n1 n) q2 ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 j+ B8 F7 E1 k4 Y$ K' D
" b( |& ]% U; ?. f
var Memory = xdc.useModule('xdc.runtime.Memory');+ Q. C. l- z' {, E( C) |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 y2 k# }' F. |& [
5 o* m: ?: R; C/ ^: Y
/* configure System module */1 g& n8 H8 T" B& `
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 W& u+ O# _9 A8 |: XSysMin.bufSize = 0x1000;
4 T0 z2 j8 g& W. N  aSysMin.flushAtExit = false;1 B5 ~- L- F* r% ^, z
* c5 ?* D' x( i, P3 g3 z
var System = xdc.useModule('xdc.runtime.System');
$ `2 g2 z4 F, u  @( |( YSystem.SupportProxy = SysMin;( |( U9 e" C/ \1 e) H" G0 p4 u0 ?
( [" Z" f: r. e0 v% s8 [
/* configure SysBios to use the lower half of Timer 1 */
( q- ?/ \4 P0 _9 Q; [. kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 \  X8 p$ b) O: {0 [; I/ wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  K" B3 Z4 C0 _9 v0 ~! M; u9 oTimer.timerSettings[1].master = true;
, j- |' X/ b8 tTimer.defaultHalf = Timer.Half_LOWER;6 m/ r! \9 E/ ?* u  s/ x" r
Clock.timerId = 1;
5 u  b6 B: N% ~* T* }) s
1 ?/ ~3 A+ M5 q+ K2 r/ M& i# }( L% ^; Y" w4 G
/*
  p+ V5 Q' p. M. o; t" D$ Z *  ======== Miscellaneous Configuration ========
% W* E0 `2 R0 o8 a2 }/ g1 \: ? */
. O9 Z; ^- v" s8 y! w2 K4 N5 i, n3 T2 r$ r1 t9 z0 @& e7 q4 C0 e. }
/* set default diags mask */
4 j9 D8 S( G  rvar Diags = xdc.useModule('xdc.runtime.Diags');1 }& H9 [" @7 {
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 M8 r& q% t6 ~9 {
+ B8 I, Z! H0 S, Y0 uDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ S2 h. F6 h, g3 L3 f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ K: B$ J7 E% M$ Y! s/ d( CDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# M7 m( Q2 ?# ~0 r% x
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& p* Z. ^4 w( `% NDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 d* W9 g/ j: \) W6 ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: P' o1 |+ E0 J7 C7 V) F8 x: M, g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 a+ r  g$ ^9 W+ ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 p& M* A) a, `7 T. _
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: R" Q( ^( ?, z; B7 U- Z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, m6 r. u! a3 g# ^9 z7 N) ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. {( P' W4 J* y) q5 x: ^/ W
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 X7 S3 p2 [1 QDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( T9 S, [! K5 d  v0 U& e$ y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 q( L# T2 E: D; t% [4 s; d+ Z9 `& ?  C  U
/* override diags mask for selected modules */9 C/ c9 Q6 ~1 x" F
xdc.useModule('xdc.runtime.Main');
$ ?/ [# T  c4 YDiags.setMaskMeta(
) {! R" ^: M; `% _    "xdc.runtime.Main",
# D- ~  A1 n. K$ n+ ?2 d2 J* K' Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  ?* s6 d! y/ l( R    Diags.RUNTIME_ON
# J. g! p- U/ X5 g: r);
& L) B! _( F" w. g8 X5 X2 H: p1 F' J3 E$ _" k: P
var Registry = xdc.useModule('xdc.runtime.Registry');/ K( ^) v( ~. v. e2 P
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 b0 H/ f. [7 T0 K- z4 SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 c8 N1 B, d. j& u& P! W
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 t- p$ q# Z/ P- |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 \# r' Q$ `7 P# R5 X5 G* m1 J
+ z9 r( I( w8 |8 C4 S# R% l/* create a logger instance */9 l" Q. }$ G/ W) }, @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- x# l# Q) D4 S
var loggerBufP = new LoggerBuf.Params();; D* a: N9 Q! V7 ~
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& V9 g: e+ G, r* c) Q: C' IloggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ a6 D# l7 ^' N# J2 b7 G- i: d
$ ~* |. ~7 N+ ~: N8 Mvar appLogger = LoggerBuf.create(loggerBufP);3 ?* A( W4 u' v$ ~
appLogger.instance.name = "AppLog_Core1";$ d/ f* G' a. r  O! ]4 q
Defaults.common$.logger = appLogger;
( Z: n8 S/ R; p" d) a/ ~Memory.defaultHeapSize = 0x8192;    , \3 q, Q" z0 u$ H$ Z" j. B
Idle.idleFxns[0] = "&LEDStatus";6 W% D/ ^' y: M: u
Cache.initSize.l2Size = Cache.L2Size_32K;! o( M: t4 u- B- H% G" T

# p5 J0 G" i* x' I
回复 支持 反对

使用道具 举报

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 C5 K7 r0 T" E% C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- M6 q1 A; U( Cvar heapMemParams = new HeapMem.Params();9 e! O' a0 L, q" j* `
heapMemParams.size = 0x4000;! B" P; {" b( \; J7 i/ L% w
1 e* N3 z; ~( L3 t2 Q( m
var Memory = xdc.useModule('xdc.runtime.Memory');
& Q3 B( d* R9 n1 V8 kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* S& N/ u$ Z* u4 C1 V, T" A1 f2 T- a( I9 z0 }. ~! i" N
我大约calloc  每次共计大小为5K*16bits,
2 I5 k9 }9 Y  Q9 O* G7 d8 {. z而默认配置才0x4000、需要改大。
0 H! Q5 p* O/ A$ K- U0 M
: u7 i2 y0 s" ^9 t- ^: B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 U( @" q/ F- ]+ K+ w3 D4 z
Program.heap = 0;4 ?$ \' j* n4 }: f+ G: j( \  n
Program.argSize = 100;  /* minimum size */* D) _% N! @4 R
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-17 21:09 , Processed in 0.078306 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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