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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ ^0 c: l& \" h9 I% e
0 X8 o: e- ]( d- t% x( s4 O' ?    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 o& [) o5 y% G' h+ w4 |

" A! x3 h. V8 |其他程序段。。。。。9 ]7 j' C' N( K3 A" H

6 j; B# G5 v: g" C# `   free(x_d);% H9 n: N* G" r! ]
( K, c$ X, r7 x' s0 z! a, V
使用DSP侧单独调试功能,验证动态申请没有问题,. ]4 v+ v- R% B
! e) F- K* v0 @7 I3 j0 ^8 K: @: ~7 c
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- t% K5 z  l, |& H, o# M: o

# I5 D/ U; b4 P% d% e
) p$ b8 W* F8 h8 f# H5 [8 Z0 O' v5 N4 a: \/ p7 p

& b5 ^; G6 W1 D& _- ^* i% K* W: W; g) v! l, ]

* C% V' s$ E5 x8 f2 @$ D/ {( q4 e$ e  I  s  k

7 a* a; G0 r. r
0 i9 p" T' ^# W( n6 K$ z7 o+ u( v$ z  o! O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 r8 k  N! p. _- C6 `. [6 f
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% ?6 R5 i% T( O- V7 W0 x* z. {6 R" ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ i1 ]- r  ?: o' m0 }5 L' R' E
. r% a" Z: M- d" h5 H; q; K1 u; v% K
是不是需要在DSP.CFG中进行配置
! P4 Z2 q0 J$ D/ C  G我现在的配置为
* `: \6 f: l- v6 }' ]3 }2 p; t4 B+ l$ R) `0 O: H: \# b; _4 E7 e6 A
/*
; S6 z( n8 @, a# Q5 ~, l *  ======== Operating System Configuration ========
8 |2 @9 v6 D8 s5 ?% H& } */
  x2 x% s0 G8 z/ r* E  [) ]! t" U, A" x8 D0 V4 A
/* no rts heap */& i  K; x4 T) y
Program.heap = 0;/ s- {3 m$ t5 X) y
Program.argSize = 100;  /* minimum size */
! k8 ~, {8 y' SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: J% J3 K. {9 I1 Y9 O1 d  X0 p) T9 x8 b  I* ?+ |6 y2 Q
/* create a default heap */
& L% T4 Y3 j9 }# i% V* U2 yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 \& ?. l& H1 Y6 D0 g
var heapMemParams = new HeapMem.Params();& x" \. W7 @) E# F$ S
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 ^  F: g! y: Q+ I  C
8 f6 C. W- n& F" c& ?) ?  r
var Memory = xdc.useModule('xdc.runtime.Memory');
" x* Z  w, R. l: A* ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 r- S$ ^% ]1 ^8 Y- w/ |) y
* b0 J: s; Z! [. v
/* configure System module */2 z% m, k  @2 U: s5 E9 B2 i0 m
var SysMin = xdc.useModule('xdc.runtime.SysMin');9 B0 |( X" t( N3 e5 M4 _: e/ r
SysMin.bufSize = 0x1000;
' R- s/ [% I+ B0 }& f% XSysMin.flushAtExit = false;
' U* D1 j' a# o, W6 ]6 J5 H. F3 S" p  [: ?6 t% d' ]
var System = xdc.useModule('xdc.runtime.System');8 B1 K) _& p- r0 m
System.SupportProxy = SysMin;0 H5 }' F. r# J

