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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 E7 M  V5 Q9 \, x/ d3 }2 o; S7 \/ M: U  p: N
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 T, _; B' t* j' z: N6 a3 s2 u
# c, a9 J6 _9 z' o! g2 O" W% [其他程序段。。。。。/ K! H" D1 g' V! X

9 F) i) l+ x7 J2 }4 f0 q   free(x_d);3 ?/ M- T- o/ [& k

  j# x, V: `, R& s! v0 X& a1 L# F使用DSP侧单独调试功能,验证动态申请没有问题,$ E' w) {: O& J  u
+ K7 ]9 D5 K) A0 p; p' Y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' [8 n2 [& }6 d
7 \  C9 E+ ~" t; m# }

# a) d4 t8 q7 y# ~5 U6 M: P
3 d4 N9 i4 _1 o$ Q. J" T! ^% X# f" Z4 x
# _+ w' o0 b) y/ c
# e/ z* P6 ~5 J' Z
9 e; H$ H( o4 u2 Z# x8 K

; \+ g4 L2 b6 `0 m( D. V2 J- f% e- l

& _+ `8 d6 w/ D& e6 |. [* c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 P" g: K# f. d. H6 c9 g. x! L
Program.heap = 0;
" p( p* i3 E( B& R7 e- g4 E( [3 _Program.argSize = 100;  /* minimum size *// s5 }% r* q! _; z5 _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */( q/ _- {& V2 c$ f" Y( y% D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* }8 p  _4 j/ T8 Dvar heapMemParams = new HeapMem.Params();
$ g  W* K/ J6 o8 G5 ?$ h: oheapMemParams.size = 0x4000;. O6 {3 x$ E2 k4 U* B- ^8 T

+ t) E5 Z8 J3 R$ J/ M& r' Cvar Memory = xdc.useModule('xdc.runtime.Memory');, [' D: k) d2 I- z# Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ R( _, \) n4 `9 U

' H. L- z! ^( a0 ~( Q4 m2 k& k我大约calloc  每次共计大小为5K*16bits,
: V# c& c$ Y. P5 d& T/ A' k而默认配置才0x4000、需要改大。
1 o6 t) S8 n5 `4 J$ F* k8 x4 r$ Z, E( J! @) ]% f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 d% D9 h. e% J6 |8 ~3 w( J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 E( p& v0 ~6 l5 Z/ b1 s/ }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( P5 @0 u. Y! N2 ~- q- S3 l
7 p' |/ a/ g  b# ^5 b6 M
是不是需要在DSP.CFG中进行配置
) r( e% [  }. I7 |& B6 S我现在的配置为
# c7 Q$ T4 h! E- T+ N0 m; ^5 Y( u6 q; C1 [. ~9 k% B; ]" j
/*
& x3 x6 O9 j, Y* j4 z! w/ ?1 p *  ======== Operating System Configuration ========
0 K3 g0 i7 F0 ~2 `) F */
: l( @% {; H7 V$ k4 q) X2 f. y2 I/ }; e/ C) j, ~: r
/* no rts heap */5 A8 n; E  U7 b8 ]; D) V# Z
Program.heap = 0;2 ]5 w* i# [3 u7 ?
Program.argSize = 100;  /* minimum size */
% B, k1 e: _6 `# v  lProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% i/ B2 \- N9 T8 A: ~6 C+ b
4 U0 n9 a  p$ d: r, B) L, `5 P9 ~4 _4 l
/* create a default heap */
/ ^) Z* m3 V  L7 F$ vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 G1 m. J# x+ ~; Bvar heapMemParams = new HeapMem.Params();) A6 i4 N0 z; D0 i) E
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. s( s2 f8 X- F

' ], K6 N/ y5 z# r; A& s
var Memory = xdc.useModule('xdc.runtime.Memory');4 _# q" H  V! T9 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 H' M( i# k* A/ @2 ]# M- x$ I  z7 m! n1 Z+ b  c7 ?
/* configure System module */& U( [6 ^: P' u) o2 L& a
var SysMin = xdc.useModule('xdc.runtime.SysMin');7 [4 K" |/ `5 P. x# R
SysMin.bufSize = 0x1000;5 [( R9 Q, [9 e9 ^
SysMin.flushAtExit = false;
$ \2 V- k2 W2 y( x5 u1 M& S* f4 [3 |3 e2 r: s8 z- L
var System = xdc.useModule('xdc.runtime.System');
. }" ?* g% D: ?# sSystem.SupportProxy = SysMin;
5 _/ H: t) p1 J( a
% c7 {( \# u2 Q  k0 @/* configure SysBios to use the lower half of Timer 1 */
' g% V( C* x7 W. x- ?! Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& M4 M: j/ N! y: u" Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
# x9 F0 y# D( i8 A" _2 S% p9 GTimer.timerSettings[1].master = true;6 X' \, T0 N# g
Timer.defaultHalf = Timer.Half_LOWER;
8 r& n  h' n# P* W4 y3 a0 DClock.timerId = 1;$ l' X0 p4 B+ |
$ v' d7 I3 V& K- @7 I5 N+ p

# Q* F/ e: J: b/*
" T( z; Y6 R8 c7 M; k( X9 ^ *  ======== Miscellaneous Configuration ========1 U. d" M- p3 u' n( W9 n0 s4 C
*/
) N& e# |! s% e
" T+ a8 A1 b8 \1 ]1 h/ w/* set default diags mask */2 h# j2 S# I# J/ q
var Diags = xdc.useModule('xdc.runtime.Diags');
7 p' P- t  K! ^var Defaults = xdc.useModule('xdc.runtime.Defaults');4 z/ G* \9 d. u% t

4 d& h8 R9 Q6 m' g: K) ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; b! Y- }  e8 n% @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" U1 ]4 f! X1 C. w) l% mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; E2 i7 ]; |7 wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ P% \& S7 ^9 z) }5 C
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! y5 I, Y$ C0 L9 \) fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 e& N, l& V  w. S7 U% a- sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 D7 w; P' D# ?6 q. aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: ~  [5 d/ J* D, [6 Z( k
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& d+ W, }+ a5 H% c- y% ^" {Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: f$ f  B. }( O- F5 o7 E- W; P; bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- K6 A0 F' J4 [  v( }/ ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 c3 X9 w# y9 Q+ Q1 _% C' @Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 q* g' F0 n; n9 yDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% Z1 d5 }9 ~9 D; E9 L  T3 Z! W
7 W# w& T. }( z/* override diags mask for selected modules */
: y& S8 X3 u5 ?& oxdc.useModule('xdc.runtime.Main');+ e9 E2 z' g: P  g
Diags.setMaskMeta(3 J' _0 ^: I' G7 g
    "xdc.runtime.Main",
+ Q8 n: N- v" E( S5 Y! v    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 o6 Z" x. [5 }$ e8 r7 v+ v7 u
    Diags.RUNTIME_ON" e6 O' K* G. U6 O/ \
);
6 l( k  c. u* }+ m1 [- W. `6 _  H; p. R; `- g; @
var Registry = xdc.useModule('xdc.runtime.Registry');) F/ S6 t/ ^  ]# |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: y- a; Y' [8 I. I$ n/ |- y* [' pRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( U. z  J9 s2 }* V& F/ yRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 x! x; W% I: a, M3 X9 G1 E1 D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ v! k( f( Y5 R

' X1 ]0 P* Y7 J4 S  _" T5 p& k/* create a logger instance */
, V0 n( b* i  _, Y$ rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 D$ i4 s. m5 a
var loggerBufP = new LoggerBuf.Params();5 w, @; T( U4 p. a( T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* Y  c& \3 z, Y9 ^7 h0 a0 \
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 [0 X2 M. B# W- `' M* o

0 x1 Z3 Z7 q8 c7 h  I2 C$ m- Qvar appLogger = LoggerBuf.create(loggerBufP);) U* J( P0 L0 X3 q) i8 Y
appLogger.instance.name = "AppLog_Core1";9 d' m; `( W1 X, }2 p( d
Defaults.common$.logger = appLogger;
$ B9 _3 {% `/ m4 V& eMemory.defaultHeapSize = 0x8192;   
6 m8 _: |* S  i% R) b; BIdle.idleFxns[0] = "&LEDStatus";3 I/ v7 o0 O+ |2 D, f
Cache.initSize.l2Size = Cache.L2Size_32K;6 @) w7 \2 x1 c  T3 ?5 ?

/ j% ^$ U' i& c. r' Z6 ]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-27 01:47 , Processed in 0.042415 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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