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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 ]6 c2 F5 S* X8 {; T8 P, [# l

0 A9 E2 r$ Q; ?# _& j7 w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% E7 R/ g+ q0 {: d" A" v
3 A- U( W9 R& Y' G
其他程序段。。。。。; ?, f  D5 @: `
& \2 K) G, ]- G) v; _! d
   free(x_d);
9 O" I  P/ t6 }) r! Y2 P4 D! M! f
4 R- \: v5 G0 E% @8 D2 A% K使用DSP侧单独调试功能,验证动态申请没有问题,
8 a; a  t+ T7 G4 d
$ A) w* X5 ?; O1 f5 U, H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 R  r5 C: q# w& ?* I$ V
5 L7 }; O; M8 _& z

/ W" u/ s$ I5 z$ A0 K$ @+ O
' }; O& g2 [. N
# d6 Y  D/ c; s* X$ O; I" L: B, x9 _" @' O: L

' e4 s+ B) r3 I4 `
$ h& F7 x9 N2 F4 o8 p* t6 c5 y: |& V3 d0 w: A5 [

/ |: I9 B% l' x* C, g2 g* B: j3 z3 y0 J& o2 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  w, S# s" _$ s+ N$ [
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) E# v: @' P/ ~) y0 f! @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- h! w! X4 Y+ W4 Y) e+ ?- G

8 [4 Q& o9 V, c是不是需要在DSP.CFG中进行配置
6 k& Y% T: Q0 Y5 t2 F; ]4 _我现在的配置为
3 V6 V% Q' Z# h! e% Q2 n$ O3 a$ J. M8 I9 g0 [& B  w
/*
7 r8 C3 }( Q, _$ p *  ======== Operating System Configuration ========
: _) `% f( U6 W& R5 I( k5 I. Y *// Q% E' k5 L4 r% `
5 k. p. @- A, v& Y, N3 D; ?
/* no rts heap */6 ~$ }2 U9 l3 ^9 P3 w
Program.heap = 0;
" a" B! H2 z' l, |" h7 Z, t5 vProgram.argSize = 100;  /* minimum size */
5 d. a5 q" }/ ?( i% a% n5 n9 oProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( S& i7 `! r- h9 D, Z
; x9 M- H, ~: d
/* create a default heap */6 P( Z# i  a% D" T( U, j* F/ H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ G/ \* P! V! ~; K
var heapMemParams = new HeapMem.Params();1 p) i5 u8 z$ e8 T+ o! I. v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 C4 K  c" n4 N& ]: R4 z: I0 {
7 s$ A! u7 M& q3 }
var Memory = xdc.useModule('xdc.runtime.Memory');
# w6 h! P7 S( ?, [$ g3 m' e- t2 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ i3 e2 Q( Y, B8 r
. F6 v- h1 t; j8 C
/* configure System module */( d+ o( J& g5 I3 @
var SysMin = xdc.useModule('xdc.runtime.SysMin');. L- p9 x  K/ K+ H# F) R; p- G3 ]' A
SysMin.bufSize = 0x1000;
4 G. Z6 ]" D+ G! ?* e' X6 A! k% eSysMin.flushAtExit = false;
& @4 f1 q9 b. ~- k$ x) i' P* @
) \6 k  v0 k% s. j: |" B5 d7 L( fvar System = xdc.useModule('xdc.runtime.System');
6 _' y+ H# I  m: Z7 F) DSystem.SupportProxy = SysMin;. k3 x  V7 n. o6 E# U
' z* t5 a4 G9 ]. Z6 M' d9 i
/* configure SysBios to use the lower half of Timer 1 */
7 J3 m) [' e$ I2 E6 x8 Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ M6 B8 V) r6 X) \2 T
var Clock = xdc.useModule('ti.sysbios.knl.Clock');  T. O6 T+ \+ _3 L5 K7 C6 u" i
Timer.timerSettings[1].master = true;
; C0 V; T, g) j0 [  OTimer.defaultHalf = Timer.Half_LOWER;
/ `' G9 R- ^& n9 o- k  eClock.timerId = 1;$ y* e6 a, C" O: g7 `/ H
8 w( x9 L$ t2 t% x- M) {9 V! J/ b

) {; r* ]* l0 l6 ^9 I/*8 m9 D' Q* d+ P. M- X
*  ======== Miscellaneous Configuration ========
" N! s% Z$ D. ?; k+ ^3 ~ */
- J' c. }$ m' X; ?
+ }! [! g& [% N, Q# t/* set default diags mask */
( w7 z& C% H0 c9 V0 X+ y1 uvar Diags = xdc.useModule('xdc.runtime.Diags');% c+ ]  r4 m# F
var Defaults = xdc.useModule('xdc.runtime.Defaults');
" ]+ \1 D7 G' M7 W7 D2 e! ~* X- L2 H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" }* d5 [' n0 G7 G" H6 m! GDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- S7 e3 e& Y5 \7 d; o
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; o  O( d6 N- I% K0 {; N  A2 Q6 Q3 RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! B  n  s! U1 y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& C, A# N* k/ Z, x* J2 D1 K# X' M; xDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 A" ~; c; R4 R! z( GDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 p( |1 m+ Y. j( \4 @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' j2 J, y3 G5 M, }& h/ a$ H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 e  G/ [% K2 P1 Y& p$ nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ g% |5 c3 e/ l" P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, v" M' Y% l+ d: B/ WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! Z# V. z( \7 m7 x+ d2 Z0 {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" u; b$ E: s8 U' EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 N& L/ j7 s7 y4 S
: `! B4 n* C: C/ m/* override diags mask for selected modules */" X7 P! j2 [3 f9 i- B9 ]2 Y
xdc.useModule('xdc.runtime.Main');
- p& u1 z6 J3 R4 k9 y% rDiags.setMaskMeta(
9 \! Z: l& T- ?$ y5 _  K# _3 {    "xdc.runtime.Main",1 F5 w6 M0 T+ l* d2 c
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) r1 \6 T# O7 h( {. d/ ~8 {, y    Diags.RUNTIME_ON
) G& ]9 X9 z( n# L6 F+ L( j3 e);0 y7 E, D+ B5 G3 y# i' O( O- n+ Z

- m9 E# T5 y' e# C& Jvar Registry = xdc.useModule('xdc.runtime.Registry');% {% E, ?/ K3 p& _$ |  {
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( H+ j* n6 T& M+ i! G% _( [: IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 N+ e3 F8 w4 q* y9 Y  RRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" R  {& G1 ?$ v- l
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( l; v" I8 {/ ~/ U1 p
$ b% O$ E3 @& L8 w) h$ D/ h; l/* create a logger instance */
- J4 L" D" I- L( D& g7 f2 P) N, |/ Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! t# i- j- A' Z( n
var loggerBufP = new LoggerBuf.Params();& H/ g  d/ O% C/ N- _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 z1 J  I$ @: w9 ^" K* A7 GloggerBufP.bufType = LoggerBuf.BufType_FIXED;9 D5 W" s; v' c# a$ k
- x7 G9 Q) V4 q2 t; ?1 \: Q! f% k& i
var appLogger = LoggerBuf.create(loggerBufP);5 j6 Z7 N: T. o$ D8 l) ]! z
appLogger.instance.name = "AppLog_Core1";
8 q: m$ u- P7 G" q3 n) C4 |2 ^4 jDefaults.common$.logger = appLogger;
; n4 e" N* @# D9 s+ F6 N. p) i: y+ rMemory.defaultHeapSize = 0x8192;   
* l" `4 j1 H2 A" FIdle.idleFxns[0] = "&LEDStatus";
0 v2 W- Q" |3 [+ v9 _* UCache.initSize.l2Size = Cache.L2Size_32K;
% G. K1 ?" ^5 V4 @; ]# ?; g- h3 i7 p! j! |: z( S2 L6 b
回复 支持 反对

使用道具 举报

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 */
# {* H7 ^4 F) M/ A/ N' F& ~# Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# f- b: i/ B) L( [* b) rvar heapMemParams = new HeapMem.Params();+ l& j/ Q9 T6 O6 v) ]; O6 H. |* Q
heapMemParams.size = 0x4000;: x0 x0 ?/ v& L  @5 E8 k7 @
& B$ L9 H: p2 F9 |: X4 e: ]
var Memory = xdc.useModule('xdc.runtime.Memory');
3 u; u( c6 H$ PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! U5 k- l$ A1 O! Z/ Y' [
# |( L" s: a% U) q( y
我大约calloc  每次共计大小为5K*16bits,
& U4 b  _# p1 K6 ]: u而默认配置才0x4000、需要改大。
5 V, O, Q, `* ~1 P* A" W. g
7 C5 q! C  n( f) B3 H1 x. Z. g7 ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 I+ N8 y% P- F, NProgram.heap = 0;) S' O4 C3 ]: F5 u
Program.argSize = 100;  /* minimum size */
' V$ w1 {& x7 f  a; M- y& z' fProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 22:14 , Processed in 0.061522 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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