' v" `- ?1 I- R7 Q) K/* configure SysBios to use the lower half of Timer 1 */
/ |7 p& i; {3 c# ~) ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* g- B( c# y5 Z: v7 q) p- o. m" K9 i* F. F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 j! k8 U7 ]8 o' m6 z
Timer.timerSettings[1].master = true;
& p# o: A+ F+ y6 c9 ]Timer.defaultHalf = Timer.Half_LOWER;) r+ k. [7 P$ K. a, }
Clock.timerId = 1;) {9 r  p2 [7 E( r: M" n) M8 W/ |
' D- K8 c( q4 v: C9 u5 \% T
  C3 L% `+ H7 i& H
/*
1 V/ ]- S! y8 S5 d1 _2 G *  ======== Miscellaneous Configuration ========) x) f3 J. i3 E2 t9 b
*/) |# k# p5 \3 l) ?6 b

/ Q# h) J# _: z; k& D/* set default diags mask */
* F0 ~' ?9 A; I# e" Ovar Diags = xdc.useModule('xdc.runtime.Diags');
2 P5 C* b' e( t+ q$ c5 {3 Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 w5 I' {$ ]: C- e5 h. f& x! t" X, @0 I7 G9 d9 p' t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* I$ r$ S/ ^* d. NDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& ~1 A) C# j: v- a1 R
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 Y2 b1 Q- N' w* T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 l( _; G+ b# l: @7 KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- `3 M4 g! z( h1 S+ H( v- \3 `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) `- N% c7 m: p( gDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ Q: k6 U; {) q2 `% rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# i5 S6 A2 f2 u7 ^
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( {0 [* p+ p  pDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: F$ T7 Y% m, `# \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ G! @3 ?2 p1 Y, u# WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" V. H- N- S6 A9 FDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 c) x( t' t7 ]( E) D) h1 kDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 M; s- l  Q  O; x8 l, h
5 u1 Z3 \4 A" P! G2 D
/* override diags mask for selected modules */
, S: }* a8 H' rxdc.useModule('xdc.runtime.Main');
' H* _% Y5 L, N* H+ N5 J; Y+ x) t; UDiags.setMaskMeta(' `+ k7 }9 p  O
    "xdc.runtime.Main",
8 M' B# z  _  j. e    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" X8 Q" C  v9 p. n    Diags.RUNTIME_ON( ?* }" v: a; l9 f& L9 D# v; u
);
2 B9 G. Y+ C0 n2 q
/ y# }! a  l  F' C$ Avar Registry = xdc.useModule('xdc.runtime.Registry');  n% E8 [7 F0 b: Q3 o( U5 L- H
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 P: `3 M+ P) b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 \. x: j" u) l+ b9 g8 o$ V: U# jRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 S5 L/ G6 r+ GRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ r/ K& K7 g+ c/ i3 I$ |
) {6 X& `" F5 ~( t. x. Y  I/ F/ g
/* create a logger instance */+ D& S9 V7 R2 L4 ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" e" D4 k; R! n2 w4 O1 m4 i' P/ |var loggerBufP = new LoggerBuf.Params();
2 f# ?# \2 D8 w$ @loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 R, p; w$ _+ ?' s8 ?) u, y( J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;! G% }* N* Q3 f' K

) A3 X' q9 g) Z1 f% `( g8 P4 F) Cvar appLogger = LoggerBuf.create(loggerBufP);
2 q3 O3 F, c9 s& `6 Z4 u2 AappLogger.instance.name = "AppLog_Core1";. ]. ]' s8 R9 j5 B
Defaults.common$.logger = appLogger;/ {2 a* F) a" R$ P  Y3 t" D
Memory.defaultHeapSize = 0x8192;    * I# h2 i8 [9 I2 c0 B
Idle.idleFxns[0] = "&LEDStatus";
1 q. ~+ l" x5 S4 o# BCache.initSize.l2Size = Cache.L2Size_32K;
. P$ B7 t* @" u  y$ J0 d) a: f1 v1 N" R7 t" A. 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 */% h5 v6 G) f3 K8 s0 d. q$ l5 C: X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ g& Z; m- y  [. Tvar heapMemParams = new HeapMem.Params();
! |0 o* g0 I, J" D. A9 EheapMemParams.size = 0x4000;
/ _- b( h& j7 U3 m1 o% h4 k+ b8 ]) V7 Y8 W, B7 D# a: J
var Memory = xdc.useModule('xdc.runtime.Memory');1 \3 P- A7 W  ^$ u* _( m5 U- H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  E, x& t5 R( v
0 f# D( ]) H6 |+ x& n我大约calloc  每次共计大小为5K*16bits,6 A9 }; q- P. i1 T- D
而默认配置才0x4000、需要改大。
/ M% b6 Z# H  K" v% K( c
+ d1 A; g0 p6 P; `. b1 }( J+ f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" ?- I' A/ w9 ]" t( V* M, z' eProgram.heap = 0;
' `/ {2 T+ D+ _: h0 IProgram.argSize = 100;  /* minimum size */
5 X1 S6 p- o: q5 K$ @0 hProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-7 23:04 , Processed in 0.042820 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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